Unity自动化出多渠道包apk,Mac环境下对apk反编译并重签名
需要的工具
反编译及重签名主要流程
- 反编译
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
文件夹中。
6. 有了回编译的文件后就可以对新的apk
进行重签名,在termnial.app
(终端)输入命令:
jarsigner -verbose -keystore [keystore路径] -signedjar [签名后的文件保存路径] [dist文件夹下的路径] [证书名]
执行完后回需要输入keystore
的密码,也可以在命令行中加上-storepass
、-keypass
、-sigalg
、 -digestalg
等参数来添加密码、加密方式等。
最终重签名得到的包为就是resigned-test.apk
自动化出多渠道包工具项目地址
请参考我的github项目:tools-channelpackages
参考文章
其他
更多Blog请见:https://yiyuan1130.github.io/
Github地址:https://github.com/yiyuan1130