如何在 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 平台上高效开发系统应用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Marshmallow 平台上高效开发系统应用?
如何在 Android Marshmallow 上的 Google 地图上显示当前位置?
如何以编程方式打开 Android 6.0 (Marshmallow) 上特定应用的权限屏幕?
如何从 Android 版本 Marshmallow 开始请求从 Android 拨打电话的权限?