文档章节

apk签名详细原理及jarsigner版本问题

asay
 asay
发布于 2016/05/17 16:58
字数 462
阅读 389
收藏 0

1.首先了解你的keystore是啥。

keytool -list -v -keystore /Users/mac/.android/debug.keystore 

别名: androiddebugkey
创建日期: 2013-11-30
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: 565bb50d
有效期开始日期: Mon Nov 30 10:31:41 CST 2013, 截止日期: Wed Nov 22 10:31:41 CST 2099
证书指纹:
     MD5: A4:4A:9F:CA:5B:F9:BB:4C:04:5B:B7:FF:35:70:F3:13
     SHA1: 80:E5:B2:E4:DC:16:AB:B8:79:70:59:CD:0F:ED:F3:3B:CB:66:CA:6A
     SHA256: 0A:8W:64:74:69:0A:D7:R4:C6:72:86:67:35:9D:DC:BA:D2:CB:45:D7:04:E0:81:7F:70:A3:0C:CF:E4:93:B2:BF
     签名算法名称: SHA1withRSA
     版本: 3

这个是自动生成的debug签名keystore,对apk进行签名后,其中的指纹信息会包含进apk中,每个apk对应一套信息。

2.在手机上更新apk,应用检验等多种情况会使用到这些指纹信息。

PackageManager pm = getContext().getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo("com.xxx.xxx", 64);
Signature[] signatures = packageInfo.signatures;
byte[] bytes = signatures[0].toByteArray();
String md5 = MD5(bytes);

获得的md5串就等于上面的MD5的值,为a44a9fcaxxxxxxxx.....

3.签名过程中命令需要写的完整,否则使用jdk6和jdk7会造成结果有些许差别。

jarsigner -keystore debug.keystore -storepass 123456 -signedjar output.apk -digestalg SHA1 -sigalg MD5withRSA input.apk myalias

上面是完整命令。我之前在使用jdk7时没有指定digest和sign算法,造成apk无法安装。

嗯,命令很长,推荐写个sh脚本调用。注意,工具都要在 PATH 中能找到啊。

apksigner.sh :

#!/bin/bash
if [ $# != 2 ] 
  then
  echo "usages:" $0 "inputFile" "outputFile"
  exit 1
fi

jarsigner -keystore /to/your/path/debug.keystore -storepass 123456 -signedjar $2 -digestalg SHA1 -sigalg MD5withRSA $1 myalias

加入PATH后,随意调用:

apksigner.sh input.apk output.apk

完美!

最后,不要忘了zipalign一下

zipalign -v 4 infile.apk outfile.apk

© 著作权归作者所有

共有 人打赏支持
asay
粉丝 0
博文 14
码字总数 5272
作品 0
郑州
私信 提问
Android应用程序签名 debug签名

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用...

长平狐
2012/08/28
4.8K
1
Android 应用程序签名

Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名? 如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块...

长平狐
2013/01/06
94
0
关于Android的签名问题

在整个平台的安全性方面Google也使用了Android签名机制,当然这里使用Sun的针对Jar文件签名工具jarsigner即可,这里我们需要了解一些问题,为什么要签名? 其实安装到真机G1的软件都必须签名。...

无鸯
2011/09/15
3.4K
3
Android:apk签名

一、android apk签名有几种方法? 1、利用jdk工具进行apk签名 2、利用Eclipse中的ADT对apk进行签名 二、每种签名方法具体怎么操作? 1、利用jdk工具进行签名: a、运行dos,cd到apk所在的目录...

天外来客1101
2013/07/04
0
0
Android安全之---APP去广告

一、工具介绍 apktool:google提供Android apk编译与反编译工具,https://ibotpeaches.github.io/Apktool/ dex2jar:dex文件转jar文件工具,https://github.com/pxb1988/dex2jar jd-gui:查看......

病已
2017/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

thinkphp门窗定制电商平台-尺寸定制页面

这个门窗定制电商平台的目标是,消费者通过门窗定制平台,上传要定制门窗的尺寸数据下订单,电商平台分派订单给厂家商家定制商品,由厂家商家直接发货给消费者。消费者的资金托管在电商平台里...

乐兔CRM
22分钟前
4
0
全局光照---小结

中国龙-扬科
24分钟前
1
0
LAMP架构设置防盗链及访问控制

11月19日任务 11.25 配置防盗链 11.26 访问控制Directory 11.27 访问控制FilesMatch 配置防盗链 为什么要配置防盗链 第三方的站点可以通过引用的方式来获取本服务器上的资源如图片等,但是相...

robertt15
24分钟前
2
0
AWS 推出长期支持的 OpenJDK 免费分发版本 —— Amazon Corretto

简评:听说 Oracle JDK 要收费了,Oracle 要限制 Java 的商业或生产用途,针对这个问题,AWS 将会推出 Amazon Corretto。 Java 是 AWS 用户使用的最流行的编程语言之一,亚马逊一直致力于支持...

极光推送
30分钟前
4
0
Cloudinit如何判断虚拟机为初始化状态

Cloudinit简介 cloudinit是专为云环境中虚拟机的初始化而开发的工具,它从各种数据源读取相关数据并据此对虚拟机进行配置。常见的数据源包括:云平台的metadata服务、ConfigDrive等,常见的配...

空灵飞渡
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部