pk8/x509.pem转换为keystore

背景

咱们都知道AndroidManifest.xml配置以下属性html

android:sharedUserId="android.uid.system"复制代码

直接运行是跑不起来的,咱们只有拿到了平台的pk8/x509.pem文件经过以下签名命令:java

java -jar signapk.jar platform.x509.pem platform.pk8 old.apk [new].apk
android

才能得到与android.uid.system相同的权限,才能调用系统api,这种状况会给开发带来很大的困扰,代码调试不方便,影响开发效率。web

如今有一种方法将pk8/x509.pem导入到keystore,而后咱们运行代码的时候使用keystore进行签名就能够得到与android.uid.system相同的权限,不须要再次进行系统签名windows

环境准备

以windows为例首先须要下载openssl ,根据本身的 实际状况选择版本api


下载后直接安装,安装完成环境变量Path只想到bin目录,以下图:bash



导入到keystore

第一步

cd到pk8以及x509.pem文件的目录执行以下命令,把platform.pk8生成了.pem 文件:ui

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
spa

其中platform.pk8为pk8文件名, platform.priv.pem为.pem 文件文件名能够随意修改,执行成功后,会在目录下生成pem文件以下:debug


第二步

执行以下命令,生成pkcs12格式的密钥文件,生成platform.pk12文件,最后的android是keystore的alias,这里默认为android_box, platform.pk12是pk12文件名,须要输入两次密码,咱们这里默认为android_box

openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name android_box

须要输入两次密码,咱们这里默认为android_box


会在目录下生成pk12文件,以下图:



第三步

执行以下命令生成keystore文件,

keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass android_box -alias android_box

platform.keystore是生成的keystore文件,也能够是jks,-srcstorepass后面的android_box 是keystore的密码,-alias 后面的android_box是keystore的alias,这个须要与第二步中的alias一致,不然报错以下:


须要输入第二步中生成pk12的password,不然报错以下图


正确输入 密码后,keystore文件生成好了,接下咱们在项目中不管是debug仍是release均可以得到与android.uid.system相同的权限。