環(huán)境準(zhǔn)備: linux系統(tǒng) java11(大于java8,java中需包含keytool)? openssl?
Java11下載路徑https://www.openlogic.com/openjdk-downloads
后附相關(guān)知識(shí)與路徑
1.生成未簽名的Apk包
雙擊圖中assemble任務(wù)生成未簽名release包
注:如果在gradle中沒(méi)有Tasks模塊,在設(shè)置中開(kāi)啟Tasks?

雙擊圖中assemble任務(wù)生成未簽名release包
注:如果在gradle中沒(méi)有Tasks模塊,在設(shè)置中開(kāi)啟Tasks?
附圖:

將Do not build Gradle task list during Gradle sync 取消勾選之后sync即可

2.為了確定系統(tǒng)簽名的platform.x509.pem,platform.pk8可以在設(shè)備上使用,建議先用命令生成簽名包驗(yàn)證是否簽名成功,并且可以安裝到相應(yīng)設(shè)備
命令:java -jar platform.x509.pem(地址) platform.pk8(地址) app-unsigned.apk(地址) app-signed.apk(地址)
如果此時(shí)簽名出現(xiàn)錯(cuò)誤

需要在命令中添加libconscrypt_openjdk_jni.so
新命令:??
java -Djava.library.path='/home/bomine/Desktop/signer/'(上層文件夾地址) -jar platform.x509.pem(地址) platform.pk8(地址) app-unsigned.apk(地址) app-signed.apk(地址)
此時(shí)即可簽名成功
注:此方法可做臨時(shí)使用,為了方便調(diào)試與開(kāi)發(fā),可將platform.x509.pem platform.pk8轉(zhuǎn)換成為.jks文件方便使用android studio打包
注:此方法關(guān)鍵文件及截圖已在下方列出

3.將platform.x509.pem platform.pk8 轉(zhuǎn)成.jks
1)將使用.pk8生成platform.priv.pem (.pem即可,文件名可隨意修改)
命令: openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt

2)生成.p12,此時(shí)需輸入兩次密碼,并且要記住 -name后所設(shè)置的alias,此處設(shè)置的alias為backpack
命令: openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.p12 -name backpack

3)生成.jks文件,此處需注意-srcstorepass 后為步驟2)設(shè)置的密碼,此處如果輸入錯(cuò)誤會(huì)導(dǎo)致出現(xiàn)密碼不對(duì)的錯(cuò)誤,輸入兩次密碼后即可生成.jks
命令:keytool -importkeystore -destkeystore humangSysLauncherx.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass backpack666 -alias backpack

4.使用此.jks
1)在清單文件AndroidManifest中輸入android:sharedUserId="android.uid.system",之后打開(kāi)圖示選項(xiàng)

2)選擇圖示選項(xiàng),進(jìn)行下一步


3)按照?qǐng)D示選項(xiàng)選擇,Destination Folder為apk輸出路徑,V1,V2,為輸出包類(lèi)型,兩個(gè)都要選擇
如果只選擇V1會(huì)導(dǎo)致安裝時(shí)產(chǎn)生[INSTALL_PARSE_FAILED_NO_CERTIFICATES]報(bào)錯(cuò)
如果只選擇V2會(huì)導(dǎo)致簽名不成功

5.查看apk包簽名(此操作查看系統(tǒng)包名是否簽發(fā)成功)
命令:keytool -printcert -jarfile app-release.apk (apk路徑)
注:此圖為普通簽名

注:此圖為系統(tǒng)簽名

注:此圖為未簽名成功

相關(guān)知識(shí):
Android系統(tǒng)中主要簽名文件:
media.pk8 ,media.x509.pem?
platform.pk8 ,platform.x509.pem
releasekey.pk8,releasekey.x509.pem
shared.pk8,shared.x509.pem
testkey.pk8,testkey.x509.pem
Android系統(tǒng)中簽名文件路徑:
build/target/product/security/目錄下
Android系統(tǒng)中signapk.jar簽名文件路徑:
/out/host/linux-x86/framework/
.pk8和.x509.pem的區(qū)別
.pk8就是私鑰文件,用于對(duì)apk進(jìn)行簽名。這個(gè)私鑰需要保密保存,不能公開(kāi)。
.x509.pem是證書(shū)文件,相當(dāng)于公鑰。這個(gè)可以公開(kāi),主要用于驗(yàn)證某個(gè)apk是否由相應(yīng)的私鑰簽名。
libconscrypt_openjdk_jni.so路徑
prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so