Apktool内部文档:INTERNAL.md开发内部指南
Apktool是一款用于Android APK文件逆向工程的强大工具,本指南将详细介绍Apktool的版本发布流程、aapt2二进制文件构建方法以及Gradle实用技巧,帮助开发人员更好地参与项目开发与维护。
版本发布全流程
确保正确的许可证头
注意:目前在迁移到Kotlin DSL后此功能已损坏。
版本标签管理
在build.gradle文件中有两个关键配置项:version和suffix。version应保持不变,而suffix通常为SNAPSHOT。发布前需移除suffix中的SNAPSHOT,提交格式为version bump (x.x.x)的单独提交,然后使用以下命令创建带签名的标签:
git tag -a vx.x.x -m "changed version to vx.x.x" -s
发布准备工作
需要在项目根目录创建gradle.properties文件,包含以下配置:
signing.keyId={gpgKeyId}
signing.password={gpgPassphrase}
signing.secretKeyRingFile={gpgSecretKingRingLocation}
ossrhUsername={sonatypeUsername}
ossrhPassword={sonatypePassword}
然后执行发布命令:./gradlew build shadowJar release publish(需JDK 11+环境)。
二进制文件构建
首先执行gradlew clean清理项目,然后运行构建命令:
./gradlew build shadowJar proguard release
构建成功后会显示版本信息,例如:Building RELEASE (main): 2.2.2。
二进制文件测试
构建后的JAR文件需进行功能测试,确认修复的bug已解决。文件命名格式为apktool_x.x.x.jar,同时需记录其MD5和SHA256哈希值:
md5sum apktool_2.2.2.jar
sha256sum apktool-2.2.2.jar
多平台上传发布
- 代码推送:
git push origin main
git push origin vx.x.x
git push bitbucket master
git push bitbucket vx.x.x
-
二进制上传:需上传至Bitbucket Downloads、GitHub Releases、备份服务器和Sonatype Maven仓库。每个平台上传后均需验证文件哈希值是否匹配。
-
发布文档:在Connor Tumbleson个人博客撰写发布文章,包含版本亮点、提交统计、变更日志和下载链接。
-
社区更新:更新XDA开发者论坛帖子、项目网站首页及下载链接,并在社交媒体发布版本信息。
aapt2二进制文件构建指南
获取修改的frameworks/base仓库
使用platform_frameworks_base仓库,分支命名遵循apktool_x格式,对应不同Android版本。
AOSP源码准备
按照Android官方文档下载AOSP源码,推荐使用部分克隆和仅同步当前分支以减少下载量:
~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android16-release --partial-clone
repo sync -c
集成修改的frameworks/base包
cd frameworks/base
git remote add origin git@github.com:iBotPeaches/platform_frameworks_base.git
git fetch origin -v
git checkout origin/apktool-{x}
构建aapt2二进制文件
- Linux/Windows:
source build/envsetup.sh
lunch aosp_cf_x86_64_only_phone-aosp_current-eng
m aapt2
strip out/host/linux-x86/bin/aapt2
strip out/host/linux-x86/bin/aapt2_64
strip out/host/windows-x86/bin/aapt2.exe
strip out/host/windows-x86/bin/aapt2_64.exe
- Mac:
export ANDROID_JAVA_HOME=/Path/To/Jdk
source build/envsetup.sh
lunch aosp_cf_x86_64_only_phone-aosp_current-eng
m aapt2
strip out/host/darwin-x86/bin/aapt2_64
验证静态构建
使用ldd(Unix)或otool -L(Mac)检查二进制文件是否存在共享依赖,确保libc++等库已静态链接。
Gradle实用技巧
- 跳过测试构建:
./gradlew build shadowJar proguard -x test
- 调试测试套件:
./gradlew test --debug-jvm
- 运行特定测试:
./gradlew :brut.apktool:apktool-lib:test --tests "*BuildAndDecodeTest"
- 调试特定测试:
./gradlew :brut.apktool:apktool-lib:test --tests "*BuildAndDecodeTest" --debug-jvm
通过遵循以上指南,开发人员可以高效地参与Apktool项目的版本发布和维护工作,确保工具的稳定性和功能完整性。项目相关源码可在brut.apktool/目录下查看。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



