文档章节

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

asay
 asay
发布于 2016/05/17 16:58
字数 462
阅读 414
收藏 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
110
0
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
关于Android的签名问题

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

无鸯
2011/09/15
3.9K
3

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部