让apk拥有系统权限签名有两种方法
1. 用系统签名文件进行签名
java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
具体在一个linux环境的AOSP中命令(路径中可以可以看到上述命令相关文件的路径,命令执行路径为你AOSP源码根路径
java -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/media.x509.pem build/target/product/security/media.pk8 input.apk output.apk
然后在Android8.0之后(拾人牙慧,自己没有查到官方说明和原因),直接运行上述命令可能会报错,报错使用如下命令即可(多了参数指定库路径-Djava.library.path=out/host/linux-x86/lib64
)
java -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/media.x509.pem build/target/product/security/media.pk8 input.apk output.apk
2. 生成系统签名文件 .jks(java keystore)
进入AOSP源码编译路径build/target/product/security
,
- 运行如下命令,生成
platform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
- 运行如下命令,生成
platform.p12
,mypassword
是jks签名会用到的密码,myname
是jks的alias名
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:mypassword -name myname
- 运行如下命令,生成
myplatform.jks
keytool -importkeystore -deststorepass mypassword -destkeystore myplatform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass mypassword
-
myplatform.jks
就可以在android studio中配置使用了
signingConfigs {
main {
storeFile file(".myplatform.jks")
storePassword "mypassword"
keyAlias "myname"
keyPassword "mypassword"
}
}
就酱, Good Day~