需要的工具
反编译及重签名主要流程
- 反编译
apk
文件 - 解出
jar
包(若不需要修改java
代码,则不需要此步骤) - 修改资源文件或代码
- 回编译出
apk
文件 - 重签名
PS:在流程之前先声明几个文件和路径
- 新创建的文件夹为 User/liyiyuan/Desktop/ReSignTest
- 需要重签名的apk为 base-test.apk
- 重签名导出的apk为 resigned-test.apk
流程详解
- 创建一个新的文件夹,目录为
User/liyiyuan/Desktop/ReSignTest
- 将需要重签名的apk和下载的dex2jar解压出的
dex2jar-2.0
文件夹放入User/liyiyuan/Desktop/ReSignTest
此时的目录结构为:ReSignTest │ base-test.apk │ └───dex2jar-2.0 │ ...
- 打开
termnial.app
(终端)进入ReSignTest文件夹,执行apktool d base-test.apk
此命令会将
base-test.apk
反编译,得到base-test
文件夹,此时目录结构为:ReSignTest │ base-test.apk │ └─── dex2jar-2.0 │ │ │ ... │ └─── base-test │ AndroidManifest.xml │ apktool.yml │ assets │ lib │ original │ res │ smali
- (如果不需要修改app内java代码可以省略此步骤)在
termnial.app
(终端)中执行命令:sh dex2jar-2.0/d2j-dex2jar.sh base-test.apk
此命令是将
*.dex
文件转成*.jar
文件,这个jar
文件就是java
代码的压缩包,需要查看代码的可以用使用此压缩包查看。 此时目录结构为:ReSignTest │ base-test.apk │ base-test-dex2jar.jar │ └───dex2jar-2.0 │ ...
PS:用apktool解包后不会在文件夹中存在*.dex
文件。但是通过改apk
后缀名为zip
或rar
等,在将压缩包解压会存在classes.dex
文件。
- 反编译结束后
base-test
文件夹中assets
存放着base-test.apk
的一些资源,一半渠道CHANNEL
信息会存到Config.*
文件里面(根据项目会有各自的差别)。此时就可以根据需求修改。 - 修改完成后,需要进行回编译,就是将
base-test
文件夹编译成apk
文件,需要运行命令:apktool b base-test.apk
此时目录结构为
ReSignTest │ base-test.apk │ └─── dex2jar-2.0 │ │ │ ... │ └─── base-test │ AndroidManifest.xml │ apktool.yml │ assets │ build │ dist │ lib │ original │ res │ smali
执行此命令后,会在base-test
文件夹下生成build
和dist
文件夹,其中回编译的新的apk
文件就是在dist
文件夹中。
- 有了回编译的文件后就可以对新的
apk
进行重签名,在termnial.app
(终端)输入命令:jarsigner -verbose -keystore [keystore路径] -signedjar [签名后的文件保存路径] [dist文件夹下的路径] [证书名]
执行完后回需要输入
keystore
的密码,也可以在命令行中加上-storepass
、-keypass
、-sigalg
、-digestalg
等参数来添加密码、加密方式等。 最终重签名得到的包为就是resigned-test.apk
自动化出多渠道包工具项目地址
请参考我的github项目:tools-channelpackages