2012年10月15日星期一

发布Android应用时如何给apk自行签署金钥


发布Android应用时,它会提醒你提交自行签署金钥版的apk压缩包。因为之前一直Eclipse中调试模式下用的unbug版的签署,现在要换成自己签署了。在Linux下自行签署金钥步骤如下:

1.在装Java JDK时会同时装keytool,这个东东一般装在/usr/bin下。现在我们要调用它,先打开cd /usr/bin,同时为了让我们有调用权限,之后的步骤需要在root下操作su.

2.调用keytook来建立一个私人密钥,不同参数的含义请参见说明。这里要注意的是,因为上传到android市场时它会提示你有效密钥应超过50年,所以我用了20000天,不知道用少了是否有影响。建立密钥命令如下:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 20000
这时候命令行中会出现如下问题,依次回答:
输入keystore密码:  
再次输入新密码: 
您的名字与姓氏是什么?
  [Unknown]:  XXXX
您的组织单位名称是什么?
  [Unknown]:  XX
您的组织名称是什么?
  [Unknown]:  XX
您所在的城市或区域名称是什么?
  [Unknown]:  HK
您所在的州或省份名称是什么?
  [Unknown]:  HK
该单位的两字母国家代码是什么
  [Unknown]:  HK
CN=XXXX, OU=XX, O=XX, L=HK, ST=HK, C=HK 正确吗?
  [否]:  y

正在为以下对象生成 2,048 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 20,000 天):
CN=XXXX, OU=XX, O=XX, L=HK, ST=HK, C=HK
输入<alias_name>的主密码
(如果和 keystore 密码相同,按回车):  
再次输入新密码: 
[正在存储 my-release-key.keystore]
这样,就私人密钥就创建成功了。

3.在发布模式下编译应用。在Eclipse里Package Explorer下右键单击你所要加密的项目,选择Android Tool,再选择Export Unsigned Application Package,将这个apk在某一路径下保存,默认保存在Eclipse文件夹下。


4.其实放在那里没什么用,我们需要把这个apk转移到建立私人密钥的地方
mv /home/xxxx/eclipse/myActivity.apk /usr/bin
其中myActivity是你刚刚编译的应用的名字。


5.好了,现在可以用自己的私人密钥给自己开发的应用签署了,命令是
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore myActivity.apk alias_name
相关参数可以参考说明
这时候命令行中会出现如下问题,依次回答:
输入密钥库的口令短语: 
输入 alias_name 的密钥口令:
答对之后出现:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/ALIAS_NA.SF
   正在添加: META-INF/ALIAS_NA.RSA
  .
  .
  .
后面还有一大长串就不详细列出了

6.最后,我们要确定加密完成。
jarsigner -verify -verbose myActivity.apk 
会显示你加密的package的具体信息,最后面是说明:
 s = 已验证签名 
  m = 在清单中列出条目
  k = 在密钥库中至少找到了一个证书
  i = 在身份作用域内至少找到了一个证书

jar 已验证。

7.现在就可以在Android市场上发布你的应用了,要注意的是:
apk 套件名稱不能以下列值為開頭:[com.android, com.google, android, com.example]

8.为了优化你将要发布的应用,可以使用zipalign工具,这个工具在android-sdks->tools文件夹下,是一个.exe文件。用它来进行优化,需要使用命令

./zipalign -v 4 myActivity.apk zimyActivity.apk
其中myActivity.apk是zipalign之前的压缩档案,zimyActivity.apk是优化之后输出的压缩档案。如果希望直接覆盖原档案,则可以用
./zipalign -f -v 4 myActivity.apk
最后出现
Verification successful
就OK了。

没有评论:

发表评论