1. 推至指定目录
如何让一个第三方apk成为系统apk呢?传统的办法是连上adb线,push到系统指定目录下:
$ adb push 'demo.apk' /system/priv-app/
然后reboot安卓终端达到重启,重启后会自动安装第三方apk为系统apk。
$ adb reboot
需要说明的是,如果demo.apk有第三方lib库依赖,需要添加lib下的库文件至/system/lib-64中。否则app运行会报缺少库文件依赖的异常。
$ adb push '/Face/libnative-lib-vcc.so' /system/lib-64
如果你需要卸载系统apk就略微有些麻烦,你需要remove掉这些目录下的文件。而且容易残留碎片。(比如,最容易犯的错是你只删了system/priv-app下的apk文件,却没有去/system/lib-64下删除依赖)。
$ adb rm -rf /system/priv-app/demo.apk
$ adb reboot #需要重启才能生效.
2. 制作系统签名
上述方法因为要频繁reboot,且容易产生大量碎片实在不可取。另一种方法是使第三方apk取得系统签名,就可以像安装/卸载第三方apk一样达到制作系统apk的目标。
这个过程需要得到目标安卓终端的系统源代码编译出来的文件。首先,在Android源代码目录下找到该编译文件:
两个平台签名文件的地址分别为:
android/build/target/product/security/platform.pk8 ;
android/build/target/product/security/platform.x509.pem
需要在Shell终端中,把platform.pk8文件从pkcs8格式私钥转化为pkcs12格式:
$ openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
同理,把platform.x509.pem转化为pkcs12格式:
$ openssl pkcs12 -export -in platform.x509.pem -inkey shared.pri
v.pem -out shared.pk12 -name androiddebugkey
文件设置私钥名称为androiddebugkey, 然后会弹出设置私钥密码,输入“android”.
key store password:android
key alias:androiddebugkey
key password: android
利用Linux自带的keytool制作platform.keystore签名文件:
$ keytool -importkeystore -deststorepass android -destkeypass android -destkeystore platform.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
3. Android Studio导入签名文件
首先,保证项目Make Project通过。接着,Build > Generate Signed Apk:
选择.keystore签名文件所在目录,分别输入key store password等参数(同之前Shell终端输入)
然后点击Next按钮,选择v2 Full APK Signature。然后,你的app只要遵循第三方apk安装方式即可!系统apk制作至此步完成。
当然你也可以用adb install和adb uninstall命令来安装指定路径下的apk。
$ adb install 'Face/app-debug.apk' # install参数后接的是apk路径
$ adb uninstall 'com.example.helloworld' # uninstall参数后接的是已安装apk的packageName.
如有任何问题和疑问,欢迎大家关注我的微信公众号: