[TECH] Google Play 64bit 지원 정책과 준비

Google Play 64bit 지원 - 2019년 8월 1일 부터 시행되는 구글 플레이 64bit 지원 사항에 대해 알아 보고 준비 방안을 설명합니다.

 
 

[TECH] Google Play 64bit 지원 정책과 준비

 
 
최근 구글 플레이의 정책으로 인해 2019년 8월 1일부터 새롭게 등록된 앱과 앱 업데이트에는 64bit 버전이 함께 제공되어야 하고 있습니다.
 
이와 관련한 정보는 아래와 같습니다.
 
[ Get your apps ready for the 64-bit requirement by google ]
 
2019년 8월 1일부터 :
- 네이티브 코드를 포함하는 모든 새 앱과 앱 업데이트는 Google Play에 게시할 때 32bit 버전 외에 64bit 버전도 함께 제공.
- 기간 연장 대상: Google Play는 2021년 8월까지 Unity 5.6 또는 이전 버전을 사용하는 기존 게임에 대한 32bit 전용 업데이트를 계속 허용할 예정.

2021년 8월 1일부터 :
- Google Play는 64bit 지원 기기에서 64bit 버전이 없는 앱에 대한 서비스를 중단할 예정, 이에 따라 해당 기기에서는 Play Store에서 사용 불가. ( Unity 5.6 또는 이전 버전으로 만든 게임 포함 )

- 아래에 해당되는 서비스에 대해서는 해당 요구 사항이 적용되지 않음.
현재 64bit 코드를 지원하지 않는 폼 팩터인 Wear OS 또는 Android TV를 명시적 대상으로 하는 APK 또는 앱 번들
 Android 9 Pie 이상을 실행하는 기기에 배포되지 않는 APK 또는 앱 번들
 
기존 64bit Android 시스템에서는 64bit용 native dynamic library( .so ) 가 존재 하지 않더라도 32bit 호환 시스템을 통해 32bit 모드로 동작 시키고 있었습니다.
 
이로 인해 64bit의 고성능의 기기에서도 32bit 메모리 체계로 실행됨에 따라 효율적인 운영을 하지 못하였음에 내린 정책으로 판단됩니다.
 
위 사항은 2019년 8월 1일 부터 기존 등록된 Unity 5.6 이하의 엔진을 사용하는 서비스를 제외한 모든 앱들에게 적용되는 사항임을 알 수 있습니다.
 
이러한 정책으로 인해서 2019년 8월 1일 부터 플레이 스토어에 앱을 업데이트 하거나 앱을 새롭게 등록할 시에는 아래의 항목을 충족하여야 합니다.
 
- 앱 패키지 내 native dynamic library를 사용하는 앱은 반드시 64버전을 포함
 
내가 서비스 하는 앱이 native dynamic library를 사용하고 있는지 알고 싶다면 아래와 같은 방법으로 확인할 수 있습니다.
 
1. APK or AAB 파일을 zip open
2. 'lib' 디렉토리가 있는지 확인 ( AAB의 경우 base/lib 디렉토리 확인 )

위 작업을 통해 lib 하위에 'armeabi-v7a' , 'armeabi' 등의 디렉토리가 존재하고 내부에는 .so파일이 존재 한다면, native dynamic library를 사용하는 앱으로 판단할 수 있습니다.
 
만약 lib 디렉토리 하위에 'arm64-v8a'가 존재하고 'armeabi-v7a' , 'armeabi' 등의 디렉토리 하위에 존재하는 파일들이 모두 'arm64-v8a'에 존재 한다면, 현재 해당 앱은 64bit를 지원하고 있는 앱일 수 있습니다.
 
또한 위 작업 시 'lib'폴더가 존재 하지 않는다면 여러분의 앱은 native dynamic library를 사용하지 않고 있음으로 이번 정책은 신경 쓰지 않으셔도 될 것입니다.
 
여러분의 앱 패키지 내에 'arm64-v8a' 폴더가 존재 한다면 아래의 단계를 통해 실제 내 앱이 64bit 디바이스에서 64bit mode로 실행하고 있는지 확인할 수 있습니다.
 
1. 연결되어 있는 device가 64bit 디바이스인지 확인.
  - adb shell getprop ro.product.cpu.abi를 실행한 결과 값이 'arm64-v8a'이라면 64bit device

2. 앱에 소스 코드에 Build.CPU_ABI( api level 21 이하 ), Build.SUPPORTED_ABIS( api level 21이상 )를 추가하여 앱 실행 시 해당 필드의 결과값이 'arm64-v8a' 인지 확인
 
위 작업 통해 앱 실행 시 'arm64-v8a'라면 현재 해당 앱은 64bit 를 지원하고 있음으로 이번 정책의 요구사항에 이미 충족을 하고 있습니다.
 
하지만 위 작업을 통한 확인 시 여러분의 앱이 64bit를 지원하고 있지 않다면 64bit용으로 compile된 native dynamic library를 추가 하셔야 합니다.
 
이번 정책으로 인해 많은 앱 서비스들이 64bit mode를 준비하였고 새롭게 64bit용 native dynamic library를 추가함에 따라 앱 패키지의 용량이 커지는 현상이 일어 나고 있으며, 이로 인해 많은 앱 서비스들이 AAB(Android App Bundle)로의 전환을 통해 해당 문제를 해소하려 하고 있습니다.
 
google play 64bit timeline
 
UNITY의 경우 64bit 지원을 위해 IL2CPP mode를 사용하게 되는데, IL2CPP의 경우 기존 MONO mode일 때 사용자가 개발한 소스코드가 'assets' 내부에 .dll의 단일 형태로 존재하는 것과는 달리 패키지 내 'lib' 디렉토리 하위에 libil2cpp.so 의 native dynamic library 형태의 파일로 제공되고 있습니다.

libil2cpp.so 파일은 native dynamic library이기 때문에 이번 정책에 포함됨으로 해당 파일은 32bit 64bit 모두 존재 하여야 함으로 앱 Build 시 앱 패키지의 용량이 커짐을 볼 수 있습니다.

이를 해소하기 위해 Android App Bundle( AAB )를 이용하는 경우 플레이 스토어에서 다운로드 받는 기기에 맞는 native library및 리소스만을 설치할 수 있음으로 빠른 앱 다운로드 속도와 사이즈의 절감으로 유용하게 사용되고 있습니다.

AAB에 관한 기술적인 내용은 별도의 포스팅에서 다뤄 보도록 하겠습니다.

LIAPP은 64bit system에서 안정적인 보안 기능을 제공합니다.

LIAPP, 최상의 서비스만을 제공하겠습니다.
 
 

#android_application_security #ios_application_security #ios_application_security #source_code_hardening #android_app_bundle #AAB #APK #모바일_앱_보안 #앱_보안_서비스 #게임_보안_서비스 #소스코드_보호 #소스코드_보안 #앱_위변조_방지 #메모리_덤프_방지 #악성코드_탐지 #해킹툴_탐지 #리패키징_방지 #메모리_보안