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

重新打包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

如果想要实现自动化打包签名可以使用批处理文件,但是需要输入密码,可以使用jarsigner查看下帮助命令。

使用下面两个命令可以提前输入密码口令密码

[-storepass <口令>] 用于密钥库完整性的口令[-keypass <口令>] 私有密钥的口令 (如果不同)jarsigner -verbose -keystore keybaohuai -storepass 123456 -keypass 123456 -digestalg SHA1 -sigalg MD5withRSA -signedjar AndroidTestsigned.apk zhaocaixiong101.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)

你可能感兴趣的:(Android)