将应用开发成系统应用,有如下这么几种情况:
1、只是想把 apk 放在 /system/app or /system/priv-app 下,不需要额外的权限。直接找个文件管理器把 apk 文件复制到对应的目录中去,就可以了。
2、在保证 apk 是系统应用的基础上,还想利用系统签名权限做一些事情。这也是我选择的方法。针对这种情况,你需要找到你上传 apk 的系统在编译的时候生成的签名文件。具体在 /android/system/build/target/product/security 中,找到 platform.pk8 以及 platform.x509.pem,复制出来。然后编译系统过程中生成的文件中找到 signapk.jar 文件,也复制出来。这个 signapk.jar 是通用的,找不到可以直接上网下载一个。之后,按照文末提供的脚本以及注释,就可以完成系统应用的安装以及对应系统签名权限的调用了。
3、编译系统的时候直接把你的 apk 编译进去。这种方式我也不太清楚,具体步骤方法可以自行百度。因为我们的 apk 还不是最终版,还需要不断的开发和调试,因此也就没有选择这种方法。
安装系统应用脚本如下:
首先,将 android studio 生成的 unsigned(未签名)的 apk 复制到包含证书以及相关文件的目录下。
cp /path-to-your-out-dir-of-project/app-release-unsigned.apk /target-dir/unsigned.apk
签名
java -jar signapk.jar ./platform.x509.pem ./platform.pk8 unsigned.apk signed.apk
adb root and remount。root 是往 /system/app or /system/priv-app 写入文件所必须的。 remount 会把 android 的文件系统挂载成可读写的。这两个条件缺一不可。
adb root
adb remount
修改 apk 的权限。
chmod 777 ./signed.apk
把 apk 放进去.
adb push ./signed.apk /system/priv-app/ourtest.apk
重启。
adb reboot
最近发现,可以不通过重启(毕竟测试次数一多,就会发现重启也是一个非常耗费时间的调试平静),直接杀掉 app 对应的进程就可以达到重启的效果。
adb shell am force-stop your.package.name