生成簽名文件和簽名應(yīng)用(超級(jí)詳細(xì)版)

1.簽名文件簡(jiǎn)介

簽名文件說(shuō)明出處,標(biāo)準(zhǔn)的測(cè)試秘鑰包含四個(gè)部分:testkey、platform、shared和media。

The following standard test keys are currently included:

testkey -- a generic key for packages that do not otherwise specify a key.
platform -- a test key for packages that are part of the core platform.
shared -- a test key for things that are shared in the home/contacts process.
media -- a test key for packages that are part of the media/download system.

  • testkey是沒(méi)有指定特定秘鑰的通用秘鑰,可以用于開(kāi)發(fā)階段的普通apk簽名(沒(méi)有簽名系統(tǒng)可能會(huì)在安裝的時(shí)候就報(bào)錯(cuò),不讓安裝)
  • platform主要用于平臺(tái)app做簽名,例如某個(gè)平臺(tái)app需要訪問(wèn)到@SystemApi或者@hide注解的方法,就需要使用platform文件來(lái)簽名應(yīng)用。
  • shared 用于一些要共享數(shù)據(jù)應(yīng)用數(shù)據(jù)的應(yīng)用簽名
  • media 用于媒體和系統(tǒng)下載應(yīng)用簽名

2.簽名文件的生成

2.1命令行生成方式

  • 生成秘鑰對(duì):openssl genrsa -3 -out testkey.pem 2048

  • 生成pem格式的證書(shū):openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

  • 生成私鑰文件:openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt

2.2腳本生成證書(shū)方式

在源碼development/tools/目錄中,有一個(gè)make_key腳本,可以使用這個(gè)腳本來(lái)生成證書(shū)

Step 1:cd到development/tools/目錄

Step 2:運(yùn)行make_key腳本: sudo ./make_key platform '/C=CN/ST=YourProvince/L=YourLocation/O=YourOrganization/OU=YourOrganizationalUnit/CN=YourName'

說(shuō)明:testkey是生成的文件名,后面是證書(shū)里面的內(nèi)容

參數(shù) 說(shuō)明
/C 國(guó)家代號(hào)
/ST 省份代號(hào)
/L 位置代號(hào)
/O 組織代號(hào)
/OU 單位代號(hào)
/CN 名稱(chēng)

Step 3:輸入自定義密碼

此時(shí)就會(huì)生成:platform.x509.pem和platform.pk8

此時(shí)就可以使用out/host/linux-x86/framework/目錄下的signapk.jar包來(lái)對(duì)apk進(jìn)行簽名了

2.3 生成signapk.jar

  • 在源碼根目錄使用source build/envsetup.sh創(chuàng)建指令環(huán)境
  • 進(jìn)入/build/tools/signapk/目錄
  • 執(zhí)行指令:mm
  • 在out/host/linux-x86/framework/目錄找到signapk.jar

3.對(duì)apk進(jìn)行簽名

3.1 使用指令簽名

如果使用原生的證書(shū),目錄在/build/target/product/security/中可以找到platform.pk8 platform.x509.pem文件,如果有我們上面生成的也可以。

將要打包的apk、證書(shū)和signapk.jar放到一個(gè)目錄。

java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk

3.2 使用Android Studio簽名

要使用Android Studio對(duì)應(yīng)用自動(dòng)簽名,需要生成.jks的證書(shū),該二進(jìn)制格式的證書(shū),同時(shí)包含證書(shū)和私鑰,一般有密碼保護(hù)。

如果是沒(méi)有密碼的pem格式的證書(shū)生成.jks文件方式如下:

  • 生成platform.pem文件
    openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
  • 生成platform.p12文件,設(shè)置別名和密碼,即AS打包APK時(shí)輸入的別名和密碼
    openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name key
  • 生成platform.jks(鑰匙文件) (-srcstorepass android)是.jks文件的密碼
    keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

有密碼的pem格式的證書(shū)生成.jks文件的方式:

假如密碼是:c6a04bdc7236f5d18c75840f50dee482b36ad4cc

  • 生成platform.pem文件

    openssl pkcs8 -inform DER -passin pass:c6a04bdc7236f5d18c75840f50dee482b36ad4cc -in platform.pk8 -out platform.pem

  • 生成platform.p12文件,設(shè)置別名和密碼,即AS打包APK時(shí)輸入的別名和密碼

    openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name key

  • 生成platform.jks(鑰匙文件) (-srcstorepass android)是.jks文件的密碼

    keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

生成.jks文件之后,導(dǎo)入as中,編譯工程的時(shí)候,選擇Generate Signed Bundle or APK按照上面生成輸入的昵稱(chēng)和密碼一直下一步就可以完成工程簽名了。

4.驗(yàn)證是否簽名成功

  • 將apk直接用zip等解壓工具直接解壓到本地目錄
  • 進(jìn)入到META-INF目錄找到:CERT.RSA文件
  • META-INF目錄打開(kāi)控制臺(tái)輸入:keytool -printcert -file CERT.RSA 即可看到簽名文件的輸出
簽名文件內(nèi)容.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容