假设我们得到了系统签名文件:platform.pk8、platform.x509.pem,还需要一个用于签名的文件:signapk.jar,这里提供了一份下载连接,可供练习使用:链接:https://pan.baidu.com/s/1OiBcVyhZVqTulb6HXwcqHA提取码:7g81
有时候我们找系统提供商要系统签名时,可能给的文件很多,如下:
其实真正只需要用到platform.pk8、platform.x509.pem即可。
不同的系统,系统签名是不一样的,所以你们下载我的这个签名文件是用不到你的系统上的,但是signapk.jar是通用的,什么系统签名都可以使用他。
当你有你的系统签名文件时,如何把一个apk签名为系统签名呢?如下:
java -jar signapk.jar platform.x509.pem platform.pk8 app.apk app_signed.apk
注:这里app.apk就是你的App,此App不论是有签名还是没签名都是可以的,通过上面的命名后,签名就会变成系统的签名了。这有一篇文章:应该是需要在Linux系统下进行操作的:https://www.cdsy.xyz/computer/programme/android/230206/cd40241.html
注:一个应用要想使用系统签名,还需要在清单文件中设置一个属性,如下:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
我们使用adb命令安装一个没有签名的apk
adb install unsigned.apk
此时会报错,如下:
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
INSTALL_PARSE_FAILED_NO_CERTIFICATES翻译过来就是:安装解析失败,没有证书(签名)
使用adb命令安装一个有系统签名的apk,但是安装到一个不匹配的android系统上,会报错如下:
Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE翻译过来就是:安装失败,共享用户不兼容(其实说的就是系统签名与所安装的手机不兼容)
1、把platform.pk8、platform.x509.pem放在同一个目录下,然后cmd中进入这个目录。
2、生成platform.pem,输入如下命令:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
如果提示没有openssl命令,则需要先安装openssl,下载地址:http://slproweb.com/products/Win32OpenSSL.html,一般我们下载64位的exe,且容量大的那个,如下:
预防下载连接失效,这里也提供一个百度网盘下载:链接:https://pan.baidu.com/s/1gFpPMwfwCTpty7xCdiEZ2A提取码:1234
安装后之后,把安装目录下的bin目录设置到path环境变量中即中。
3、生成platform.p12,命令如下:
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name key0
注:这里的123456为密码,key0为别名,可以自行设置。
4、生成platform.jks,命令如下:
keytool -importkeystore -deststorepass 123456 -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 123456
注:这里有两个123456,都是密码,与前一步设置的密码保持一致。
这一步,会报出一个警告,如下:
Warning:
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore ./platform.jks -destkeystore ./platform.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。
可以忽略它,也可以按它说的输入那个命令:
keytool -importkeystore -srckeystore ./platform.jks -destkeystore ./platform.jks -deststoretype pkcs12
到这里,我们就有了一个platform.jks的系统签名文件了,以后打包apk就像平常那样打包即可,可以把debug的签名也设置为这个,这样在AndroidStudio中可以直接运行apk来调试。