Android签名 (二) 制作签名文件
你可能想知道?通過這篇博客可以解決哪些問題以及學到什么:
? 1.公司開發一個新的app,如何創建一個應用簽名?
? 2.為了安全性,Android系統不想使用Google給的原生簽名,如何定制系統簽名?
這篇博客介紹了如何制作簽名文件,首先介紹Android開發中使用到的簽名文件類型,然后介紹系統簽名如何制作,最后介紹不同IDE用到的簽名文件如何制作。
目錄
一、Android的簽名文件有三種類型,分別在以下情況使用
1.? jks: 用于Android Studio編譯
2.? keystore: 用于Eclipse編譯
3.? pk8/x509.pem? ?: 用于Android系統的編譯
二、制作pk8/x509.pem格式系統簽名文件
1.準備環境
2.制作過程
3.使用自定義簽名
4.檢查自定義簽名?
三、制作jks格式的簽名文件
四、制作keystore格式的簽名文件
一、Android的簽名文件有三種類型,分別在以下情況使用
1.? jks: 用于Android Studio編譯
全稱為Java key store,jks也是Android Studio中創建簽名文件的格式
2.? keystore: 用于Eclipse編譯
最早開發Android的時候的簽名文件,目前開發Android都使用AS,而AS也兼容keystore.
3.? pk8/x509.pem? ?: 用于Android系統的編譯
這個是系統的簽名文件,同樣也可以給APK簽名
二、制作pk8/x509.pem格式系統簽名文件
1.準備環境
需要在linux系統中,且有編譯Android源碼的環境
2.制作過程
1)生成簽名文件
要對Android系統進行簽名,需要生成四種類型的key文件:
- a) releasekey
- b) media
- c) shared
- d) platform
我們就拿releasekey 為例簡單介紹下生成過程
使用Android源碼中自帶的make_key工具來生成簽名,路徑為development/tools/make_key?
在Android系統源碼根目錄下,新建make_key_security目錄,進入到該目錄,執行下面的命令
../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'執行命令時都會提示輸入密碼,這時不要輸入密碼,直接按Enter健;你想想如果在編譯Android系統過程中要你不斷輸入密碼進行確認,你是不是會瘋掉!!!如下就會在make_key_security目錄中生成密鑰對 releasekey.pk8 (私鑰) / releasekey.x509.pem (公鑰)
Jack:~/aosp/make_key_security$ ../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com' Enter password for 'releasekey' (blank for none; password will be visible): creating releasekey.pk8 with no password Generating RSA private key, 2048 bit long modulus (2 primes) ....................................................................................................+++++ ....+++++ e is 65537 (0x010001) Can't load /home/ecarx/.rnd into RNG 139895179936192:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ecarx/.rndJack:~/aosp/make_key_security$ ls releasekey.pk8 releasekey.x509.pem同樣步驟將命令中的releasekey換成?media/shared/platform,然后執行,生成的所有秘鑰對如下:
Jack:~/aosp/make_key_security$ ls -l 總用量 40 -rw------- 1 ecarx ecarx 1217 8月 14 23:45 media.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:45 media.x509.pem -rw------- 1 ecarx ecarx 1218 8月 14 23:44 platform.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:44 platform.x509.pem -rw------- 1 ecarx ecarx 1218 8月 14 23:30 releasekey.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:30 releasekey.x509.pem -rw------- 1 ecarx ecarx 1217 8月 14 23:45 shared.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:45 shared.x509.pem2)介紹一下make_key的參數???
../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
這里要順便介紹下make_key的參數。第一個參數是要生成key的名字,第二個參數是關于你公司的信息。key的名字很好理解,就是前面提到的4中類型的key,公司信息的參數比較多,它們的含義如下:
| Key | Description | Example |
| C | What is the two-letter country code for this unit? | US |
| ST | What is the name of your State or Province? | California |
| L | What is the name of your City or Locality? | Mountain View |
| O | What is the name of your organization? | Android |
| OU | What is the name of your organizational unit? | Android |
| CN | What is your first and last name? | Android |
| emailAddress | What is the email address? | android@android.com |
3.使用自定義簽名
1) 修改 /build/core/config.mk 中定義變量:
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey ?
2) 修改 /build/core/Makefile 中定義變量:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif
4.檢查自定義簽名?
查看簽名文件信息:?
Jackchen:~/aosp/make_key_security$ keytool -printcert -file releasekey.x509.pem? 所有者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US 發布者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US 序列號: 2c5386028cf9208120dcb735e63e6ce31e57faf7 生效時間: Sat Aug 14 23:30:08 CST 2021, 失效時間: Wed Dec 30 23:30:08 CST 2048 證書指紋:SHA1: 6A:72:69:63:9D:07:13:09:35:9C:22:31:6C:A1:C8:74:CF:FE:F1:8BSHA256: 45:AF:80:A8:10:AD:80:C2:71:C9:97:8A:D6:CC:FA:D0:AB:69:BA:B3:CE:80:94:D5:D0:70:63:E8:71:B0:06:CE 簽名算法名稱: SHA256withRSA 主體公共密鑰算法: 2048 位 RSA 密鑰 版本: 3build.prop中可以查看到變量:
ro.build.tags=release-keys三、制作jks格式的簽名文件
1.用Android Studio生成簽名文件
這個網上教材很多,我引用了兩位博主的文章
在Android Studio創建keystore簽名文件_TinkTan的博客-CSDN博客_android studio 創建keystore
Android Studio生成keystore簽名文件_安妍妍的博客-CSDN博客_android studio 生成簽名文件
之前我會一直困惑為什么創建jks簽名文件時要輸入兩套秘密(不是確認秘密哦),后來經過查閱資料和實操驗證終于弄懂了,這里和大家分享以下:
你可以將jks理解為一個倉庫,一個密鑰倉庫,其實keystore這個名字就很直觀,訪問這個倉庫需要一個秘密; 這個倉庫里面可以存放很多很多key,所以每一個key都需要有一個自己的名字alias,訪問每個key都需要密碼aliaspasswd,下面通過示意圖說明:
?2.從系統簽名文件轉化而來
1)獲取android平臺key
? ?取源碼目錄build\target\product\security下platform.pk8 platform.x509.pem放到一個目錄中?
2)生成platform.pem?
? ?openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
3)生成pkcs12
? ?openssl pkcs12 -export -in ?platform.x509.pem -inkey platform.pem -out platform.p12 ?-password pass:<key_pwd> -name <key_alias>
<key_pwd>??簽名key的密碼,下一步需要用到(對應pkcs12的密碼)
<key_alias> 簽名key的別名,下一步需要用到
4)生成debug.jks
? ?keytool -importkeystore -deststorepass <store_pwd>?-destkeystore <store_name> -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass <key_pwd>?-alias <key_alias>
<store_pwd>?????????簽名文件(jks/keystore)的密碼;
<store_name>? ? ? 簽名文件(jks/keystore)名稱;
<key_pwd>????????????簽名key的密碼;
<key_alias>???????????簽名key的別名;
以上步驟就生成了platform.jks就直接可以用于Android Studio簽名了,用到的命令如下:
另外還將以上這些命令寫成了一個腳本,只要將platform.pk8 platform.x509.pem放到對應目錄下,然后運行腳本,輸入對應參數即可,下載連接
四、制作keystore格式的簽名文件
1.從系統簽名文件轉化而來
? ? 和制作jks的步驟相同
如果要查看生成的簽名文件里面的簽名信息,可以參考我的另外一篇博客
Android簽名 (一) 查看簽名信息
總結
以上是生活随笔為你收集整理的Android签名 (二) 制作签名文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GreenSock2
- 下一篇: 通过Keytool 生成 Android