这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
不止一次有用到Android签名相关的知识,每次都几乎从零开始在Google上搜索找,不想在继续这样了,找了个时间好好整理了一下自己用到的一些碎片知识,于是乎放到这里,一是备忘,二是帮助别人
一、为什么要签名
开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。
APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。
这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。
二、签名的注意事项
Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序。不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。
Android签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。
系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。
可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。
签名后需使用zipalign优化程序。
模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。
正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
不止一次有用到Android签名相关的知识,每次都几乎从零开始在Google上搜索找,不想在继续这样了,找了个时间好好整理了一下自己用到的一些碎片知识,于是乎放到这里,一是备忘,二是帮助别人。
从APK文件中获取签名信息
使用方法
keytool -list -printcert -jarfile your_apk_file
输出信息
签名Owner,Issuer等信息
签名的fingerprints,如md5及sha1等值
签名有效期等信息
示例效果
16:29 $ keytool -list -printcert -jarfile akoi_1.2.apk
Signer #1:
Signature:
- Owner: CN = Andrew Wallace,
- OU = droidyue.com,
- O = droidyue.com,
- L = Beijing,
- ST = Beijing,
- C = 86 Issuer: CN = Andrew Wallace,
- OU = droidyue.com,
- O = droidyue.com,
- L = Beijing,
- ST = Beijing,
- C = 86 Serial number: 11a8a4a3 Valid from: Tue Feb 10 18 : 07 : 43 CST 2015 until: Sun Jun 13 18 : 07 : 43 CST 3013 Certificate fingerprints: MD5: 46 : C5: BE: EF: B5: C9: 00 : E1: FA: 42 : 50 : 50 : 57 : 54 : CA: 15 SHA1: C1: 14 : 5D: 0A: C2: BF: F6: 06 : 43 : 20 : AE: 2C: 07 : 12 : 97 : 58 : C2: 1B: 39 : D1 SHA256: 0E: 88 : 7D: C2: 4C: D6: 84 : A7: 58 : D4: 24 : 1E: 9D: 38 : F9: 05 : 98 : 1E: B2: A2: D7: CB: 0F: 81 : 74 : 60 : 5B: 38 : 89 : FF: 21 : 1C Signature algorithm name: SHA256withRSA Version: 3
从签名文件中获取签名信息
使用方法
keytool -list -v -keystore your_kestore_file
注意,上述命令执行后,会提示输入密码,其实输入错误也没有关系,不影响结果。
输出信息
签名Owner,Issuer等信息
签名的fingerprints,如md5及sha1等值
签名有效期等信息
示例效果
- Keystore type: JKS
- Keystore provider: SUN
- Your keystore contains 1 entry
- Alias name: droidyue.com
- Creation date: Feb 10, 2015
- Entry type: PrivateKeyEntry
- Certificate chain length: 1
- Certificate[1]:
- Owner: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86
- Issuer: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86
- Serial number: 11a8a4a3
- Valid from: Tue Feb 10 18:07:43 CST 2015 until: Sun Jun 13 18:07:43 CST 3013
- Certificate fingerprints:
- MD5: 46:C5:BE:EF:B5:C9:00:E1:FA:42:50:50:57:54:CA:15
- SHA1: C1:14:5D:0A:C2:BF:F6:06:43:20:AE:2C:07:12:97:58:C2:1B:39:D1
- SHA256: 0E:88:7D:C2:4C:D6:84:A7:58:D4:24:1E:9D:38:F9:05:98:1E:B2:A2:D7:CB:0F:81:74:60:5B:38:89:FF:21:1C
- Signature algorithm name: SHA256withRSA
- Version: 3
重新签名APK
在没有源码情况下,我们就能对apk进行更换签名。
脚本
signapk.sh
备用地址
使用方法
bash signapk.sh your_apk_file your_keystore_file keystore_pass keystore_alias
示例效果
- 16:57 $ bash signapk.sh weixin6313android740.apk ~/Documents/baidu_disk/百度云同步盘/droidapp/mykiki 123456 droidyue.com
- param1 weixin6313android740.apk
- param2 /Users/androidyue/Documents/droidapp/mykiki
- param3 123456
- param4 droidyue.com
- deleting: META-INF/MANIFEST.MF
- deleting: META-INF/DROIDYUE.SF
- deleting: META-INF/DROIDYUE.RSA
- adding: META-INF/MANIFEST.MF
- adding: META-INF/DROIDYUE.SF
- adding: META-INF/DROIDYUE.RSA
- ......
- Verification succesful
生成的文件会放在当前目录,其文件名相对输入文件,增加了signed_前缀,比如对weixin6313android740.apk进行上述操作得到的输出文件是signed_weixin6313android740.apk
Gradle build生成签名APK
想要在执行gradle build时生成指定签名的apk,需要在build.gradle中如下修改
- android {
- signingConfigs {
- release {
- storeFile file("myrelease.keystore")
- storePassword "********"
- keyAlias "******"
- keyPassword "******"
- }
- }
- buildTypes {
- release {
- signingConfig signingConfigs.release
- }
- }
- }
来源: http://www.phperz.com/article/17/0914/348794.html