Apktool v3.0.0 Released

Apktool v3.0.0 has been released! A major release dropping support for aapt1 and 32 bit support while re-engineering CLI parameters and heavily rewriting the internals of Apktool for easier long-term maintenance.
This time in honor with the project starting to live without my personal blog - the majority of details will be on the official release post on apktool.org instead of this blog. This blog will go into more about the meta details of maintaining a large open source project for over a decade.
As 15 years of maintaining Apktool approached I realized I don't really develop in Java anymore. I don't translate MIUI roms as a hobby and outside of a small bit of work auditing applications on Android - I don't really work in Android anymore. It wasn't fair to Apktool as my focus was pulled to OpenAI for PHP or fastlane recently.
So knowing Igor had been giving pull requests to Apktool for years it was an easy ask to grant him access to the repository with a maintainer role. So Igor helped majorly in designing and stabilizing Apktool v3 as well as reviewing support issues and feedback. As I hacked it to pieces over the past decade fixing crashes here and there it was great to have someone review the code as a whole and iterate with a design in their mind.
I don't yet have a fully automated Apktool release process as the signing part is still hooked my private GPG key and thus must be done locally. This means all releases are only possible by myself at this time. I've been researching how other Java applications in the open source space sign and publish to Maven in a purely automated fashion. The downside right now is any process that does work doesn't look like an amount of scripts and tooling I want to maintain alongside Apktool.
So I'm happy Apktool continues to live on with modernization and enhancements with myself a bit more in the shadows than normal. Igor knows the Android space better than me and is rapidly improving Apktool more-so than I could.
Sponsors
I launched GitHub Sponsors to help provide another alternative for folks showing appreciation. I want to remind folks of two companies that continue to hold a monthly donation for the project.
- Emerge Tools (now Sentry) came online to sponsor the tool.
- Sourcetoad (self employer) additionally joined to sponsor (as well as a few other projects).
This release had 49 commits by 4 people & 1 robot.
- Igor Eisberg - 23 commits
- Dependabot (Robot) - 15 commits
- Connor Tumbleson - 9 commits
- jpstotz - 1 commit
- salvogiangri - 1 commit
Changes since 2.12
- [#3820] Drop support for aapt1. (Thanks IgorEisberg)
- [#3885] Drop support for 32-bit platforms. (Thanks IgorEisberg)
- [#3885] Drop short flags for any advanced options. (Thanks IgorEisberg)
- [#3885] Drop
-api / --api-leveloption for automatic detection. (Thanks IgorEisberg) - [#3885] Support disassembling resources not in
res|r|Rfolders. (Thanks IgorEisberg) - [#3888] Support new
BinaryResourceParser,ResChunkPullParserandBinaryDataInputStreamfor modern disassembly for resources. (Thanks IgorEisberg) - [#3885] Change all short commands to a single character to enable multiple commands like
-vfofor-v -f -o. (Thanks IgorEisberg) - [#3885] Change
efd|empty-framework-dirtocf|clean-frameworks. (Thanks IgorEisberg) - [#3885] Change
packageInfotoresourcesInfoinapktool.ymlrepresenting all transformation options. (Thanks IgorEisberg) - [#3885] Change hex integer values to preferred compact form. (
0x20instead of0x00000020) (Thanks IgorEisberg) - [#4001] Change temporary files to be prefixed with binary name (ie aapt2). (Thanks jpstotz)
- [#4041] Change default resolve mode to
KEEP(DEFAULTin v3) instead ofREMOVE. (Thanks IgorEisberg) - [#4044] Change resolve modes to
default,greedyandlazyto improve serialization. (Thanks IgorEisberg) - [#3885] Fix all
<item>tags to properly reference their respective resource types. (Thanks IgorEisberg) - [#3885] Fix usage of
dpinstead ofdipas a more modern development standard. (Thanks IgorEisberg) - [#3885] Fix usage of
match_parentinstead offill_parentas a more modern development standard. (Thanks IgorEisberg) - [#3885] Fix color values to represent the format they were in the original apk. (Thanks IgorEisberg)
- [#3994] Fix odd integer encoding behavior as a string. (Thanks IgorEisberg)
- [#3994] Fix support for feature flags prefixed with exclamation mark. (Thanks IgorEisberg)
- [#3997] Fix building on headless CI systems.
- [#4041] Fix entry spec naming to account for malicious or invalid spec names. (Thanks IgorEisberg)
- [#4041] Fix injection of entries to account for stripped apks. (Thanks IgorEisberg)
- [#4059] Fix handling of styled strings that fail valid checks. (Thanks IgorEisberg)
- [#3767, #3943] Swap to google/smali built from source due to upstream abandonment.
- [#3810] Fix assumption of resources and move to source of truth of
resources.arsc. (Thanks IgorEisberg) - [#3905] Fix maven pipeline for modern Sonatype publishing.
- [#3990] Upgrade
guavato33.5.0-jre. - [#4025] Upgrade
commons-clito1.11.0. - [#4021] Upgrade
commons-ioto2.21.0. - [#4038] Upgrade
commons-textto1.15.0. - [#3998, #4026] Upgrade
commons-lang3to3.20.0. - [#4003, #4080] Upgrade
gradle/actionsto5.0.1. - [#4011] Upgrade
github/codeql-actiontov4. - [#4017] Upgrade
xmlunit-legacyto2.11.0. - [#4018, #4050] Upgrade
actions/upload-artifacttov6. - [#4033] Upgrade
actions/checkouttov6. - [#4031, #4064, #4090] Upgrade
r8to9.0.32.
Notes
- This is the first release of 3.0.0 - while we tested it heavily internally we may have a regression somewhere. v3.0.1 will follow quickly in case of an issue.
Download
- Apktool 3.0.0
7cdebcc6c9248e62fdceb8e96abda99e(md5)06fed946b272eb777fdb6dc0bbef0e13e0d393144ee367a510acba18b41597b9(sha256)- Rename to
apktool.jarand follow the Instruction Guide if you need help.
- 3.0.0 Doc Site Post
