如何在 Android Marshmallow 平台上高效开发系统应用程序?
How to productively develop system apps on Android Marshmallow platform?
我正在使用 eng
构建的平台开发 Android 特权系统应用程序...
在 Lollipop 中,我能够设置 LOCAL_DEX_PREOPT := false
,然后使用 mm
构建我的 APK,对系统分区执行 adb remount
和 adb push
APK。系统会检测到变化并重建 dex,我的工作效率很高。如果该应用程序 persistent
我只需要另外终止该进程。
现在,我在 Marshmallow 上开发时 运行 遇到了这个过程的各种问题。推送 APK 并尝试 运行 得到:
02-01 20:58:26.302 E/dex2oat ( 3045): Failed to create oat file:
/data/dalvik-cache/arm64/system@priv-app@XYZ@XYZ.apk@classes.dex:
Permission denied
SELinux 问题:
[ 1614.216323] type=1400 audit(686361.299:48): avc: denied { write }
for pid=2640 comm="oid.XYZ" name="arm64" dev="dm-0" ino=360453
scontext=u:r:system_app:s0
tcontext=u:object_r:dalvikcache_data_file:s0 tclass=dir permissive=0
我尝试了各种技巧来解决这个问题...
当然我可以重建整个系统 img 并刷新它,但这会降低工作效率。
我想我想出了一个比修改 SELinux 和 app_main.cpp 更简单的替代方法。遵循这些步骤可以让我快速更新我的系统应用程序:
- 使用
LOCAL_DEX_PREOPT := false
构建应用,以便 dex 文件保留在 APK 中
adb remount
至少一次
adb rm -rf /system/priv-app/XYZ/oat
adb push $OUT/system/priv-app/XYZ/XYZ.apk /system/priv-app/XYZ/
我正在使用 eng
构建的平台开发 Android 特权系统应用程序...
在 Lollipop 中,我能够设置 LOCAL_DEX_PREOPT := false
,然后使用 mm
构建我的 APK,对系统分区执行 adb remount
和 adb push
APK。系统会检测到变化并重建 dex,我的工作效率很高。如果该应用程序 persistent
我只需要另外终止该进程。
现在,我在 Marshmallow 上开发时 运行 遇到了这个过程的各种问题。推送 APK 并尝试 运行 得到:
02-01 20:58:26.302 E/dex2oat ( 3045): Failed to create oat file: /data/dalvik-cache/arm64/system@priv-app@XYZ@XYZ.apk@classes.dex: Permission denied
SELinux 问题:
[ 1614.216323] type=1400 audit(686361.299:48): avc: denied { write } for pid=2640 comm="oid.XYZ" name="arm64" dev="dm-0" ino=360453 scontext=u:r:system_app:s0 tcontext=u:object_r:dalvikcache_data_file:s0 tclass=dir permissive=0
我尝试了各种技巧来解决这个问题...
当然我可以重建整个系统 img 并刷新它,但这会降低工作效率。
我想我想出了一个比修改 SELinux 和 app_main.cpp 更简单的替代方法。遵循这些步骤可以让我快速更新我的系统应用程序:
- 使用
LOCAL_DEX_PREOPT := false
构建应用,以便 dex 文件保留在 APK 中 adb remount
至少一次adb rm -rf /system/priv-app/XYZ/oat
adb push $OUT/system/priv-app/XYZ/XYZ.apk /system/priv-app/XYZ/