码迷,mamicode.com
首页 > 编程语言 > 详细

重新打包apk,使用java bin目录里的jarsigner进行签名

时间:2015-04-13 14:41:30      阅读:397      评论:0      收藏:0      [点我收藏+]

标签:

重新打包apk,使用java bin目录里的jarsigner进行签名

反编译android apk包使用apktool工具,下载地址http://download.csdn.net/detail/fancylovejava/8447801

命令:

cmd>cd /d E:\apktool

apktool d xxxx.apk执行后会在当前apktool目录下生成一个xxxx名的文件,此文件就是apk包反编译后的文件

然后如果想在asset目录下添加个文件,可以放在文件下,不过代码需要修改预先写入读取asset的逻辑

然后使用命令apktool b xxxx<这个是目录> 然后会在xxxx目录里多出个dist文件,里面包含个重新打包好的apk,但是这个apk没有使用keystore签名,所以需要使用java的jarsigner进行签名

命令如下

C:\Program Files\Java\jdk1.8.025\bin>jarsigner -verbose -keystore keybaohuai -digestalg SHA1 -sigalg MD5withRSA -signedjar AndroidTestsigned.apk zhaocaixiong_101.apk baohuai

会出现一行警告

警告:未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2113-10-30) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。

注意

jarsigner 签名命令里加入如下参数来解决:-digestalg SHA1 -sigalg MD5withRSA

可以忽略,安装后测试是否可行!

利用标准的java工具keytool.exe(位于jdk\jre\bin目录下)创建key,利用jarsigner.exe工具使用生成证书和给程序签名(位于jdk\bin目录下)。

win+R运行cmd,进入目录D:\temp(注:使用该目录为示例工作目录)

a)、创建可以,运行如下命令

keytool -genkey -alias demo.keystore -keyalg RSA -validity 20000 -keystore demo.keystore

/*说明:keytool工具是Java JDK自带的证书工具

-genkey参数表示:要生成一个证书(版权、身份识别的安全证书)

-alias参数表示:证书有别名,-alias demo.keystore表示证书别名为:demo

-keyalg RSA表示加密类型,RSA表示需要加密,以防止别人盗取

-validity 20000表示有效时间20000天

-keystore demo.keystore表示要生成的证书名称为demo

b)、删除之前的签名文件

用解压缩工具解打开apk文件(如:更改a.apk为a.zip,便可用压缩工具打开,并找到下面的目录META-INF下的CERT.RSA和CERT.SF文件,并删除该文件。删除后,再次更改后缀名为.apk;)

注:

META-INF目录:存放签名后的CERT和MANIFEST文件,用于识别软件的签名及版权。

res目录:存放各种Android原始资源,包括:动画anim、图片drawable、布局layout、menu菜单、xml等等

AndroidManifest.xml编码后的Android项目描述文件,包括了Android项目的名称、版本、权限、程序组件描述等等

classes.dex编译后Class被dx程序转换成Dalvik虚拟机的可执行字节码文件

resources.arsc所有文本资源的编译产物,里面包含了各Location对应的字符串资源。

c)、使用生成的key对apk签名,运行如下命令:

jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demoAlias

/*说明:jarsigner是java的签名工具

-verbose参数表示:显示出签名详细信息

-keystore表示:使用当前目录中的demo.keystore签名证书文件。

-signedjar demo_signed.apk demo.apk demo正式签名,三个参数中依次为签名后产生的文件

demo_signed,要签名的文件demo.apk和秘钥库demo.keystore.*/

(注:查看某个apk是否经过了签名方法,jarsigner -verify demo.apk。优化:签名后需要做对齐优化处理zipalign -v 4 yourprojectname-unaligned.apk yourprojectname.apk)

重新打包apk,使用java bin目录里的jarsigner进行签名

标签:

原文地址:http://blog.csdn.net/fancylovejava/article/details/45025031

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!