1.问题
在调试libtinyalsa.so中添加log后,但是发现push so后,却没有log打印,why?
2.分析
以下为libtinyalsa.so的位置
/system/lib64/libtinyalsa.so
/system/lib/libtinyalsa.so
/apex/com.android.vndk.v31/lib64/libtinyalsa.so
/apex/com.android.vndk.v31/lib/libtinyalsa.so
/apex/com.android.vndk.v31@1/lib64/libtinyalsa.so
/apex/com.android.vndk.v31@1/lib/libtinyalsa.so
并且发现/apex目录下全是只读权限,这该怎么整?
3.看下Google对APEX的解释图
在顶层,APEX 文件是一个 ZIP 文件,其中的文件以未压缩的形式存储,且位于 4 KB 边界。
APEX 文件中的 4 个文件如下所示:
apex_manifest.json
AndroidManifest.xml
apex_payload.img
apex_pubkey
APEX 命名准则
为了避免伴随平台发展产生的新 APEX 之间的命名冲突,请遵循以下命名准则:
com.android.*
为 AOSP APEX 预留。并非任何公司或设备所专用。
com.<companyname>.*
为公司预留。可能由相应公司的多台设备使用。
com.<companyname>.<devicename>.*
为特定设备(或部分设备)的专属 APEX 预留。
APEX 文件是 APK 文件
APEX 文件是有效的 APK 文件,因为它们是包含 AndroidManifest.xml 文件的已签名 ZIP 归档文件(使用 APK 签名方案)。这允许 APEX 文件使用 APK 文件的基础架构,例如软件包安装程序应用、签名实用程序和软件包管理器。
APEX 中的文件类型及其位置
文件类型 | 在 APEX 中的位置 |
共享库 | /lib 和 /lib64(在 x86 中,翻译后的 ARM 的位置为 /lib/arm) |
可执行文件 | /bin |
Java 库 | /javalib |
预编译文件 | /etc |
也就是说apex的lib库和/system/lib64的system分区系统库已经分离了,可以单独替换。
3.解决方法
# make com.android.vndk.current -j12
# adb install out/target/product/blueline/system/apex/com.android.vndk.current.apex
# adb reboot