生成步驟如下:
1膜楷、編譯android源碼。
2贞奋、cd build/target/product/security/
已有platform.pk8和platform.x509.pem文件可省略1-2步驟
3赌厅、執(zhí)行 openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
需要安裝openssl,安裝完后配置openssl環(huán)境(下載地址:OpenSSL)詳見博客配置openssl環(huán)境
生成platform.pem文件
4轿塔、執(zhí)行 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揍障、執(zhí)行 keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 123456
生成platform.jks (app打簽名最終用到的文件),其中-deststorepass 123456設(shè)置的是這個簽名的密碼漫拭,上面指令中的-src*的其他參數(shù)都是從前面兩個指令中生成的亚兄。
6、將生成的platform.jks 拷貝到app工程目錄下采驻。7审胚、在對應(yīng)需要簽名的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 輸入的內(nèi)容為生成簽名文件時設(shè)置的密碼和別名。Next:勾選V1,V2,生成你要的release或者debug apk痘系。
生成的簽名apk可直接安裝運行和卸載菲嘴。(注意:android 9.0以上版本做了限制,加了persistent屬性的常駐應(yīng)用在已預(yù)置apk的情況下不能直接安裝調(diào)試)
以上步驟免去了要簽名腳本(signjar)對apk進(jìn)行簽名的步驟汰翠。
出現(xiàn)的錯誤
Error:Execution failed for task ':app:lintVitalRelease'
debug版可以運行龄坪,release版生成不了。似乎是有沒有用到的module,只需在app下的gradle文件的android部分添加代碼:
lintOptions {
checkReleaseBuilds false
abortOnError false
}