您的位置:首页 > 移动开发 > Android开发

Android应用签名

2011-06-07 17:15 267 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: