================================================================================
Android建立私钥并为APK文件签名的相关命令
建立私钥命令:
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便可。
后面紧跟的两个参数分别为未对齐优化的文件名和优化后的文件名。
对已签名文件进行对齐优化后,能够获得更好的执行速度。
================================================================================
Eclipse下使用ADT插件进行图形化的签名相关的操做
生成签名的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 建立一个新的私钥仓库文件。
通常的,若是已经建立了一个仓库文件,选择第一项便可,不然,须要选择第二项,建立一个新的仓库文件。
一、建立一个新的仓库文件:
Location 私钥仓库文件的保存位置。
Password 私钥仓库的密码。
Confirm 再次确认私钥仓库的密码。
二、使用已有的仓库文件:
Location 既存私钥仓库文件的位置。
Password 既存私钥仓库的密码。
点击Next继续。
这里又有两个选项:
Use existing key 使用已经存在的私钥对APK进行签名。
Create new key 建立一个新的私钥用于对APK进行签名。
一、建立一个新的私钥:
选中Create new key后,点击Next继续。
在打开的窗口中,输入相关参数,其中:
Alias 私钥名称。
Password 私钥的密码。
Confirm 再次确认私钥密码。
Validity (years) 有效期,单位是年,与命令行执行时的单位不一样。
下面的可选参数里,必须有一项不为空,其它可选参数能够不填。
二、使用已有的私钥:
Alias 下拉列表里会列出私钥仓库文件里存在的私钥,选择想要使用的私钥。
Password 输入选择的私钥对应的密码。
点击Next继续。
在新窗口中,选择签名后的文件保存的位置,点击Finish完成上述全部操做。
生成未签名的APK:
使用命令的方式对APK进行签名,该APK必须是未签名的。
若是对已签名文件进行再签名,不会成功。以下方式能够获得一个未签名的APK:
工程->右键->Android Tools->Export Unsigned Application Package...
另外,新的ADT会在工程目录下生成proguard.cfg文件,使用它能够在签名时混淆代码。
混淆代码能够加大反编译代码后的理解难度,起到保护代码的做用。
使用方法是,修改工程目录下的project.properties文件,在最后添加:
proguard.config=proguard.cfg
优化