文档章节

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

asay
 asay
发布于 2016/05/17 16:58
字数 462
阅读 369
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

win32截屏并rgb24转yuv420

//最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)void ScreenCap(void* buf, int w, int h){ HWND hDesk = GetDesktopWindow(); HDC hScreen = GetDC(hDesk); ......

styleman
今天
1
0
php输出mysql取出的中文为??的问题

解决方法: @ $db=new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DB); $db->query("set names utf8");//添加此语句,可以解决问题...

Aomo
今天
1
2
白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网...

oKong
今天
2
0
【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
今天
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部