获取系统权限的应用就必须要有系统签名,但是在开发一个系统的时候,为了系统的安全性,往往会去改变系统的签名。我们都知道通过platform.pk8 platform.x509.pem和signapk.jar可以对应用进行签名操作,但是这样很麻烦,而且也没办法使用AndroidStudio中的调试操作了,最简单的方式还是生成keystore然后放在Androidstudio里,这样每次编译生成的APK就会自动签上名,方便许多。
接下来详细讲解如何生成对应系统的系统签名:
1、获取对应文件
文件:platform.pk8 和 platform.x509.pem
路径:Android源码目录:release/android/n-cn/build/target/product/security/
注意是源码目录下
2、生成shared.priv.pem 和 pkcs12
源码目录下新建一个文件夹signed,把platform.pk8 和 platform.x509.pem放进去,在该目录对应的Linux环境下执行命令行操作:
生成shared.priv.pem :
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
生成pkcs12:
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
这两份文件生成后,需要键入密码,自己设置就行
3、生成debug.keystore
在与上一步相同的位置执行命令行操作,注意:android改成自己刚才设置的密码
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
这步操作有可能出错,keytool不能解析,原因是环境没有配置
配置环境:
1、找到对应的jdk
grep -rn jdk .
找到对应文件proj_toolchain.sh,进入文件查看一下,能看到一下配置就可以
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CLASSPATH=$ JAVA_HOME/lib
export JRE_HOME=$ JAVA_HOME/jre
export PATH=$ JAVA_HOME/bin:$ JRE_HOME/bin:$PATH
2、在该文件所在目录下,Linux命令行,引入改文件,即配置完成
source proj_toolchain.sh
执行完后再回头执行keytool的命令行操作,即可以看到生成的debug.keystore文件
4、导入debug.keystore文件并且修改app/build.gradle
CvteConfig {
storeFile file("debug.keystore")
storePassword "123456"
keyAlias "androiddebugkey"
keyPassword "123456"
}
}
buildTypes {
release {
signingConfig signingConfigs.CvteConfig
minifyEnabled false
//这句不用改,原来是什么就什么
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
signingConfig signingConfigs.CvteConfig
}
}
dependencies{}
}
5、这就签名完成了,以后该项目生成的apk都会带有系统签名
注意:这个签名只是对本项目有效