在调试应用程序时,Android SDK工具会自动对应用程序进行了签名。Eclipse的ADT插件和Ant编译工具都提供了两种签名模式——Debug模式和Release模式。 在开发和测试时,可以使用Debug模式。Debug模式下,编译工具使用内嵌在JDK中的Keytool工具来创建一个keystore和一个 key(包含公认的名字和密码)。在每次编译的时候,会使用这个Debug Key来为apk文件签名。由于密码是公认的所以每次编译的时候,并不需要提示你输入keystore和key密码。
当程序准备发布时,必须在Release模式下使用密钥来为apk文件签名。有以下两种方式可以做到:
这个方法中,首先需要编译出一个未签名的apk。然后使用Jarsigner(或类似的工具),用密钥为apk手动签名。如果没有合适的密钥,可以运行Keytool来手动生成自己的keystore/key。
如果使用Eclipse/ADT插件进行开发,可以使用导出向导来编译程序,生成密钥(如果需要),并为apk签名,所有这些操作都在导出向导中。一旦程序签名了,别忘了运行zipalign来为apk进行额外的优化。
应用程序签名的某些方面可能会影响应用程序的开发,特别是打算一起发布多个应用程序的时候。一般来说,推荐的策略是在整个应用程序寿命内,所有的程序都用相同的证书签名。主要出于以下几点考虑:
在设计应用程序时,一定要考虑以上这些,并使用一个合适的证书来为应用程序签名。
首先要保证Keytool
对SDK编译工具来说是可利用的。一般可以通过设置JAVA_HOME
环境变量来告诉SDK编译工具如何找到Keytool
。另 外还可以添加JDK中Keytool
的路径到PATH的变量里。 如果在Linux上开发,并且使用GNU编译器来编译Java,那么要确保系统是使用JDK中的Keytool
,而不是gcj
。如果Keytool
已经在PATH中,它有可能是对/usr/bin/keytool
的符号链接。这种情况下,要检查符号链接的目标,确保它是指向JDK中的Keytool
。
如果要发布应用程序,还需要Jarsigner
工具。Jarsigner
和Keytool
都包含在JDK中。
Android编译工具提供了Debug签名模式,使得开发和调试应用程序更加容易,而且还满足Android系统的签名要求。在使用Debug模式编译app时,SDK工具会调用Keytool
工具自动创建一个Debug的keystore
和key
。然后这个Debug key会自动用于apk的签名,这样就不需要手动为应用程序包签名了。
Keystore名字:“debug.keysotre”
Keystore密码:“android”
Key别名:“androiddebugkey”
Key密码:“android”
CN:“CN=Android Debug,O=Android,C=US”
如果需要可以改变Debug keystore/key的位置和名字,或者提供一个自定义的Debug keysotre/key(在Eclipse/ADT中,通过修改Windows>Preferences>Android>Build
配置实现)。但是任何自定义的Debug keystore/key必须使用和默认Debug key(上面描述的)相同的名字和密码。
** 注意:不能将签有Debug证书的应用程序发布给最终用户。
Eclipse用户:如果在Eclipse/ADT下开发(并且已经按照上面的描述配置了Keytool),Debug模式下签名默认是开启的。运行或是调试应用程序 时,ADT会使用Debug证书进行签名,并运行zipalign,然后安装到选择的模拟器或是已连接的设备。整个过程不需要人工干预。
Ant用户:如果使用Ant来编译apk文件,则需要在ant命令中添加debug选项来开启Debug签名模式(假设正在使用由android工具生成build.xml
文件)。运行ant debug编译程序时,编译脚本会生成一个keystore/key,并为apk进行签名。然后脚本会使用zipalign
工具对apk进行对齐处理。整 个过程不需要人工干预。
Debug模式下签名用的证书自从它创建之日起,1年后就会失效。当证书失效时,会得到一个编译错误,Ant上错误如下:
1 debug:
2
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
3 [exec] Debug Certificate expired on 8/4/08 3:43 PM
在Eclipse ADT中,Android控制台上也将会看到一个类似的错误。要解决这个问题,只需删掉debug.keystore
文件即可。该文件默认存储的位置在:
OS X和Linux:~/.android/
Windows XP:C:/Documents and Settings/.android/
Windows Vista:C:/Users/.android/
删除后,在下一次编译的时候,编译工具会重新生成一个新的keystore和Debug key。
应用程序准备发布给其它用户时,需要:
为了进行程序签名,必须有一个合适的密钥。这个密钥应有以下特征: