Android 程序签名与安装

来源:互联网 发布:戴尔网络唤醒bios设置 编辑:程序博客网 时间:2024/05/29 04:22

Android系统要求,所有的程序经过数字签名后才能安装。Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系。证书不是用于用户控制哪些程序可以安装。证书不需要授权中心来签名:Android应用程序上使用自己签名的证书是完全允许且普遍的。理解Android应用程序签名有以下几个重要点:· 所有的应用程序都必须签名。系统不会安装任何一个不签名的程序。· 你可以使用自己的证书来签名。不需要任何授权中心。· 当你要为最终用户发布你的应用程序的时候,你必须签入一个合适的密钥。你不可以发布程序的时候还使用SDK工具签入的Debug Key。· 系统只在安装应用程序的时候检测证书的有效期。如果应用程序在安装之后证书失效了,那么,应用程序还是可以正常工作。· 你可以使用标准工具——Keytool和Jarsigner——生成Key并签名apk文件。· 一旦你为应用程序签名了,一定要使用zipalign工具来优化最终的APK包。Android系统不会安装和运行没有正确签名的应用程序。这条规则适用于任何运行Android系统的地方,不管是真机还是模拟器。正是由于这个原因,你必须在模拟器或真机上运行/调试程序之前对程序进行签名。当你调试应用程序时,Android SDK工具替你对应用程序进行了签名。Eclipse的ADT插件和Ant编译工具都提供了两种签名模式——Debug模式和Release模式。· 当开发和测试时,你可以使用Debug模式。在Debug模式下,编译工具使用内嵌在JDK中的Keytool工具来创建一个keystore和一个key(包含公认的名字和密码)。在每次编译的时候,使用这个Debug Key来为apk文件签名。由于密码是公认的,在每次编译的时候,也不需要提示你输入keystore和key密码。· 当你的程序准备发布时,你必须在Release模式下,使用密钥来为apk文件签名。有以下两种方式可以做到:o 命令行中使用Keytool和Jarsigner。在这个方法中,首先需要编译出一个未签名的apk。然后使用Jarsigner(或相似的工具),用你的密钥为apk手动签名。如果你没有合适的密钥,你可以运行Keytool来手动生成自己的keystore/key。o 使用ADT导出向导。如果你使用Eclipse/ADT插件进行开发,你可以使用导出向导来编译程序,生成密钥(如果需要),并为apk签名,所有这些操作都在导出向导中。一旦你的程序签名了,别忘了运行zipalign来为apk进行额外的优化。



Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序。不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。

  ·所有的程序都必须签名,没有被签名的程序,系统将不能安装。

  ·可使用自签署证书签署应用程序,无须授权凭证。

  ·系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。

  ·可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。

  Android SDK 工具可以在调试时给应用程序签名。ADT插件和Ant编译工具都提供了两种签名模式-debug模式和release模式

  ·debug模式下,编译工具使用JDK中的通用程序Keytool通过已知方法和密码创建秘锁和密钥。每次编译的时候,工具使用debug密钥签名应用程序的.apk文件。因为密码是已知的,工具不需要在每次编译的时候提示输入密锁和密钥。

  ·当应用程序调试完毕准备要发布release版本时,可以在release模式下编译。release模式下,编译工具不会将.apk文件签名。需要自己用Keytool生成密钥和密锁,再用JDK中的Jarsigner工具给.apk文件签名。

  签名基本设置

  首先设置JAVA_HOME环境变量,告诉SDK如何找到Keytool,或者可以在Windows 系统环境变量PATH变量中添加Keytool的JDK路径。

  在发布release版本时,从Package面版上按选中你的project,按鼠标右键,依次选择Android Tools、Export Application Package。或者可以点击Manifest Editor,overview 页面上的“Exporting the unsigned .apk”连接 ,导出未签名apk文件。保存.apk文件后,用Jarsigner及自己的密钥给apk文件签名,如果没有密钥, 可以用Keystore创建密钥和密锁。如果已经有一个密钥了,如公共密钥,就可以给.apk文件签名了。

  也可以把上面这个完整的步骤写成一个bat文件,这样需要签名的时候只要运行这个bat就可以了。下面给出一个完整的bat文件示例:

  @Rem android签名程序 //注释指令

  @Rem echo是显示指令 格式:echo [{on|off}] [message]

  @echo **********************************************************

  @Rem 文件是否存在命令格式:if exist 路径+文件名 命令

  @if exist d:sign/MyFirstApp.keystore goto sign

  @echo 创建签名文件MyFirstApp.keystore

  @Rem keytool命令格式:-genkey产生签名 -alias别名 -keyalg加密算法 -validity有效天数 -keystore生产签名文件名称

  keytool -genkey -alias MyFirstApp.keystore -keyalg RSA -validity 40000 -keystore MyFirstApp.keystore

  @echo 开始签名:

  @Rem jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件

  jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore

  @goto over

  :sign

  @echo 开始签名:

  jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore

  :over

  @echo ********************MyFirstApp.apk 签名完成************************

  pause

  ================

  以上是一个给应用签名的完整bat文件,在运行这个bat文件时,还需要按照屏幕提示的步骤输入一些必要信息,最后生成一个签名后的文件是:MyFirstApp_signed.apk。

  签名完成以后最好再把这个文件压缩一下,使用Android SDK安装路径下tools文件夹里的zipalign进行压缩,以刚才这个文件为例,也可以写成一个bat文件,示例如下:

  D:\soft\android-sdk-windows\tools\zipalign -f -v 4 MyFirstApp_signed.apk MyFirstApp_zip.apk

  D:\soft\android-sdk-windows\tools\zipalign -c -v 4 MyFirstApp_zip.apk

  pause

  ================

  上面的D:\soft\android-sdk-windows用你的实际Android SDK安装路径代替。

  按照以上步骤签名、压缩就完成了,最后把压缩后的那个文件(比如例子中的MyFirstApp_zip.apk文件)复制到手机上就可以正常的安装运行了


原创粉丝点击