Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签 名,系统将不许安装运行此程序。不管是模拟器还是真实设备,只要是Android系统,这都适用。鉴于此原因,在设备或者是模拟器上运行调试程序之前,你 必须为你的应用程序设置数字签名。
理解Android程序签名的重要几点::
· 所有的程序都必须签名,没有被签名的程序,系统将不能安装。
· 你可使用自签署证书签署你的应用程序,就无须授权凭证。
· 系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。
· 你可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。
Android SDK 工具可以帮助你在调试时给应用程序签名。ADT插件和Ant编译工具都提供了两种签名模式-debug模式和release模式
· debug模式下,编译工具使用JDK中的通用程序Keytool通过已知方法和密码创建秘锁和密钥。每次编译的时候,工具使用debug密钥签名应用程 序的.apk文件。因为密码是已知的,工具不需要在每次编译的时候提示你输入密锁和密钥。
· 当你的应用程序已经准备release了,你可以在release 模式下编译。release模式下,工具编译时不会将.apk文件签名。你需要用Keytool生成密钥和密锁,再用JDK中的Jarsigner工具 给.apk文件签名。
签名基本设置
为了支持生成密锁和密钥,你首先要确定Keytool在SDK编译工具中是有效的。在很多情况下,你可以设置JAVA_HOME环境变量,告诉 SDK如何找到Keytool,或者你可以在PATH变量中添加Keytool的JDK版本。
如果你是在linux版本中开发,原本是来自Java GNU编译器,请确定系统用的是Keytool版本的JDK,而不是gcj版本的。如果Keytool已经在PATH中,它将指向符号连接/usr /bin/keytool。这种情况下,核实符号连接的目标是指向JDK下的Keytool
Eclipse/ADT中的签名
如果你是在Eclipse下开发,并已经按照上面所介绍的安装了Keytool,默认情况下是可以在debug模式下签名的。当你运行调试程序的时 候ADK将给.apk文件签名,并安装到模拟器上。这部分不需要特殊的动作,ADT已经进入Keytool
在release模式下编译程序,在Package面版上按project右键,选择Android Tools>Export Application Package.或者你可以点击Manifest Editor, overview 页面上的“Exporting the unsigned .apk”连接 ,导出未签名apk文件。保存.apk文件之后,用Jarsigner及你自己的密钥给apk文件签名 ,如果没有密钥, 你可以用Keystore创建密钥和密锁。如果已经有一个密钥了,如公共密钥,就可以给.apk文件签名了。
Ant签名
如果用Ant编译.apk文件,假设你使用最新版的SDK中包含的activitycreator工具生成build.xml文件,默认情况下可以 使用debug签名模式。当你运行Ant对build.xml编译程序,build脚本将生成密锁和密钥并签名.apk文件。这部分不需要做其它特殊的动 作。
release模式下编译程序,你需要做的是在Ant命令中指定编译目标“release”。例如,如果是在bulid.xml所在目录下运行 ant,输入以下命令:
ant release
build脚本编译程序时并没有签名。编译完.apk文件后,你需要用Jarsigner和你自己的密钥给.apk文件签名。如果没有密钥, 你可以用Keystore创建密钥和密锁。如果已经有一个密钥了,如公共密钥,你就可以给.apk文件签名了。
调试证书期限
自签名证书用于程序的debug模式下(默认情况下是Eclipse/ADT 和Ant builds),自它创建时间起有一年的期限。
当证书到期时,将会有编译错误。 And下错误显示如下:
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下,你可以看到类似的错误。
解决这个问题的简单方法是删除debug.keystore文件。Linux/Mac OSX下这个文件保存在~/.android下,windows XP下,文件保存在 C:/Documents and Settings/<user>/Local Settings/Application Data/Android。windows Vista下文件保存在 C:/Users/<user>/AppData/Local/Android。
下次编译时,编译工具将生成新的密锁和密钥。
注意:如果你的开发设备使用的是non-Gregorian locale,编译工具经常错误的生成一个过期的调试证书,因此编译的时候你会得到错误提示。 对于解决信息,请参见疑难解答专题 I can't compile my app because the build tools generated an expired debug certificate.
使用ApiDemo示例应用程序
Android SDK包含了一套示例程序,他们验证了许多功能以及API的用法。ApiDemos软件包被提前安装在模拟器中,所以你可以启动模拟器,在主画面的应用程 序抽屉里打开它。
你也可以在<SDK>/samples/ApiDemos中找到源码,可用看看它,学习Demo的实现方法。
如果你愿意,你还可以将ApiDemo的示例程序作为一个工程加载进来,修改并在模拟器上运行。然而,在这之前你首先要卸载之前已经安装的 ApiDemos。如果你没有移除之前安装的版本而直接在开发环境中运行或修改ApiDemos,将会有安装错误。
关于如何卸载和重装ApiDemo,可以参考I can't install ApiDemos apps in my IDE because of a signing error.这样你就可以在你的开发环境中工作了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cuijpus/archive/2009/07/01/4313745.aspx