创建私钥命令:
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