《安卓签名文件详情》

什么是签名文件


签名:签名是开发者生成应用 apk 的最后一步,使用 Android sdk 自带的工具对 apk 中的每一个文件做标记,以确保你的 apk 文件有自己唯一的"身份归属认证"。只有签名文件相同且包名相同的 apk 才可以覆盖安装并保留用户信息。Android 签名有以下几个特点:

  1. Android 的所有软件都需要签名
  2. 可以使用使用 self-signed(自签名),签名证书不需要某个认证中心授权
  3. 如果要发布给终端用户,你必须使用一个私钥 private key 进行签名,而不能使用 SDK 工具生成的 DEBUG KEY 签名来发布软件
  4. 对于已经安装的软件,即使过了证书的有效期,软件还是可以正常运行
  5. 可以使用工具--KeyTools 和 Jarsigned 来生成 KEY 和签名你的 .apk 文件

Android 签名有两种方式 DEBUG 和 RELEASE,在开发测试期间使用 DEBUG 方式,BUILD 时,会自动使用工具 KeyTools 创建 KEY 包括别名和密码。每次编译时,都会使用 DEBUG 的 KEY 进行签名,如果要发布则使用 RELEASE 方式,使用私钥进行签名,主要两两种方法:

  1. 在命令行中使用 KeyTools 和 Jarsigner,如果没有合适的私钥,则使用 KeyTool 人工生成一个 KEY 来签名
  2. 在 ECLIPSE 的 GUI 界面中,使用 EXPORT 的向导来编译、生成私钥,签名。

对于签名建议所有的的应用程序在其产品的生命周期中,都是用一种签名,主要是为了升级、软件多模块(软件由多个小软件组成)。同时签名要考虑到证书和软件生命期,如果证书过期了则该软件以后就无法升级。如果想签名的软件在 Android Market 上发布,则证书必须是能够到 2033.10 之后,主要是为了保护用户能够有效升级。而 keytools 和 jarsigned 软件都在 JDK 所在 bin 目录下。

使用 DEBUG 签名


在第一次安装 Android 开发环境的时候,SDK 工具已经创建了缺省的 keystore/key 和账号、密码:

    Keystore name – "debug.keystore"    
    Keystore password – "android"
    Key alias – "androiddebugkey"
    Key password – "android"
    CN – "CN=Android Debug,O=Android,C=US"

keystore 其实就是一个文件,存放以上信息的文件,由于使用了加密难以看懂。如果想改变 keystore 的位置,可以在 eclipse 中,使用 Windows > Prefs > Android > Build。Eclipse 用户的签名工作都由 ECLIPSE 缺省都做了,用户无需操心,但 DEBUG 模式的签名只有 365 天有效期,过了有效期,编译会出错。但不用担心,只要将 debug.keystore 文件删除后,下次 BUILD 会自动生成的 keystore 和 key 的。debug.keystore 文件一般在 C:\Documents and Settings\Administrator.android 目录下。

使用 eclipse 开发环境导出 RELEASE 签名


因为目前大部分开发者都是使用 eclipse 开发环境进行 Android 应用的开发,所以谷歌的 adt 插件提供了可视化界面来供开发者方便的生成签名文件。
在 ECLIPSE 中选择某个项目,右击鼠标选择弹出菜单 Android Tools > Export Signed Application Package 或者使用 File->Export->Android->"Export Android Application",详细步骤可见下图:
第一步 选择项目

图片

第二步 选择 keystore
如果是第一次运行可以使用"create new keystore",以后签名就可以使用“user existing keystore”

图片

第三步 创建 KEY

图片

第四步 择签名后文件

图片

使用命令行导出 RELEASE 签名


首先进入 jdk 安装路径下面 bin 目录,可以调用 keytool 工具查看运行帮助,如下图:

图片 图片 图片

接下来就可以输入命令去生成签名文件了 图片 图片

关于签名文件的官方说明,可以参见http://developer.android.com/tools/publishing/app-signing.html