APEX, Android Package for OS
Posted on 12/24/2018 in tech
최근 AOSP에 apex하는 기능이 추가되었습니다. 안드로이드에서는 앱을 배포하기 위해 apk라는 패키징 형식을 이용하는데요, apex는 앱 대신 OS의 일부 기능을 업데이트 하기 위해 사용하는 패키지 형식으로 짐작됩니다.
현재 aosp의 master 버젼을 빌드하고 나면 다음과 같은 apex 파일들이 생성됩니다.
$ ls $OUT/system/apex
com.android.conscrypt.apex
com.android.resolv.apex
com.android.runtime.debug.apex
com.android.tzdata.apex
$ unzip -t $OUT/system/apex/com.android.runtime.debug.apex
Archive: out/target/product/generic_x86_64/system/apex/com.android.runtime.debug.apex
testing: apex_manifest.json
testing: apex_payload.img OK
testing: resources.arsc OK
testing: AndroidManifest.xml OK
testing: META-INF/CERT.SF OK
testing: META-INF/CERT.RSA OK
testing: META-INF/MANIFEST.MF OK
언듯 보기에는 apk 파일의 내용물과 유사하지만, classes.dex 대신 apex_payload.img 라는 파일이 포함되어 있습니다. 해당 파일은 ext2 형식의 파일시스템을 포함하는 이미지이며, 각 역할을 수행하는 실행파일, 공유라이브러리, 또는 OS에서 필요로 하는 리소스가 포함될 수 있습니다.
현재 aosp의 master에서 apex형식으로 분리될 수 있는 항목은 다음과 같습니다.
- com.android.runtime : Android Runtime(ART)
- com.android.conscrypt : Secure Layer for Java
- com.android.resolv : DNS Resolver
- com.android.tzdata : Timezone resources for bionic/icu
- com.android.media : Media Codecs
따라서 기기 제조사에서 직접 Android OS의 업데이트를 진행하지 않더라도, 위 항목들은 꾸준히 업데이트가 될 수 있을 것으로 보입니다.