環(huán)境準備: linux系統(tǒng) java11(大于java8,java中需包含keytool)? openssl?
Java11下載路徑https://www.openlogic.com/openjdk-downloads
后附相關知識與路徑
1.生成未簽名的Apk包
雙擊圖中assemble任務生成未簽名release包
注:如果在gradle中沒有Tasks模塊,在設置中開啟Tasks?
雙擊圖中assemble任務生成未簽名release包
注:如果在gradle中沒有Tasks模塊,在設置中開啟Tasks?
附圖:
將Do not build Gradle task list during Gradle sync 取消勾選之后sync即可
2.為了確定系統(tǒng)簽名的platform.x509.pem,platform.pk8可以在設備上使用,建議先用命令生成簽名包驗證是否簽名成功,并且可以安裝到相應設備
命令:java -jar platform.x509.pem(地址) platform.pk8(地址) app-unsigned.apk(地址) app-signed.apk(地址)
如果此時簽名出現(xiàn)錯誤
需要在命令中添加libconscrypt_openjdk_jni.so
新命令:??
java -Djava.library.path='/home/bomine/Desktop/signer/'(上層文件夾地址) -jar platform.x509.pem(地址) platform.pk8(地址) app-unsigned.apk(地址) app-signed.apk(地址)
此時即可簽名成功
注:此方法可做臨時使用,為了方便調(diào)試與開發(fā),可將platform.x509.pem platform.pk8轉(zhuǎn)換成為.jks文件方便使用android studio打包
注:此方法關鍵文件及截圖已在下方列出
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,此時需輸入兩次密碼,并且要記住 -name后所設置的alias,此處設置的alias為backpack
命令: openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.p12 -name backpack
3)生成.jks文件,此處需注意-srcstorepass 后為步驟2)設置的密碼,此處如果輸入錯誤會導致出現(xiàn)密碼不對的錯誤,輸入兩次密碼后即可生成.jks
命令:keytool -importkeystore -destkeystore humangSysLauncherx.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass backpack666 -alias backpack
4.使用此.jks
1)在清單文件AndroidManifest中輸入android:sharedUserId="android.uid.system",之后打開圖示選項
2)選擇圖示選項,進行下一步
3)按照圖示選項選擇,Destination Folder為apk輸出路徑,V1,V2,為輸出包類型,兩個都要選擇
如果只選擇V1會導致安裝時產(chǎn)生[INSTALL_PARSE_FAILED_NO_CERTIFICATES]報錯
如果只選擇V2會導致簽名不成功
5.查看apk包簽名(此操作查看系統(tǒng)包名是否簽發(fā)成功)
命令:keytool -printcert -jarfile app-release.apk (apk路徑)
注:此圖為普通簽名
注:此圖為系統(tǒng)簽名
注:此圖為未簽名成功
相關知識:
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就是私鑰文件,用于對apk進行簽名。這個私鑰需要保密保存,不能公開校焦。
.x509.pem是證書文件拔第,相當于公鑰浙炼。這個可以公開菌仁,主要用于驗證某個apk是否由相應的私鑰簽名。
libconscrypt_openjdk_jni.so路徑
prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so