方式一:已有包,二次系统签名
缺点:复杂
所需文件
- app release .apk
- platform.pk8 & platform.x509.pem 进入官网地址后选择你运行的对应版本 ,在后面加上路径:xref/build/target/product/进行下载
- signapk.jar 下载官网地址同上 目录路径 : /xref/prebuilts/sdk/tools/
进行系统签名
java -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk app_release_system_signed.apk
app打包配置
在AndroidManifest.xml中的manifest标签下加入
android:sharedUserId="android.uid.system"
如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx"
android:sharedUserId="android.uid.system">
需要注意的是 加了这个标签不进行系统签名装不上
安装到设备
设备需要root !!!
执行以下命令:
adb remount
adb push xxx.apk /system/app
然后重启设备
adb reboot
复制so库
如果项目中有so的情况下,系统签名完之后就会发现,得到的包比原包小很多。 没有的话直接跳过这一步。
原因就是系统签名不会拷贝so到新的apk中。需要自己手动push
运行app,如果闪退报错System.loadLibiary找不到某个so,再用adb push 命令把原包中的so库对应目录整体拷贝到报错中对应的路径。然后再启动app即可
方式二:直接生成系统签名文件签名
优点:灵活、可以用于Android studio直接debug或者release
所需文件:
-
platform.pk8 & platform.x509.pem
生成签名文件需要在linux下执行
首先将 keytool-importkeypair 添加到path
vim ~/.bash_profile
在最后添加
export PATH=/keytool-importkeypair所在的路径:$PATH
刷新配置
source ~/.bash_profile
执行命令
./keytool-importkeypair -k ./你的密钥文件名.keystore -p 密钥密码 -pk8 platform.pk8 -cert platform.x509.pem -alias 密钥别名
如
./keytool-importkeypair -k ./mykeyfile.keystore -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias mykey
然后就会在当前目录生成mykeyfile.keystore文件
再as中配置使用这个文件签名打包app就直接是系统签名