Ramblings of a Tampa engineer

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.

đź’ˇ
Official Apktool v3.0.0 release post on apktool.org

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-level option for automatic detection. (Thanks IgorEisberg)
  • [#3885] Support disassembling resources not in res|r|R folders. (Thanks IgorEisberg)
  • [#3888] Support new BinaryResourceParser, ResChunkPullParser and BinaryDataInputStream for modern disassembly for resources. (Thanks IgorEisberg)
  • [#3885] Change all short commands to a single character to enable multiple commands like -vfo for -v -f -o. (Thanks IgorEisberg)
  • [#3885] Change efd|empty-framework-dir to cf|clean-frameworks. (Thanks IgorEisberg)
  • [#3885] Change packageInfo to resourcesInfo in apktool.yml representing all transformation options. (Thanks IgorEisberg)
  • [#3885] Change hex integer values to preferred compact form. (0x20 instead of 0x00000020) (Thanks IgorEisberg)
  • [#4001] Change temporary files to be prefixed with binary name (ie aapt2). (Thanks jpstotz)
  • [#4041] Change default resolve mode to KEEP (DEFAULT in v3) instead of REMOVE. (Thanks IgorEisberg)
  • [#4044] Change resolve modes to default, greedy and lazy to improve serialization. (Thanks IgorEisberg)
  • [#3885] Fix all <item> tags to properly reference their respective resource types. (Thanks IgorEisberg)
  • [#3885] Fix usage of dp instead of dip as a more modern development standard. (Thanks IgorEisberg)
  • [#3885] Fix usage of match_parent instead of fill_parent as 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 guava to 33.5.0-jre.
  • [#4025] Upgrade commons-cli to 1.11.0.
  • [#4021] Upgrade commons-io to 2.21.0.
  • [#4038] Upgrade commons-text to 1.15.0.
  • [#3998, #4026] Upgrade commons-lang3 to 3.20.0.
  • [#4003, #4080] Upgrade gradle/actions to 5.0.1.
  • [#4011] Upgrade github/codeql-action to v4.
  • [#4017] Upgrade xmlunit-legacy to 2.11.0.
  • [#4018, #4050] Upgrade actions/upload-artifact to v6.
  • [#4033] Upgrade actions/checkout to v6.
  • [#4031, #4064, #4090] Upgrade r8 to 9.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

You’ve successfully subscribed to Connor Tumbleson
Welcome back! You’ve successfully signed in.
Great! You’ve successfully signed up.
Success! Your email is updated.
Your link has expired
Success! Check your email for magic link to sign-in.