如何在 Android Marshmallow 平台上高效开发系统应用?
Posted
技术标签:
【中文标题】如何在 Android Marshmallow 平台上高效开发系统应用?【英文标题】:How to productively develop system apps on Android Marshmallow platform? 【发布时间】:2017-02-02 01:36:04 【问题描述】:我正在开发具有 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): 无法创建 oat 文件: /data/dalvik-cache/arm64/system@priv-app@XYZ@XYZ.apk@classes.dex: 权限被拒绝
SELinux 麻烦:
[1614.216323] 类型=1400 审核(686361.299:48):avc:拒绝写入 对于 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 并刷写它,但这会降低生产力。
【问题讨论】:
【参考方案1】:我想我找到了一个更简单的替代方法来修改 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/
【讨论】:
请注意,在 Nougat 上没有oat
目录,因此您可以跳过该步骤并像 Lollipop 一样开发。
上述解决方案的一个问题是,除非使用adb shell stop
和adb shell start
重新启动操作系统,否则对AndroidManifest.xml
的更改不会生效,即使在牛轧糖上也是如此。很想知道不需要启动整个操作系统的解决方法。以上是关于如何在 Android Marshmallow 平台上高效开发系统应用?的主要内容,如果未能解决你的问题,请参考以下文章