Apktool Changelog

What's new in Apktool 2.9.3

Jan 21, 2024
  • [#3492] Fix #GHSA-vgwr-4w3p-xmjv (Arbitrary file writes on Windows). (Thanks Cl0udG0d)

New in Apktool 2.9.2 (Jan 5, 2024)

  • Fix #GHSA-2hqv-2xv4-5h5w (Arbitrary file writes). (Thanks 0x33c0unt)

New in Apktool 2.9.1 (Dec 6, 2023)

  • feat: Upgrade gradle to v8.4 by @ArjunaKumarMohanta in #3376
  • build(deps): bump docker/build-push-action from 4 to 5 by @dependabot in #3384
  • build(deps): bump docker/login-action from 2 to 3 by @dependabot in #3385
  • build(deps): bump docker/setup-buildx-action from 2 to 3 by @dependabot in #3386
  • refactor: support current position during chunk verbose output by @iBotPeaches in #3395
  • use apiLevel instead of forceApi when building the apk by @JoshMiers-FS in #3399
  • build: test on lts versions (including 21) by @iBotPeaches in #3381
  • build: docker fixes by @iBotPeaches in #3378
  • feat: de-dupe attribute names during styles writing by @iBotPeaches in #3404
  • Update Docker build instructions after #3363 by @jabagawee in #3407
  • build(deps): bump commons-io:commons-io from 2.14.0 to 2.15.0 by @dependabot in #3412
  • build(deps): bump commons-cli:commons-cli from 1.5.0 to 1.6.0 by @dependabot in #3413
  • build(deps): bump org.apache.commons:commons-text from 1.10.0 to 1.11.0 by @dependabot in #3414
  • Adapt null resource to be treated as reference instead of empty string. by @iBotPeaches in #3417
  • build: patch aapt2 to ignore private resources (unix/win) by @iBotPeaches in #3396
  • build: remove docker by @iBotPeaches in #3423
  • test: add test case for android:isAccessibilityTool by @iBotPeaches in #3426
  • #3427 - Treat manifest warnings as warnings by @iBotPeaches in #3429
  • build(deps): bump org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0 by @dependabot in #3443
  • build(deps): bump com.guardsquare:proguard-gradle from 7.4.0 to 7.4.1 by @dependabot in #3444
  • build(deps): bump gradle/gradle-build-action from 2.9.0 to 2.10.0 by @dependabot in #3445
  • fix: support alignment towards resTable_entry start by @iBotPeaches in #3452
  • build(deps): bump commons-io:commons-io from 2.15.0 to 2.15.1 by @dependabot in #3453
  • build(deps): bump actions/setup-java from 3 to 4 by @dependabot in #3454

New in Apktool 2.9.0 (Oct 9, 2023)

  • test: add failing/passing sparse/not-sparse test by @iBotPeaches in #3201
  • Fix LocaleNumberSystem + ConfigFlag reading by @iBotPeaches in #3205
  • Streamline decoding AndroidManifest.xml by @sv99 in #3171
  • fix: support skipping unread header sizes of ResChunk by @iBotPeaches in #3180
  • fix: support skipping entries with NO_ENTRY (-1) flag by @iBotPeaches in #3209
  • fix: handle larger axml namespace headers than known by @iBotPeaches in #3210
  • Explicit ResFileDecoder initialization in the decodeResources by @sv99 in #3211
  • build(deps): bump gradle/gradle-build-action from 2.6.0 to 2.6.1 by @dependabot in #3213
  • build(deps): bump gradle/wrapper-validation-action from 1.0.6 to 1.1.0 by @dependabot in #3214
  • Support explicit operation for when to load full resource table by @sv99 in #3217
  • fix: adjust helper files to include system property sets by @iBotPeaches in #3215
  • feat: Introduce --no-compile-sdk-metadata by @iBotPeaches in #3208
  • "--no-compile-sdk-metadata" tests. by @iBotPeaches in #3220
  • fix: end parsing if EOF is hit by @iBotPeaches in #3223
  • suppress javadoc lint warning by @sv99 in #3222
  • Remove SnakeYAML for manual YAML Parser by @sv99 in #3191
  • fix: Gradle wrapper validation trigger issue by @ArjunaKumarMohanta in #3228
  • Manual YAML Cleanup by @iBotPeaches in #3229
  • Support empty resource table. by @iBotPeaches in #3230
  • refactor: clean up style and redundancy by @IgorEisberg in #3232
  • fix: support duplicated namespaces by @iBotPeaches in #3233
  • fix: resolve missing namespace on system resources by @iBotPeaches in #3234
  • Move to XMLUnit Legacy by @iBotPeaches in #3235
  • fix: skip unknown chunks in AXML by @iBotPeaches in #3237
  • fix: skip files that attempt to break filesystem by @iBotPeaches in #3238
  • build(deps): bump gradle/gradle-build-action from 2.6.1 to 2.7.0 by @dependabot in #3241
  • Hardened String Block Parser by @iBotPeaches in #3239
  • build(deps): bump org.apache.commons:commons-lang3 from 3.12.0 to 3.13.0 by @dependabot in #3240
  • in the ApkDecoder use apkFile and unknownFiles from ApkInfo by @sv99 in #3242
  • merge ResAttrDecoder into the AXmlResourceParser by @sv99 in #3243
  • Migrate to Gradle Kotlin DSL by @iBotPeaches in #3249
  • fix: support decoding application with duplicate res entries by @iBotPeaches in #3252
  • fix: support encode styled string if length larger than offset by @iBotPeaches in #3254
  • refactor: change naming pattern of class variables in StringBlock by @iBotPeaches in #3256
  • Remove Apktool Dummys. by @iBotPeaches in #3258
  • build: upgrade to shadow build 8.1.1 by @iBotPeaches in #3259
  • Refactor logging for chunks and sparse flags. by @iBotPeaches in #3260
  • refactor: split out string block vs res table string by @iBotPeaches in #3267
  • refactor: remove unused decodeManifest function by @iBotPeaches in #3268
  • refactor: remove deprecations from test suite by @iBotPeaches in #3269
  • refactor: remove unneeded blocks/semicolons by @iBotPeaches in #3273
  • fix: bump heap size to 1g max by @iBotPeaches in #3286
  • feat: Upgrade gradle to v8.3 by @ArjunaKumarMohanta in #3275
  • build(deps): bump gradle/gradle-build-action from 2.7.0 to 2.7.1 by @dependabot in #3285
  • fix: correct path to archive during ci by @iBotPeaches in #3287
  • feat: shorten archive name to apktool-{version}.jar by @iBotPeaches in #3289
  • fix: obtain git history for proper "git describe" by @iBotPeaches in #3291
  • refactor: use proper enum (0 on both) for setMethod() by @iBotPeaches in #3297
  • Prevent poisioning mResTable if Framework is sparse. by @iBotPeaches in #3299
  • Sponsors by @iBotPeaches in #3301
  • refactor: verbose doesn't adapt handler by @iBotPeaches in #3310
  • build(deps): bump gradle/gradle-build-action from 2.7.1 to 2.8.0 by @dependabot in #3316
  • Feat: Introduce "res-mode" options. by @iBotPeaches in #3318
  • refactor: make _options lowercase by @iBotPeaches in #3324
  • build(deps): bump actions/checkout from 3 to 4 by @dependabot in #3327
  • Support Disassembly of mega old Android (M5) by @iBotPeaches in #3325
  • Reworks Attr/Array Handler by @iBotPeaches in #3326
  • fix: enforce java 1.8 compatibility with built artifacts by @iBotPeaches in #3330
  • refactor: adjust line to fit 120 length line endings in /value by @iBotPeaches in #3338
  • fix: handle duplicate res entries during a complex resource by @iBotPeaches in #3347
  • refactor: use static inner classes for AbstractDirectory by @iBotPeaches in #3348
  • refactor: suppress last unused method return by @iBotPeaches in #3349
  • build: migrate towards "libs.versions.toml" by @iBotPeaches in #3353
  • fix: support more resource-modes params by @iBotPeaches in #3354
  • build: add dependency graph support by @iBotPeaches in #3355
  • refactor: remake android-framework jar file by @iBotPeaches in #3356
  • build(deps): bump gradle/gradle-build-action from 2.8.0 to 2.9.0 by @dependabot in #3359
  • build(deps): bump commons-io:commons-io from 2.13.0 to 2.14.0 by @dependabot in #3358
  • Add Docker support by @Fmstrat in #3351
  • Added auto-build of docker image by @Fmstrat in #3361
  • build: update aapt/aapt2 with win/linux binaries by @iBotPeaches in #3360
  • Android 14 Support (Partial) by @iBotPeaches in #3206
  • Added support for PR builds on master by @Fmstrat in #3363
  • Move aapt2 to default (from aapt1) by @iBotPeaches in #3370
  • refactor: hard-code IMAGE_NAME, add some spaces by @iBotPeaches in #3371
  • fix: support COMPACT/OFFSET16 packed resources. by @iBotPeaches in #3372
  • Update Windows helper script to handle /c properly. by @maksz42 in #2973
  • Android 14 - Support for Grammatical Inflection by @iBotPeaches in #3374
  • build: restore aapt1 miui qualifiers + static by @iBotPeaches in #3379

New in Apktool 2.8.1 (Jul 23, 2023)

  • feat: Upgrade gradle to v8.2.1 by @ArjunaKumarMohanta in #3141
  • build(deps): bump gradle/gradle-build-action from 2.5.1 to 2.6.0 by @dependabot in #3151
  • fix: skip files if cleaned to empty filename by @iBotPeaches in #3166
  • fix: opt out of stricter java rules for zip64 and dot entries by @iBotPeaches in #3178
  • build: test on java20 by @iBotPeaches in #3177
  • Correct regressions towards apktool.yml generation by @iBotPeaches in #3172
  • Allows run app from gradle for debugging purposes by @sv99 in #3179
  • fix: add missing hasResources check by @IgorEisberg in #3182
  • Prevent loading from resource pool if type is not a resolveable resource by @iBotPeaches in #3187
  • style: normalize command descs and redundancy by @IgorEisberg in #3188
  • fix: crash when decompiling framework-res.apk with a tag (regression) by @IgorEisberg in #3193

New in Apktool 2.8.0 (Jul 17, 2023)

  • Restructure Testable Java versions. by @iBotPeaches in #2977
  • feat: support config flags as low as 8 bytes by @iBotPeaches in #2982
  • fix: accept empty resources.arsc by @IgorEisberg in #2998
  • fix: support 10mb apktool.yml parsing by @iBotPeaches in #3015
  • Upgrade gradle version to 8.0.2 by @ArjunaKumarMohanta in #3016
  • build: Update dependencies by @ArjunaKumarMohanta in #3020
  • build: add dependabot updates by @iBotPeaches in #3023
  • build(deps): bump com.guardsquare:proguard-gradle from 7.3.1 to 7.3.2 by @dependabot in #3032
  • fix: properly read 'XML_TYPE_OVERLAY_POLICY' by @iBotPeaches in #3035
  • feat: Upgrade gradle to v8.1 by @ArjunaKumarMohanta in #3043
  • Move to official Google smali fork by @iBotPeaches in #3051
  • feat: Upgrade gradle to v8.1.1 by @ArjunaKumarMohanta in #3054
  • Replace FileInputStream and FileOutputStream to nio Files by @sv99 in #3055
  • feat: update internal framework to API 34 (Upside Down Cake Preview) by @iBotPeaches in #3063
  • add gradle application plugin to the apktool-cli by @sv99 in #3070
  • correct always wait 15 seconds by @sv99 in #3071
  • fix: support 0_resource_name_obfuscated by @iBotPeaches in #3067
  • build(deps): bump commons-io:commons-io from 2.11.0 to 2.12.0 by @dependabot in #3072
  • build: lock gradle actions to specific versions by @iBotPeaches in #3073
  • Deprecated SnakeYAML methods by @MarcMil in #3079
  • build(deps): bump com.google.guava:guava from 31.1-jre to 32.0.0-jre by @dependabot in #3085
  • move AndrolidExceptions to the package brut.androlib.exceptions by @sv99 in #3088
  • build(deps): bump commons-io:commons-io from 2.12.0 to 2.13.0 by @dependabot in #3093
  • build(deps): bump com.google.guava:guava from 32.0.0-jre to 32.0.1-jre by @dependabot in #3092
  • Refactor into common Config object. by @iBotPeaches in #3100
  • Move build functions from Androlib to the ApkBuilder by @sv99 in #3103
  • extract class Framework from AndrolibResources by @sv99 in #3105
  • refactor class ApkDecoder by @sv99 in #3106
  • fix: handle invalid string id during namespace resolution by @iBotPeaches in #3107
  • refactor ApkDecoder - streamline decode procedure by @sv99 in #3109
  • feat: support upside-down-cake/vanilla-ice-cream sdk shorthand by @iBotPeaches in #3113
  • refactor: put gradle wrapper on its own workflow by @iBotPeaches in #3114
  • feat: update internal framework to API 34 (Vanilla Ice Cream) by @iBotPeaches in #3115
  • feat: Upgrade gradle to v8.2 by @ArjunaKumarMohanta in #3111
  • refactor: split child classes to own file for decoders by @iBotPeaches in #3116
  • build(deps): bump gradle/gradle-build-action from 2.4.2 to 2.5.1 by @dependabot in #3119
  • Extract into ApkInvoker and split into data classes. by @sv99 in #3124
  • Correct Attribute Resolution by @iBotPeaches in #3123
  • refactor: extract nextChunk() out of readLibraryType by @iBotPeaches in #3126
  • test: add assertions for unknown files / assets by @iBotPeaches in #3074
  • Patch aapt for ignoring duplicate bag items. by @iBotPeaches in #3130
  • ARSC/AXML Parser Rework by @iBotPeaches in #3131
  • Increase known config bytes to 64 by @iBotPeaches in #3133
  • fix: skip parsing if chunk end is reached within table chunk by @iBotPeaches in #3134

New in Apktool 2.7.0 (Nov 28, 2022)

  • Add SDK T (API 33) support. (Issue 2845)
  • Add SDK S v2 (API 32) support. (Issue 2776)
  • Updated internal aapt/aapt2 to (91492d8 of frameworks_base)
  • Add support for newest ResourcesTypes.h specs (policy, overlay and staged alias). (Issue 2809, Issue 2714)
  • Add updated internal aapt2/aapt2 binaries. (Issue 2787)
  • Add ability to generate generic network security config (-n / --net-sec-conf). (Issue 1622)
  • Add helpful message during built apk message to identify location of apk. (Issue 2843)
  • Add bleeding edge smali package via jitpack. (Issue 2918, Issue 2662)
  • Add build support for JDK 17. (Issue 2952)
  • Fix resource unclosed during unknown file handling. (Issue 2473) / (Thanks auermich93)
  • Fix style strings regression between aapt1/aapt2 builds. (Issue 2815) / (Thanks IgorEisberg)
  • Fix support for uses-native-library in Manifest. (Issue 2778)
  • Fix support for usesPermissionFlags in Manifest. (Issue 2789)
  • Fix windows helper script to allow spaces in path name. (Issue 2855)
  • Fix decoding application if using multiple style res types. (Issue 1719) / (Thanks tvildo)
  • Fix handling with malformed namespaces. (Issue 2615) / (Thanks ljysdfz & MyAnoneNeko)
  • Fix handling of sparse flags during resource parsing. (Issue 2887) / (Thanks iamr0s)
  • Fix crash when parsing a manifest numeric that resolves as null. (Issue 2878)
  • Fix crash when parsing HTML string with empty tag leading to invalid entry. (Issue 2900) / (Thanks MaSven)
  • Fix crash when wrongly decoding overlay policies. (Issue 2805) / (Thanks gramound)
  • Fix regression when decoding overlay policies. (Issue 2945)
  • Fix respecting of $XDG_DATA_HOME on Linux for framework files location. (Issue 2924) / (Thanks Miepee)
  • Fix storing of obfuscated resource files for properly applying proper compression on build. (Issue 2925) / (Thanks Kirlif)
  • Fix issue parsing an obfuscated resource with a improperly referenced parent resource. (Issue 2908)
  • Fix --only-main-classes winning over --no-src. (Issue 2927) / (Thanks Surendrajat)
  • Fix disassembly of files mixed between r, R and res folders. (Issue 2933)
  • Fix handling of (name removed) resources. (Issue 2940) / (Thanks Danealau)
  • Fix disassembly of raw resources for AndResGuard. (Issue 2943)
  • Fix attribute referencing to self package while using AndResGuard. (Issue 2911)
  • Revert automatic workaround for using private resources. (PR 2785, Issue 2771)
  • Upgrade CI Workflow to leverage latest actions. (Thanks Goooler)
  • Upgrade org.apache.commons:commons-text to 1.10.0 (from 1.9)
  • Upgrade org.yaml:snakeyaml to 1.32 (from 1.29)

New in Apktool 2.6.1 (Feb 27, 2022)

  • Add apktool-cli to Maven publishing. (Issue 2686)
  • Add support for signature scheme v4 (Issue 2687)
  • Add commons-lang project to remove deprecated methods from commons-io. (Issue 2713) (Thanks alsutton)
  • Upgrade to commons-cli 1.5.0 (Thanks Goooler)
  • Upgrade to guava 31.0.1 (Thanks Goooler)
  • Upgrade to jengelman.shadow 7.1.0 (Thanks Goooler)
  • Fix licenseFormat[Test/Main] to properly inject variables into license preamble.
  • Fix temp files being written into /tmp and not automatically removed. (Issue 2739)
  • Support automatic workaround for using private resources. (Issue 2637) (Thanks MrIkso)

New in Apktool 2.6.0 (Sep 2, 2021)

  • Android 12 Support (Issue 2580)
  • Published to Maven Central (Issue 2529)
  • Upgrade internal aapt/aapt2 to (7691c of frameworks_base)
  • Upgrade to baksmali/smali 2.5.2
  • Upgrade to gradle 7.2 (Thanks Goooler)
  • Upgrade to snakeyaml 1.29 (Thanks Goooler)
  • Upgrade to guava 30.1.1-jre (Thanks Goooler)
  • Upgrade to junit 4.13.2 (Thanks Goooler)
  • Upgrade to commons-lang 3.12.0 (Thanks Goooler)
  • Upgrade to commons-io 2.11.0 (Thanks Goooler)
  • Upgrade to proguard 7.1.1 (Thanks Goooler)
  • Upgrade to license.hierynomus 0.16.1 (Thanks Goooler)
  • Upgrade to jengelman.shadow 7.0.0 (Thanks Goooler)
  • Upgrade to actions/setup-java@v2 (Thanks Goooler)
  • Added .gitattributes (Thanks Goooler)
  • Added support for SDK in Development (Tiramisu, API 32?)
  • Added automatic execution of aapt/aapt2 binaries during CI process to find broken builds.
  • Added automatic ldd/otool -L execution during CI process to identify non-static “fat” aapt/aapt2 builds.
  • Added test execution on Java 15/16 (Now 8-16) during CI process.
  • Upgrade aapt2 with patches for attr-private and remove reserved pkgIds. (Thanks MrIkso)
  • Upgrade aapt1 with patches for a static binary on Mac arch.
  • Add lazy init for ResTable for optimizations. (Issue 2604) / (Thanks IgorEisberg)
  • Add automatic disassemble/assemble JAR files without specifying api level. (Issue 2605) / (Thanks IgorEisberg)
  • Changed zipslip exceptions to skip file instead of exit on failure. (Issue 2201)
  • Changed dummy resource names to APKTOOL_DUPLICATE_{Type}_{RESID} to prevent starting with numeric (Issue 2229)
  • Changed all Apache License links to https. (Issue 2635) / (Thanks Goooler)
  • Changed getHTML() processor to leverage BundleTool for handling complex string values. (Issue 2632) / (Thanks itaybia)
  • Fix decoding issue requiring specific order of chunks (library/table). (Issue 2099) / (Thanks LoyieKing)
  • Fix decoding issues with code points over > 0x10000. (Issue 2299) / (Thanks Comnir)
  • Fix decoding issues with surrogate pair emojis. (Issue 2546) / (Thanks Comnir)
  • Fix NPE when decoding to a custom non-empty root directory. (Issue 2455)
  • Fix Android 11 dex NPE due to hidden api restriction flags. (Issue 2499) / (Thanks JesusFreke)
  • Fix dummy resources being built as type resources vs item resources. (Issue 2603)
  • Fix numeric string meta-data losing context of data type. (Issue 2611) / (Thanks codylund)
  • Reduce code smell failures. (Issue 2554) / (Thanks matteobaccan)
  • Reduce code smells & correct improper opcode use for baksmali. (Issue 2604) / (Thanks IgorEisberg)
  • Reduce code smells for unused logic, unneeded casting and newer Java language features. (Issue 2636 / (Thanks Goooler)
  • Remove unused targetSdkVersion for source disassemble as value was not populated yet. (Issue 2604) / (Thanks IgorEisberg)
  • Remove duplicate workflows for 1 unified GitHub Action workflow. (Issue 2633) / (Thanks Goooler)

New in Apktool 2.5.0 (Dec 3, 2020)

  • Android 11 Support (Issue 2399, Issue 2397, Issue 2369, Issue 2167)
  • Updated baksmali/smali to version 2.4.0 (Issue 2006, Issue 1718)
  • Upgrade to gradle 6.4.1
  • Replaced TravisCI with GitHub Actions
  • Deprecate 32bit (Issue 2110, Issue 2053)
  • Added support for SDK Codename “S” (Android 12?)
  • Added support for JAVA_HOME environmental on Windows if defined. (Thanks vldmrrr)
  • Update license headers to reflect start copyright date & remove javadoc style. (Thanks friederbluemle)
  • Fixed issue with binary name clash in multi-threaded environments. (Issue 2251) Thanks chris-sharl
  • Fixed issue with resources.arsc file being compressed in framework files. (Issue 2323)
  • Fixed issue with empty files being compressed breaking applications. (Issue 2333) / (Thanks peret)
  • Fixed handling with debug mode while using aapt2. (Issue 2328, Issue 2364) / Thanks Comnir)
  • Fixed issue with handling of XML files using $ in resource name. (Issue 2386, Issue 2217, Issue 2119)
  • Fixed issue with NPE disassembling manifest with attributes with no resourceId. (Issue 2300)
  • Fixed issue with aapt2 and strict dummy properties, changing bool(false) to ref(null). (Issue 2438, Issue 1903)
  • Fixed issue with non-standard namespaces in obfuscated application. (Issue 2317, Issue 2188, Issue 1859)
  • Fixed NPE when trying to find a referent of a missing resource. (Issue 1945, Issue 2146)
  • Properly return non-zero error if invalid parameters. (Thanks Giszmo)
  • Added helpful error message when framework directory cannot be written. (Issue 2343)
  • Added testcases for classes#.dex disassembling on aapt1/aapt2. (Issue 2411)
  • Added apktool list-frameworks. (Issue 1913)
  • Support for new compileSdkVersion property for SdkInfo. (Issue 2368)

New in Apktool 2.4.1 (Dec 2, 2019)

  • Updated baksmali/smali to version 2.3.4
  • Upgrade to gradle 5.6.2
  • Added support for Android Q (10) Final. (Issue 2131)
  • Fixed build issue with JDK9+ because of jmod change. (Issue 2086)
  • Fixed security issue with unpacking assets to unintended locations via directory traversal. (Issue 2058)
  • Fixed issue with api-level command not showing in advanced documentation. (Issue 2027)
  • Fixed issue with directory creation warning when framework directory not made. (Issue 2048)
  • Fixed issue with missing mapping for Q shorthand property. (Issue 2045)
  • Fixed issue with raw qmg files not decoding correctly. (Issue 2046)
  • Fixed issue with copying assets where output directory doesn’t match initial structure. (Issue 2046)
  • Fixed issue with NPE with empty attribute content during deserialization. (Issue 2063)
  • Fixed removal of META-INF/services. (Issue 2084, Issue 2018) Thanks adibfara
  • Fixed support for “attr” bag type. (Issue 2117) Thanks visigoth
  • Fixed wiping license headers of AOSP/Android4Me files. (Issue 2093)
  • Added enhanced wrapper file for Windows. (Issue 2120) Thanks Varstahl
  • Added advance command for skipping disassemble of non-root dex packages. (Issue 2051)
  • Fixed issue with MIUI package names being renamed. (Issue 2028) Thanks IgorEisberg
  • Work-around with issue with large 9patch path spamming in uncompressed file list. (Issue 1272) Thanks IgorEisberg
  • Fixed issue with NPE on annotations (Issue 2071)
  • Fixed issue with garbled attributes (Issue 1576) Thanks brianairb
  • Fixed regression with --only-main-classes (Issue 2226) Thanks realityJie
  • Fixed 32bit binary issue with Window aapt/aapt2 builds. (Issue 2141) Thanks Furniel
  • Fixed issue with JVM not knowing bitness on Windows in some situations. (Issue 2105)
  • Fixed issue with long path commands due to recording compression. (Issue 1272) Thanks peret

New in Apktool 2.4.0 (Dec 2, 2019)

  • Java 8 (1.8) is now required.
  • Updated baksmali/smali to version 2.2.6 (Issue 1893)
  • Fixed issue with new restriction with non-empty ids.xml values. (Issue 1918) / Thanks gino247
  • Fixed issue with PlatformBuildVersion properties changing to unexpected values. (Issue 1909) / Thanks gino247
  • Fixed issue with pending v5 Gradle upgrade, by upgrading to gradle v4.10.2. (Issue 1943) / Thanks friederbluemle
  • Added no-crunch support (optional) via new parameter of nc | --no-crunch. (Issue 1849) / Thanks Novex
  • Fixed issue with xsd files decoding/building improperly between aapt1/aapt2. (Issue 1952)
  • Fixed issue with malformed chunk header when decoding “special” apks. (Issue 1976) / Thanks sebras
  • Fixed issue with Apktool stealing focus on Mac environments. (Issue 1996)
  • Fixed issue with array resources having wrong types. (Issue 1994), (Issue 1922) / Thanks vbarthel-fr
  • Fixed issue with 9patch images missing vertical or horizontal divs, by automatically creating them. (Issue 1522) / Thanks IgorEisberg
  • Fixed issue with resolving references to non-standard framework files. / Thanks IgorEisberg
  • Fixed issue with resolving SDK version codes were not explicit values. / Thanks IgorEisberg
  • Added 32bit binaries for unix & windows for aapt and aapt2.
  • Added automated tests on Windows. (Issue 1975)
  • Added ability for api-level to be passed to baksmali & smali. / Thanks IgorEisberg

New in Apktool 2.3.4 (Dec 2, 2019)

  • Android Pie Final Support (Issue 1864)
  • Fixed issue with rebuilding applications with $ or _ characters (aapt2 only). (Issue 1776)
  • Fixed process executor to wait for response (15 seconds) in the case of identifying aapt version. (Issue 1809) / Thanks sunshouxiang
  • Fixed issue with 0 size file being marked as doNotCompress. (Issue 1843) / Thanks alexeikh
  • Updated aapt2 to latest version to handle various edge cases. (Issue 1817)
  • Align the frameworks/base project for both aapt1/aapt2 builds. (Issue 1889)
  • Update to Gradle 4.10 and fix warnings with upgrade. (Issue 1884)

New in Apktool 2.3.3 (Dec 2, 2019)

  • Fixed regression with compressing default AOSP filetypes like mp3. (Issue 1769)
  • Fixed detection of aapt2 builds older than certain SDK versions. (Issue 1774)

New in Apktool 2.3.2 (Dec 2, 2019)

  • Android P Preview Support (Issue 1742)
  • Initial support for rebuilding with aapt2 binary (Issue 1689)
  • Fixed issue with application with empty resources.arsc file (Issue 1730)
  • Fixed issue with root depth kotlin folder (Issue 1703)
  • Fixed building Apktool on Windows. (Issue 1741)
  • Added warning if application is non-zero typeIdOffset is discovered.
  • Update to baksmali v2.2.2
  • Support for treating additional photo extensions as raw (m4a)
  • Prevent temporary BRUT files from clogging temp directories.

New in Apktool 2.3.1 (Dec 2, 2019)

  • Android Oreo Support (8.1) (Issue 1667)
  • Feature: Advanced --force-manifest for decoding manifest without resources. (Issue 1680) / Thanks rubenanagua
  • Fixed issue with shorthand SDK versions. (Issue 1630)
  • Fixed issue with encoding raw font files. (Issue 1662) / Thanks minsko
  • Fixed issue with rebuilding an apk that skipped resource decoding. (Issue 1634)
  • Fixed issue with large string decoding length incorrectly. (Issue 1587)
  • Fixed issue to allow repeated entry offsets to occur. (Issue 1683) / Thanks Bricnic
  • Fixed issue where non-system attributes were decoded as system in minified resource applications. (Issue 1157)

New in Apktool 2.3.0 (Oct 4, 2017)

  • The first important thing to note is that 32 bit binaries for both mac and unix have been removed. The Android Oreo build tools no longer is capable of building those and the effort required to restore that functionality is no longer worth it.
  • A new feature called (--no-assets) has been added. This parameter, if used, will skip decoding/copying asset files. This is helpful for use cases where decoding 100-300MB of assets isn't required to get access to simply the dex/resource files.
  • Changes:
  • [#1594] - Android Oreo Support
  • [#1571] - Run CI tests on OSX as well as unix.
  • [#1586] - Prevent apktool doing permission checks on unneeded directories.
  • [#1595] - Windows Unicode support for helper scripts.
  • [#1598] - Dropped support for all 32 bit binaries, except Windows.
  • [#1444] - Fixed ClassCastExceptions when producing files. (Thanks footpatch)
  • [#1611] - Fixed issue with apks that have 4 non-positional/positional nodes.
  • [#1615] - Added support for invalid targetSdkValues which are greater than max or less than min. (Thanks Jan Vidar Krey)
  • [#1605] - Added ability to skip assets decode (--no-assets).
  • [#1589] - Prevented directories being written outside of scope of decode directory.

New in Apktool 2.2.4 (Jul 31, 2017)

  • Android O Final Dev Preview Support (Issue 1520)
  • Update SnakeYAML to 1.1.8 (Android). (Issue 591)
  • Upgrade to gradle 4.0
  • Fixed issue with APKs taking longer than usual to parse resources. (Issue 1489) / Thanks MarcMil
  • Fixed issue with internal binaries not accessible in a Spring boot environment. (Issue 1543) / Thanks bingqiao
  • Add preliminary support for rebuilding applications built in aapt2 (Issue 1520)
  • Add support for resource filenames to contain $ symbols. (Issue 1532)
  • Fixed issue with apktool not closing file resources, creating locks. (Issue 1561) / Thanks MarcMil
  • Fixed issue with APKs that have INVALID TYPE CONFIG resources. (Issue 1534)
  • Fixed decoding issue with APKs with intentionally invalid characters. (Issue 1564)
  • Only exit with a 0 status code during version commands.
  • Enforce proper Apache licenses on all Java files.
  • Prevent malicious directory traversal with unknown files.
  • Prevent XML-XXE processing to prevent unintended leaking of information in a malicious setting.

New in Apktool 2.2.3 (Jul 31, 2017)

  • Android O Preview Support (Issue 1453)
  • Updated to smali 2.2.1
  • Updated internal aapt binaries to android-7.1.2_r11
  • Removed deprecated fatJar plugin in favor of ShadowJar. This turns fatJar to shadowJar on build instructions.
  • Updated gradle to v3.5. Thanks friederbluemle
  • Fix for reading length of UTF16 encoded strings. Thanks atn1969
  • Fixed issue changing default parameters on baksmali. (Issue 1481)
  • Fixed issue with apktool locking access to input files. (Issue 1160) Thanks MarcMil
  • Add support for animated vector drawables. (Issue 1456)
  • Fixes decoding brightness. (Issue 1508) Thanks phhusson
  • Prevent unknown file decode outside of archive. (Issue 1498) / Thanks mkilling
  • Fixes improper decoding of optical bounds in images. (Issue 1511) Thanks phhusson

New in Apktool 2.2.2 (Jan 25, 2017)

  • Added Android 7.1 Resources (Issue 1349)
  • Update aapt to android-7.1.1_r4.
  • Upgrade to gradle 3.3
  • Fixed NPE with styles that had a parent that didn’t exist. (Issue 1370)
  • Fixed issue with TYPE_DYNAMIC_ATTRIBUTE treating improperly which affected Nougat based applications. (Issue 1382) / Thanks xpirt
  • Fixed issue with APKs that have invalid characters. (Issue 885), (Issue 1389)
  • Fixed issue with versioning vector images during build. (Issue 1384)
  • Fixed issue with APKs that have invalid characters in filename. (Issue 1369)
  • Fixed build issue where space was in build path. (Issue 1394)
  • Fixed issue with APKs that have 3 non positional attributes. (Issue 1360)
  • Fixed issue with APKs that require non-standard pkgId. (Issue 1119), (Issue 989), (Issue 1278), (Issue 1377), (Issue 1091) / Thanks peter23
  • Fixed issue with APKs that used reserved words do and if. (Issue 1404)

New in Apktool 2.2.1 (Oct 18, 2016)

  • Android Nougat Support. (Issue 1223)
  • Fixed issue with missing attributes (using Android N Final Preview Sdk). (Issue 1243)
  • Fixed issue with new value type 8 - TYPE_DYNAMIC_ATTRIBUTE. (Issue 1317)
  • Gracefully handle APKs with additional data after TYPE chunks. (Issue 1324) / Thanks jamestut
  • Pass minSdkVersion to smali to correctly trigger edge cases where proper API needs to set. (Issue 1313) / Thanks benjamin-promon
  • Added empty-framework-dir command to cleanup framework directory to ease upgrades. (Issue 901)
  • Handle applications that trick apktool with unknown header type. (Issue 1332) / Thanks xpirt

New in Apktool 2.2.0 (Aug 8, 2016)

  • Default framework changed on Windows & Unix to prevent visible top level home directories. (Issue 1277)
  • Fixed issue where extensions would be different cases. (Issue 1258)
  • Fixed issue with APKs that had no versionCode / versionName properties. (Issue 1264)
  • Fixed issue with improper decoding of @empty value. (Issue 1270) / Thanks phhusson
  • Fixed issue with improper compression with files with multiple extensions. (Issue 1244)
  • Fixed issue with overflow for applications that have absurdly large TypeSpec indexes. (Issue 1185)
  • Fixed issue with hex values being truncated in AndroidManifest.xml. (Issue 972)
  • Replaced public domain LittleEndianReader for Google’s Guava LittleEndianDataInputStream (Apache2). (Issue 1166) / Thanks amorris
  • Fixed issue with APKs that have duplicate value names by creating dummy names. (Issue 894)
  • Adjust mac and unix scripts to force UTF8 file encoding.
  • Fixed public resource reference error when using references in android:scheme in AndroidManifest.xml. (Issue 1097)
  • Fixed issue with APKs where parent reference in styles.xml is not found. (Issue 745)
  • Updated smali/baksmali to v2.1.3:
  • Fixed upstream issue where debug comment indexes can cause out of bounds exception. (Issue 1269)
  • Migration Instructions from 2.1.1 to 2.2.0 at https://ibotpeaches.github.io/Apktool/documentation/#v2-1-1-v2-2-0.

New in Apktool 2.1.1 (May 9, 2016)

  • Fixed issue where APK would identify as wrong packageId (Issue 1220)
  • Include the AndroidManifest.xml file from the framework being installed to satisfy default aapt. (Issue 1224) / Thanks BurgerZ
  • Restore -d / --debug-mode to simply change android:debuggable in AndroidManifest.xml. (Issue 1235) / Thanks Benjamin-Dobell
  • Insert literal versionName if it is a reference to satisfy aapt. (Issue 1234) / Thanks padlar
  • Fix Samsung apks that have an unknown 4 bytes. (Issue 1131)
  • Prevent manifest rename for Adobe AIR applications. (Issue 1240)

New in Apktool 2.1.0 (Apr 22, 2016)

  • smali updated to 2.1.1.
  • [#1061] Removes SmaliDebugging.
  • [#1122] Fixed issue when a non-compressed file has no extension. (Thanks BurgerZ)
  • [#1128] Revamped internal storage of apktool.yml to be serialized objects vs entries in HashMap. (Thanks rover)
  • [#1143] Closes streams that were not properly closed.
  • [#1123] Fixes issue when @null was improperly decoded.
  • [#1145] Fixes issue when apk filename has trailing space. (Thanks BurgerZ)
  • [#1130] Fixes issue that all digits were treated as string using \ ### trick.
  • [#1146] Added additional feature to --keep-broken-res to ignore resource duplicates. (Thanks crpalmer)
  • [#1186] Performance enhancement - Stops using String.format() for MISSING_RES_SPECS. (Thanks dnault)
  • [#1170] Added support for decoding AndResGuard apps.
  • [#1166] Removed LittleEndianReader in favor for a public domain one. (Thanks chirayudesai)
  • [#1180] Adapt 9patch decoder to handle any format (Color Table, RGB, RGBA, Gray, GrayAlpha). (Thanks mattsarett)
  • Added ability for launched executables (aapt) to differentiate between output and error streams. (Thanks BurgerZ)
  • Fixed issue with non printable chars in unknown files. (Thanks ihanson)

New in Apktool 1.5.2 (Feb 4, 2013)

  • Fixed ( issue #299 ) - output smali filename errors to screen during rebuild instead of filestream
  • Only show the --aapt / -a info in verbose mode.
  • Fixed ( issue #392 ) - Don't crash out if .git folder isn't present. Use SNAPSHOT-DEV instead.
  • Fixed ( issue #67 ) - Only store compressed resources.arsc if original was compressed, otherwise STORE.
  • Moved build.gradle files to each sub-project, more organization :)
  • Fixed ( issue #394 ) - Prevented duplicated files in final jar which saved around 1.2mb.
  • Added Proguard to drop final jar size from 6.2mb to 2.6mb.
  • Fixed ( issue #395 ) - Added check for "aapt" in unit-tests.
  • Added ability to use "--frame-path" on [if|install-framework]
  • Fixed renaming of ".r.9.png" images -> ".9.png".
  • Added ability to use --version to print out Apktool version

New in Apktool 1.5.1 (Dec 29, 2012)

  • Android 4.2 support
  • Added -a / -aapt command on rebuild to specify location of aapt
  • Updated unit tests for 4.2 support
  • Closed file-handler when writing frameworks to file system.
  • Updated to Gradle 1.3
  • Properly deleted tmp files after building apk ( issue #365 )
  • Added support for renamed packages via --renamed-manifest-package ( issue #252 )
  • Option to specify framework folder ( issue #175 )
  • Prevents removal of configChanges in AndroidManifest ( issue #304 )
  • Updated snakeyaml to 1.11 to fix "unacceptable character" errors. ( issue #360 )
  • Updated smali/baksmali to v1.4.1
  • Fixed reference-array problem ( pull request #53))
  • Fixed bad spacing issue on Mac OS X (pull request #49)
  • Removed maven in favor of gradle
  • Removed Maven REPOs that were used if local projects didn’t exist.
  • Merged brut.j.dir,brut.j.common,brut.j.util & brut.apktool.smali (Fork of JesusFreke’s smali) into one repo.
  • Fix –verbose mode to actually work
  • Added SDK API 17 framework

New in Apktool 1.5.0 (Nov 20, 2012)

  • Fix for colours being decompiled with wrong hex code
  • Fix for being treated as
  • Support for Mac OS X user:home instead of /home
  • updated builtin framework to SDK API16
  • Added into apktool.yml for future aapt changes
  • Half fixed -d mode
  • Added --verbose commands to output contents from aapt (help with debugging)
  • Ignore bootclasspath on debug mode

New in Apktool 1.4.3 (Feb 16, 2012)

  • bugfix for "Multiple substitutions" error