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

Android创建私钥并为APK文件签名的相关命令及图形化方式

2011-12-15 13:06 225 查看
创建私钥命令:

keytool -genkey -keystore <path>.keystore -keyalg RSA -validity <days> -alias <private key>

该命令位于jdk安装目录的bin目录下,用于创建签名用的私钥。

其中:

-genkey 表示创建私钥。

-keystore 后面跟私钥仓库的名称,如果指定的仓库不存在,则创建一个新的仓库文件。

-keyalg 表示加密方式,一般跟RSA即可。

-validity 表示有效期限,单位为天,可以指定36500,即100年。

-alias 表示要添加的私钥名称,这个名称会被添加并存储到仓库文件中。

命令执行后,需要再输入一些信息,最后输入Y确认。

其中涉及到两个密码,一个是私钥仓库的密码,一个是具体私钥的密码,可以相同。

当输入完私钥的密码后,命令执行完成。

签名命令:

jarsigner -verbose -keystore <path>.keystore -signedjar <signed>.apk <unsigned>.apk <private key>

该命令位于jdk安装目录的bin目录下,用于使用私钥对未签名APK进行签名。

其中:

-verbose 表示输出相关信息。

-keystore 后面跟签名时使用的私钥所在的仓库文件。

-signedjar 表示对文件进行签名,后面跟三个参数:

第一个为签名后的文件名。

第二个为未签名的文件名,可以使用Eclipse的插件Android Tools导出未签名APK。

第三个是使用的私钥名称。

命令执行后,需要输入相关密码,然后输出相关信息,直到命令结束。

另外需要注意的是,如果是JDK1.7的版本,需要在签名命令后边添加如下参数:

-digestalg SHA1 -sigalg MD5withRSA

否则,最后签名的APK不能被安装,会提示以下错误:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

对齐优化命令:

zipalign -v 4 <unaligned>.apk <aligned>.apk

该命令位于sdk安装目录下的tools目录下,用于对已签名APK进行对齐优化。

其中:

-v 表示对齐的字节数,一般指定为4即可。

后面紧跟的两个参数分别为未对齐优化的文件名和优化后的文件名。

对已签名文件进行对齐优化后,可以得到更好的执行速度。

--------------------------------------------------------------------------------

生成签名的APK:

该过程将包含生成私钥仓库、生成私钥、打包APK、为APK签名、对APK对齐优化等一系列操作。

Android工程目录下的bin目录下,由Eclipse自动生成的APK文件是使用了默认的debug签名的。

使用该方式签名的apk可以安装到设备上,但是不同的环境,可能debug签名不同,并不通用。

而且,debug签名的APK无法发布到Market上。

可以用如下方式导出一个APK并进行签名:

工程->右键->Export->Android->Export Android Application...

或者

工程->右键->Android Tools->Export Signed Application Package...

在打开的窗口中,如果想要修改导出的工程,可以点击Browse进行修改。点击Next继续。

这里有两个选项:

Use existing keystore 使用既存的私钥仓库文件。

Create new keystore 创建一个新的私钥仓库文件。

一般的,如果已经创建了一个仓库文件,选择第一项即可,否则,需要选择第二项,创建一个新的仓库文件。

1、创建一个新的仓库文件:

Location 私钥仓库文件的保存位置。

Password 私钥仓库的密码。

Confirm 再次确认私钥仓库的密码。

2、使用已有的仓库文件:

Location 既存私钥仓库文件的位置。

Password 既存私钥仓库的密码。

点击Next继续。

这里又有两个选项:

Use existing key 使用已经存在的私钥对APK进行签名。

Create new key 创建一个新的私钥用于对APK进行签名。

1、创建一个新的私钥:

选中Create new key后,点击Next继续。

在打开的窗口中,输入相关参数,其中:

Alias 私钥名称。

Password 私钥的密码。

Confirm 再次确认私钥密码。

Validity (years) 有效期,单位是年,与命令行执行时的单位不同。

下面的可选参数里,必须有一项不为空,其它可选参数可以不填。

2、使用已有的私钥:

Alias 下拉列表里会列出私钥仓库文件里存在的私钥,选择想要使用的私钥。

Password 输入选择的私钥对应的密码。

点击Next继续。

在新窗口中,选择签名后的文件保存的位置,点击Finish完成上述所有操作。

生成未签名的APK:

使用命令的方式对APK进行签名,该APK必须是未签名的。

如果对已签名文件进行再签名,不会成功。如下方式可以得到一个未签名的APK:

工程->右键->Android Tools->Export Unsigned Application Package...

另外,新的ADT会在工程目录下生成proguard.cfg文件,使用它可以在签名时混淆代码。

混淆代码可以加大反编译代码后的理解难度,起到保护代码的作用。

使用方法是,修改工程目录下的project.properties文件,在最后添加:

proguard.config=proguard.cfg
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: