生成步骤如下:
1、编译android源码。
2、cd build/target/product/security/
已有platform.pk8和platform.x509.pem文件可省略1-2步骤
3、执行 openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
需要安装openssl,安装完后配置openssl环境(下载地址:OpenSSL)详见博客配置openssl环境
生成platform.pem文件
4、执行 openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name sign
生成platform.p12文件,其中sign 为alias名(app添加签名要用到),123456 为密码。
5、执行 keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 123456
生成platform.jks (app打签名最终用到的文件),其中-deststorepass 123456设置的是这个签名的密码,上面指令中的-src*的其他参数都是从前面两个指令中生成的。
6、将生成的platform.jks 拷贝到app工程目录下。7、在对应需要签名的module的build.gradle中添加如下代码:
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.zhonghong.settings"
minSdkVersion 28
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//添加如下代码
signingConfigs {
def KEY_ALIAS = "sign"
def KEY_PSWD = "123456"
def STORE_FILE = "../sign/platform.jks"
def STORE_FILE_PSWD = "123456"
debug {
storeFile file(STORE_FILE)
storePassword STORE_FILE_PSWD
keyAlias KEY_ALIAS
keyPassword KEY_PSWD
}
release {
storeFile file(STORE_FILE)
storePassword STORE_FILE_PSWD
keyAlias KEY_ALIAS
keyPassword KEY_PSWD
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
//解决Execution failed for task ':app:lintVitalRelease
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
8.build-Generate Signed Bundle/APK-APK-Kep Store Path:Choosing exiting 选择签名文件platform.jks目录位置,输入key store password:123456,Key alias:sign,KeyPassword:123456 输入的内容为生成签名文件时设置的密码和别名。Next:勾选V1,V2,生成你要的release或者debug apk。
生成的签名apk可直接安装运行和卸载。(注意:android 9.0以上版本做了限制,加了persistent属性的常驻应用在已预置apk的情况下不能直接安装调试)
以上步骤免去了要签名脚本(signjar)对apk进行签名的步骤。
出现的错误
Error:Execution failed for task ':app:lintVitalRelease'
debug版可以运行,release版生成不了。似乎是有没有用到的module,只需在app下的gradle文件的android部分添加代码:
lintOptions {
checkReleaseBuilds false
abortOnError false
}