GitHub - pzx521521/apk-editor
通过网址或html生成一个简单apk
之前发过一个使用apktool版本的,简单来说就是一个对apk反编译和编译的过程
相比使用apktool有以下优点:
- [x] 没有环境依赖,完全不需要 jdk/jre
- [x] 无需中间调用apktool,容易部署到服务器/docker
使用
Online Demo
修改apk显示的网页
- 在线网址
复制代码 隐藏代码 ./apkEditor -o="/Users/parapeng/Downloads/app-new.apk" https://www.example.com
- 指定输出路径
复制代码 隐藏代码 ./apkEditor -o=demo.apk https://www.example.com
- 本地文件 仅一个index.html
复制代码 隐藏代码 apkEditor <yourpath>/index.html
- 本地文件夹 包含html+css+js
复制代码 隐藏代码 apkEditor <your-dir>
- 本地zip文件 包含html+css+js的zip文件
复制代码 隐藏代码 apkEditor <your-dir>/demo.zip
修改其他信息
在修改显示的网页的基础上添加
- label
对应application.label
用于显示软件名 - versionCode
对应manifest.android:versionCode
版本号用于更新软件 - versionName
对应manifest.android:versionName
用于显示软件版本号 - package
~~对应manifest.android:package
软件包名~~
修改这个要改的东西太多了,请使用apktool - 生成默认的webview并修改信息
复制代码 隐藏代码 ./apkEditor -versionCode=222 -versionName="2.2.2" -label="NewApp" -o="/Users/parapeng/Downloads/app-new.apk" https://www.example.com
原理
反编译apk正常的流程是:
- 解压apk
复制代码 隐藏代码 unzip origin.apk -d origin/
- 修改文件
复制代码 隐藏代码 echo "1234" > /tmp/cpid cp /tmp/cpid origin/
- 重新打包apk
aapt2+aidl+Renderscript+Javac+DEX+zipflinger- 如果不需要修改代码的话是aapt2+zipflinger
- aapt2会对一些资源做特殊处理,如AndroidManifest.xml会变为一个二进制文件,所以只使用zip是不行的
- 签名apk
- v1签名 jarsigner
- v2签名 (Android11+) apksigner,
- 必须先 zipalign 在 apksigner,否则会导致签名失效
- 对于签名v1、v2、zipalign对齐的顺序是:v1----zipalign对齐----v2
- zipalign对齐
- Android12+(API31+)必须的
- 源码cpp
apktool 相当于把重新打包apk
简化了,并多了解析dex文件
实现原理
由于并不需要修改dex中的东西
解压->修改->压缩->对齐->签名
参考引用:
zipmerge
signv2
todo
- [ ] 包名的修改
- [ ] 图标修改
- [ ] 桌面App(UI)
- [ ] 对其他的app的修改
下载
github
windows
github
windows
macos