注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Android应用程序签名简介  

2011-09-26 16:08:21|  分类: 数字签名 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Android的应用程序APK的签名其实和一般的jar 文件签名差不多。
首先,得到keystore文件.
你可以从一些机构申请得到一个keystore;也可以自己生成一个自签的keystore文件。APK和jar签名所用的keystore文件是一致的。
因此关于生成自签keystore文件,请参照《Jar文件的数字签名
另外android本身自带一个keystore文件debug.keystore。它一般位于以下目录:C:\Documents and Settings\用户名\.android\。对于Administrator用户,位于C:\Documents and Settings\Administrator\.android\目录下,其密码为android
其次,签名。
我们可以直接用JDK的jarsigner工具对apk文件进行签名。
实例1:
jarsigner -keystore robin.keystore -storepass GL2009 -keypass gl2009  Hello.apk robin
这个命令用密码“GL2009”从名为“robin.keystore”的keystore文件中提出名字为“robin”、密码为“gl2009”的公钥/私钥对,并对Hello.apk 文件按照keystore文件robin.keystore中的约定进行数字签名。签名的输出文件为原apk文件,即Hello.apk
实例2:
jarsigner -keystore robin.keystore -storepass GL2009 -keypass gl2009 -signedjar Hello_signed.apk Hello.apk robin
这个命令用密码“GL2009”从名为“robin.keystore”的keystore文件中提出名字为“robin”、密码为“gl2009”的公钥/私钥对,并对Hello.apk文件按照keystore文件robin.keystore中的约定进行数字签名,签名的输出文件为Hello_signed.apk
补充
使用sun jdk的jarsigner工具来进行签名时,有时会失败出现类似如下的提示:
jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compres
sed size (expected 9301 but got 9621 bytes)
网上有人说:这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。
但是网上提供一种更直接简单而且有效的方法,即:把apk压缩包下面的文件夹META-INF删除掉再重新执行上面的签名命令
当然这种方法的缺点是,如果原apk已经是签名过,你在删除META-INF目录时,它以前的签名也删除了。

另外,关于数字签名的更多东西请参考《数字签名简介》和《Java的数字签名和数字证书
  评论这张
 
阅读(2627)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017