天天看点

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

因为没有找到现成的apktool可执行文件,所以首先需要下载apktool.jar。

在使用 java -jar apktool.jar d lol-yingyongbao-release.apk命令反编译APK;

有可能会报错:

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

这是因为apktool.jar的版本太低,用更高版本的jar就不会报错啦~。~

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

成功反编译APK!

回编译

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

这时可以在lol-yingyongbao-release文件夹下的dist目录中找到重新生成的APK,也可以用aapt查看apk信息:

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

但是若这时候将重新生成的apk解压的话,会发现里面没有META-INF文件夹,这是因为重新生成的apk是未签名的,所以需要对其进行签名:

使用JDK中带的工具jarsigner

命令行是:jarsigner -keystore %1 -storepass %2 -keypass %3 -sigfile CERT -signedjar %4 %5 %6 -verbose -certs

6个参数分别是:

key的路径
库的密码
key的密码
签名后输出的文件名
需要签名的原文件
key的别名
           

这里需要注意的是-sigfile这个参数,之前用ide签出来的这个验签的名字已经叫CERT了,后面手动去签名的话,如果不加这个参数会导致生成的验签文件名为key的别名,如果程序已经发布了,会导致平台包指纹不同而不能提交,用这个方法把这个强行指定为CERT,和之前提交的保持一致即可。

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

这时候再将重新生成的lol.apk进行解压,会发现META-INF目录已经存在了:

在ubuntu下使用apktool反编译APK以及jarsigner签名apk

我们可以使用keytool来查看其签名信息(keytool -list -keystore debug.keystore 用来查看keystore;keytool -printcert -file META-INF/CERT.RSA用来查看第三方应用或系统应用的签名,需要先解压缩APK):

在ubuntu下使用apktool反编译APK以及jarsigner签名apk