Android系统要求所有已安装的程序必须数字签名——没有适当数字签名系统不会安装或运行一个应用程序。这适用于任何地方运行的Android系统,不管是模拟器还是实际设备。基于这个原因,在你能在一个模拟器或者设备上运行或者调试应用程序前,必须为你的应用程序设置签名。
理解Android应用程序签名的要点是:
所有应用必须签名,不签名系统不会安装这个应用程序。
你可使用自签名证书来签名你的应用程序,而不需要证书管理机构。
系统仅在安装时验证签名证书的有效期。如果应用程序的签名证书在应用程序安装后有效,应用程序的功能正常使用。
你可使用标准工具——Keytool和Jarsigner——产生钥匙并签名你的应用程序的.apk文件。
当调试时,AndroidSDK工具辅助你签名你的应用程序。Eclipse的ADT插件和Ant编译工具提供两种签名模式:调试牧师和发布模式。
调试模式:编译使用Keytool工具(这个工具包含在JDK中)以创建一个keystore和带有一个明确别名和密码的key。每次编译,这个工具使用调试key来签名应用程序的.apk文件。因为密码已知,这个工具不必每次编译时提醒你keystore/key的密码。
发布模式:当你的应用程序准备发布时,你在发布签名模式编译你的应用程序。在发布模式,这个工具编译你的.apk而不签名。你必须使用Keytool产生你自己的keystore/key,然后使用Jarsigner工具(也包含在JDK中)来签名.apk文件。
签名的基本设置
为了支持keystore和调试key的产生,你应该首先保证Keytool能在你的SDK中获取。通常情况下,只要你保证你的JAVA_HOME环境变量被设置,并且指向合适的JDK,你就能告诉SDK编译工具怎么找到Keytool。还有一种办法,你可将Keytool的JDK版本加入你的PATH变量中。
如果你在提供Gnu编译器的某个Linux版本上开发,你必须指定系统使用Keytool的JDK版本,而不是GCJ版本。若Keytool已经存在于你的PATH,他可以指向/usr/bin/keytool的链接。这种情况下,检查链接目标保证指向JDK的Keytool。
在Eclipse/ADT中签名
如果你在Eclipse中开发,并且已经按照上述步骤设置Keytool,那么签名默认采用调试模式。当你运行和调试你的应用程序时,ADT签名.apk文件,并在模拟中中安装。不需要你做指定操作,因为ADT已经成功访问了Keytool。
为了在发布模式中编译你的应用程序,右击Package面板的项目,然后选择Android Tools>Export Application Package菜单,另外一种方法:你能Manifest编辑器总页面"Android Manifest Overview"里面执行"Exporting the unsigned .apk"超级链接。在你保存了输出文件.apk后,你需要在发布前携带你自己的key使用Jarsigner来签名.apk。如果你没有一个key,你可以使用Kestroe携带合适参数来创建keystore和key。如果你已经有一个Key,比如一个公司的Key,你能使用它来签名.apk文件。
在Ant中签名
如果你使用Ant生成你的.apk文件,debug签名模式默认开启,前提是你通过包含在最新SDK中的活动创建(activitycreator)工具产生的build.xml文件。当你运行Ant使用bulid.xml来编译你的应用程序,这个生成脚本产生一个keystore/key并签名.apk文件。你自己不需要做什么特定操作。
为了在发布模式下编译你的应用程序,你需要做的所有事情是使用Ant命令指定一个生成目标“release”。例如,如果你从包含build.xml文件的目录中运行Ant,Ant命令看起来是这样:
ant release
这个生成描述脚本编译应用程序为.apk,而没有签名。当编译.apk后你需要在发布前携带你自己的key使用Jarsigner来签名.apk。如果你没有一个key,你可以使用Kestroe携带合适参数来创建keystore和key。如果你已经有一个Key,比如一个公司的Key,你能使用它来签名.apk文件。
Debug认证过期
自签名认证使用DEBUG模式下签名你的医用程序,自签名认证从创建时间开始1年后过期。
当认证过期时,你将会得到一个创建错误。在Ant中编译,错误看起来这样:
debug:
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
[exec] Debug Certificate expired on 8/4/08 3:43 PM
在Eclipse/ADT中,你在Android控制台会看到一个类似的错误。
为了纠正这个问题,简单删除debug.keystore 文件即可。在Linux/Mac OSX操作系统中,这个文件存储在 ~/.android目录中,而在win XP操作系统,这个文件保存在C:\Documents and Settings\
下次你生成时,生成工具将会重新产生新的keystore和调试key.
注意,如果你的开发机器正在使用非阳历地区,生成工具可能错误地产生一个已经过期的调试认证,为此,当你试图编译你的应用程序时你会得到一个错误。欲知进一步的信息,请阅读问题主题文章“I can't compile my app because the build tools generated an expired debug certificate”。
没有评论:
发表评论