Android给apk签名那点事
发布日期:2021-10-20 03:26:36 浏览次数:3 分类:技术文章

本文共 1910 字,大约阅读时间需要 6 分钟。

前言

前几天老大的6p一打开应用就奔溃,于是与让我给应用适配6.0.后来最后发布内测版本后,发现又是打开立即奔溃,在确定我代码push之后,找了一下原因,最终发现是梆梆加固搞的鬼.

然后老大又让我去尝试其他加固方案,又因为加固后又需要重新加固,所以就有了这篇笔记.

签名

签名是为了什么

简单来说,签名可以保证我们的应用可以正常升级,并且不被别人覆盖.

算是一个标识.

工具

  • keytool 是个密钥和证书管理工具,可以用来生成证书.
  • jarsigner 工具利用密钥仓库中的信息来产生或校验 Java 存档 (JAR) 文件的数字签名

使用keytool生成证书:

keytool -genkey -keystore test.keystore  -alias test -keyalg RSA -validity 10000

参数解释:

  1. -genkey 产生证书文件
  2. -keystore 指定密钥库的.keystore文件中
  3. -keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法)
  4. -validity 为证书有效天数,这里我们写的是10000天
  5. -alias 产生别名
531570-e7df261f450daa74.jpg
效果图

网上搜索到的生成证书的方法都尼玛是错的,都是误导人的,具体请看后续!!!

另外keytool还能查看信息:

test  keytool -list -keystore test.keystore

结果:

➜  test  keytool -list -keystore test.keystore输入密钥库口令:密钥库类型: JKS密钥库提供方: SUN您的密钥库包含 1 个条目test.keystore, 2015-11-20, PrivateKeyEntry,证书指纹 (SHA1): 21:94:9F:48:7D:38:EE:5A:63:16:8F:46:1B:6E:73:89:53:7D:7B:5C

签名

可以使用jarsigner 来签名,例子如下:

jarsigner -verbose -keystore test.keystore -signedjar -signed.apk unsigned.apk 'test.keystore'

参数说明:

  1. -verbose:指定生成详细输出
  2. -keystore:指定数字证书存储路径
  3. -signedjar:该选项的三个参数为 签名后的apk包 未签名的apk包 数字证书别名(注意顺序)
531570-5b6e4d98c2906cc1.jpg
效果

(原来用的t.apk,发现不利于理解,于是后面改名了)

遇到坑了,找不到xxx证书链什么鬼!

后来搜索了很久之后才看到了一句要跟别名一样,我就在想我原来用的代码是这样的:

keytool -genkey -keystore test.keystore  -alias test.keystore -keyalg RSA -validity 10000

诶?好像没问题啊,test.keystore的别名test.keystore,是一样的啊,后来想想不对啊,test.keystore的后缀不应该加入上去吧,于是去掉keystore后再次重新生成一遍

keytool -genkey -keystore test.keystore  -alias test -keyalg RSA -validity 10000

然后再次执行签名:

jarsigner -verbose -keystore test.keystore -signedjar signed.apk t.apk 'test'

成功了!~So happy!!~~

531570-14f04f75dd81a270.jpg
最终效果

不过其实后面还顺带了一个警告:

未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2043-04-07) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
想来似乎没什么,就没管了.

吐个槽:国内的有些文章真的很坑人,几篇错误的文章尼玛到处复制黏贴,到处都是,真是给跪了

debug.keystore的故事

说点小插曲,小知识:

  1. AndroidStudio会自动生成一个默认的debug.keystore,它存放在~/.android/目录下.
  2. 如果一不小心删了(其实我是rm了它),只要重新run一遍debug版应(不指定signingConfig),AS会再次自动创建
  3. 它默认密码为 android

小结

一个加固导致崩溃引发的血案~

最终让我学会了如何用cmd来签名APK,来装逼,哦哈哈~~~
新技能get!~

另外欢迎关注:

我的微信公众号:

531570-cc90e16d4b464ac0.jpg
微信公众号

转载地址:https://blog.csdn.net/u014400934/article/details/101466564 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:每个人都应该懂一点设计原则
下一篇:Git 命令梳理

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月18日 13时06分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

apache 2.4 php5.4_apache2.4+php5.4+my sql 5.6,网站经常无故不能访问 2019-04-21
php apc.dll下载,PHP之APC缓存详细介绍 apc模块安装 2019-04-21
html贝塞尔曲线在线,贝塞尔曲线的一些事情_html/css_WEB-ITnose 2019-04-21
java blockingqueue源码_Java并发队列BlockingQueue实现之ArrayBlockingQueue源码分析 2019-04-21
Java前台显示近20天的东西_第十次课:前台首页设计及显示商品信息 2019-04-21
java开发web网站的路由设计_理解Web路由(浅谈前后端路由与前后端渲染) 2019-04-21
excel如何把顺序倒过来_在excel中怎么使文字颠倒顺序反过来显示呢? 2019-04-21
java 62进制 转换_序列号生成的另一种玩法--62进制如何玩? 2019-04-21
php正则表达式获取图片路径,php 常用正则表达式实例(图片地址,与指定内容获取)... 2019-04-21
脚本语言php是什么意思,PHP脚本语言 2019-04-21
matlab数学规划模型,数学规划模型 2019-04-21
视频提取音频php,如何提取视频中的音频,从视频文件中提取出音频输出成MP3格式... 2019-04-21
diy.php添加验证码,织梦dedecms自定义表单中加入验证码 2019-04-21
在php脚本中 通过可以获取,在PHP中,可以使用Unix时间戳获取精确的脚本执行时间。... 2019-04-21
s2-045 php exp,S2-045-EXP.py --Struts2任意代码执行漏洞 (S2-045,CVE-2017-5638) 2019-04-21
linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。... 2019-04-21
c语言程序设计 科学出版社习题答案,C语言程序设计(科学出版社)第4章 课后习题参考答案.doc... 2019-04-21
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错... 2019-04-21
deepin linux 2014安装,2014.2版本的Deepin虚拟机安装浅谈(就是深度Linux) 2019-04-21
android 限速工具,Android下载器之限速篇 2019-04-21