
本文的合集已經(jīng)編著成書,高級Android開發(fā)強化實戰(zhàn),歡迎各位讀友的建議和指導(dǎo)。在京東即可購買:https://item.jd.com/12385680.html

Android應(yīng)用在使用第三方的庫時, 可能需要申請密鑰, 表明應(yīng)用身份, 如高德定位SDK等. 應(yīng)用簽名(printcert)是公開的, 只要下載到Apk包, 就可以公開提取. 簽名中包含MD5, SHA1, SHA256. 應(yīng)用唯一性就是表現(xiàn)為簽名+包名, 就像人的指紋一樣重要, 是確定應(yīng)用屬性的重要信息, 也是應(yīng)用商店檢測盜版應(yīng)用的途徑.
本文講解如何提取應(yīng)用的簽名和包名.
1. 簽名
獲取簽名包含兩種方式:
(1) Keystore
系統(tǒng)默認簽名: 存放位置: ~/.android/debug.keystore.
日常測試應(yīng)用的簽名, 均來自于此, 提取密鑰.
keytool -list -v -keystore debug.keystore
輸入默認密鑰庫口令: android
即可顯示
證書指紋:
MD5: 97:0B:1C:...
SHA1: 47:DF:70:...
SHA256: 83:F9:04:...
簽名算法名稱: SHA256withRSA
版本: 3
自定義簽名: 進入到存放keystore的文件夾,使用命令:
keytool -list -v -keystore [xxx] -keypass [xxx]
顯示默認簽名類似的效果.
(2) RSA
已經(jīng)編譯成Apk的包, 我們無法獲取Keystore, 但是可以在RSA中獲取簽名.
修改Apk包的后綴名, 從".apk"變?yōu)?.zip", 解壓縮.
進入META-INF文件夾, 即cd META-INF.
使用命令
keytool -printcert -file CERT.RSA
即可, 顯示Apk的簽名.
獲取MD5, SHA1, SHA256.
2. 包名
查看包名就一行命令, 顯示Apk的信息.
aapt dump badging [xxx.apk]
輸出, package: name, 即包名.
package: name='xxx.xxx.xxxxx'
...
注: 也可以修改本地包名, 匹配已經(jīng)存在的密匙.
修改應(yīng)用包名的方法, 在build.gradle中, 添加applicationId, 即
android {
defaultConfig {
applicationId "com.amap.location.demo"
...
}
}
修改包名為com.amap.location.demo.
未添加gradle的參數(shù), 默認位置是AndroidManifest.xml,
其中manifest的package屬性, 表示包名, 即
<manifest package="wangchenlong.chunyu.me.wcl_amap_demo">
build.gradle的包名屬性優(yōu)先級高于manifest, 其他屬性也是一樣.
在第三方庫的開發(fā)者平臺輸入簽名和包名, 就可以生成唯一密鑰, 放到程序中, 就可以使用庫了.
簽名+包名, 表明Apk的唯一身份, 防止盜版仿冒的Apk出現(xiàn), 是Android的安全機制.
PS: 公司經(jīng)常使用第三方庫, 需要申請唯一的賬號, 統(tǒng)一管理; 作為開發(fā)者, 在測試時, 也需要申請一些測試Key, 加快開發(fā)速度.
OK, that's all! Enjoy it.