歡迎Follow我的GitHub, 關(guān)注我的簡(jiǎn)書(shū). 其余參考Android目錄.
本文的合集已經(jīng)編著成書(shū)雌续,高級(jí)Android開(kāi)發(fā)強(qiáng)化實(shí)戰(zhàn),歡迎各位讀友的建議和指導(dǎo)半抱。在京東即可購(gòu)買(mǎi):https://item.jd.com/12385680.html
Android應(yīng)用在使用第三方的庫(kù)時(shí), 可能需要申請(qǐng)密鑰, 表明應(yīng)用身份, 如高德定位SDK等. 應(yīng)用簽名(printcert)是公開(kāi)的, 只要下載到Apk包, 就可以公開(kāi)提取. 簽名中包含MD5, SHA1, SHA256. 應(yīng)用唯一性就是表現(xiàn)為簽名+包名, 就像人的指紋一樣重要, 是確定應(yīng)用屬性的重要信息, 也是應(yīng)用商店檢測(cè)盜版應(yīng)用的途徑.
本文講解如何提取應(yīng)用的簽名和包名.
1. 簽名
獲取簽名包含兩種方式:
(1) Keystore
系統(tǒng)默認(rèn)簽名: 存放位置: ~/.android/debug.keystore
.
日常測(cè)試應(yīng)用的簽名, 均來(lái)自于此, 提取密鑰.
keytool -list -v -keystore debug.keystore
輸入默認(rèn)密鑰庫(kù)口令: android
即可顯示
證書(shū)指紋:
MD5: 97:0B:1C:...
SHA1: 47:DF:70:...
SHA256: 83:F9:04:...
簽名算法名稱(chēng): SHA256withRSA
版本: 3
自定義簽名: 進(jìn)入到存放keystore的文件夾脓恕,使用命令:
keytool -list -v -keystore [xxx] -keypass [xxx]
顯示默認(rèn)簽名類(lèi)似的效果.
(2) RSA
已經(jīng)編譯成Apk的包, 我們無(wú)法獲取Keystore, 但是可以在RSA中獲取簽名.
修改Apk包的后綴名, 從".apk"變?yōu)?.zip", 解壓縮.
進(jìn)入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ù), 默認(rèn)位置是AndroidManifest.xml,
其中manifest的package屬性, 表示包名, 即
<manifest package="wangchenlong.chunyu.me.wcl_amap_demo">
build.gradle的包名屬性優(yōu)先級(jí)高于manifest, 其他屬性也是一樣.
在第三方庫(kù)的開(kāi)發(fā)者平臺(tái)輸入簽名和包名, 就可以生成唯一密鑰, 放到程序中, 就可以使用庫(kù)了.
簽名+包名, 表明Apk的唯一身份, 防止盜版仿冒的Apk出現(xiàn), 是Android的安全機(jī)制.
PS: 公司經(jīng)常使用第三方庫(kù), 需要申請(qǐng)唯一的賬號(hào), 統(tǒng)一管理; 作為開(kāi)發(fā)者, 在測(cè)試時(shí), 也需要申請(qǐng)一些測(cè)試Key, 加快開(kāi)發(fā)速度.
OK, that's all! Enjoy it.