上一次写了一篇关于android应用程序打包成apk文件的签名,地址:http://blog.csdn.net/zqiang_55/article/details/6939170
最近再看sdk的时候发现其实在sdk中又了详细的少说明,现在将主要的翻译如下:
在Dev Gudie标签页中的Publishing模块
一给应用程序签名
概要:
Android系统要求所有安装的应用程序都必须要有数字签名证书,数字签名证书的私钥由应用程序开发者持有。Android系统通过数字签名来确认应用程序的开发者和在应用程序直接建立关联(程序升级时使用)。
以下几点对于理解android应用程序签名非常重要
1. 所有的应用程序必须签名。Android系统不会安装没有签名的应用程序
2. 可以使用自己的签名证书给应用程序签名。不必非得使用官方证书
3. 当你发布应用程序给最终用户的时候,必须使用合法的私钥。你不能使用sdk tools里的debug key来给发布的应用程序签名
4. Android检查签名证书的有效日期只根据应用程序的安装时间。如果程序安装之后签名证书过期,那么应用程序也能正常运行。
5. 你可以使用标准工具—Keytool和Jarsigner—来生成私钥并给.apk文件签名
6. 一旦你给程序签名以后,使用zipalign工具优化最终的apk包
Android系统不会安装或者运行没有经过正确签名的应用程序。这一规律适用于真实设备或者模拟器。因此在设备或者模拟器运行或调试程序时,必须安装签名。
在调试的时候,androidsdk工具帮助你在应用程序上签名。Eclips的ADT插件和Ant编译工具提供了两种签名模式——debug模式和release模式
1. 在开发和测试的时候,可以在debug模式下编译。在debug模式下,编译工具在JDK环境下使用keytool功能通过已知的别名(alias)和密码来产生keystore和key。在每一次编译时,使用debug key来给应用程序签名。因为密码是已知的,在每次编译的时候,都不会有提示
2. 当应用程序准备发布时,必须在release模式下编译,使用私钥签名。有两种方法可寻:
1. 在命令模式下(cmd)使用Keytool和Jarsigner。在这一步,先编译无签名的应用程序。用私钥和Jarsigner给.apk文件手动的签名。如果你没有合适的私钥,可以运行Keytool产生自己的keystore/key。
2. 使用ADT导出向导。在Eclips使用ADT插件开发,可以使用导出向导来编译程序生成私钥,然后给.apk文件签名。在所有的单进程程序镇南关都可以使用导出向导
程序签名后不要忘记使用zipalign给程序做优化。
二.签名策略
程序签名可能会影响程序开发的步骤,特别是要发布多个版本。
一般推荐开发者在整个开发周期用相同的证书给应用程序签名。下面是几个原因
1. 程序升级—如果想给用户无缝隙的升级应用程序,那么你就给升级的应用程序用和原来的程序用相同的证书签名。在安装升级后的应用程序,系统会比较新版本的证书和已存在版本的证书。如果完全匹配,包括比较证书数据和命令,系统会允许升级程序安装。如果不匹配,需要重新签名。在不匹配的情况下,安装的升级程序会是一个完成的心程序,并不会将原来的覆盖掉。
2. 程序的模块性—Android系统允许相同证书签名的应用程序运行在同一个进程中,如果程序运行在同一个进程中,系统会认为这是同一个程序。这样你可以以模块的方式来部署应用程序,用户可以只升级相应的模块。
3. 代码/数据通过权限分享—系统提供了基于强制权限签名策略,因此一个程序可以向另外的一个签名的程序暴露自己的功能。
在决定签名策略的时候另外一个需要重要考虑的是签名证书的有效期.
1. 如果对应用程序支持升级,确保key的有效期超过程序的生命周期。推荐有效期为25年或者更多。当key的有效期终止的时候,用户将不能完美的升级程序。
2. 如果用相同的key在多个有明显区别的程序间签名,要确保key的有效期要比所有的应用程序生命周期都要长,也包括将来加入到应用程序的程序。
3. 如果在Android Market发布程序,那么key的有效期的截止日期为2033-10-22。Martet的服务器强制执行这一要求,以保证用户能平稳升级。
在Debug模式下签名
Android编译工具提供了一个debug签名模式使开发和调试程序更简单,同时也是为了满足android要求数字签名。在使用debug模式编译app时,sdk工具自动的调用Keytool生成debug keystore和key。Debug key会自动调用给.apk文件签名,因此没必要在调试的时候用自己的私钥给程序签名。
Sdk tools生成debug keystore/key需要姓名和密码:
· Keystorename: "debug.keystore"
· Keystorepassword: "android"
· Key alias:"androiddebugkey"
· Keypassword: "android"
CN: "CN=Android Debug,O=Android,C=US
太多了,不想翻译了!!累死了!后面大部分是一些命令了,自己看看吧