Adam Lesinski | 0368ebf | 2016-07-26 12:55:51 -0700 | [diff] [blame] | 1 | # Android Asset Packaging Tool 2.0 (AAPT2) release notes |
| 2 | |
Adam Lesinski | 3b84124 | 2017-07-25 17:15:42 -0700 | [diff] [blame] | 3 | ## Version 2.19 |
| 4 | - Added navigation resource type. |
Adam Lesinski | 3420eed | 2017-09-13 14:46:00 -0700 | [diff] [blame] | 5 | - Fixed issue with resource deduplication. (bug 64397629) |
| 6 | - Added a daemon mode for issuing commands. This is invoked with `aapt2 daemon`. |
| 7 | Command line arguments are separated by newlines, with an empty line signalling the |
| 8 | end of a command. Sending `EOF (Ctrl+D)` to the daemon will exit. |
| 9 | - Fixed an issue where multiple permissions defined in AndroidManifest.xml would generate |
| 10 | conflicting definitions for the same Java constant in Manifest.java. Changed the implementation |
| 11 | to match that of `aapt`, which will take the last definition as the sole definition. |
| 12 | A warning is logged if such a scenario occurs. (bug 64472942) |
| 13 | - Made improvements to handling of paths on Windows. This should resolve a lot of issues with |
| 14 | Unicode paths. (bug 62336414, 63830502) |
Adam Lesinski | 3b84124 | 2017-07-25 17:15:42 -0700 | [diff] [blame] | 15 | |
Adam Lesinski | 3124e7c | 2017-06-13 16:03:55 -0700 | [diff] [blame] | 16 | ## Version 2.18 |
| 17 | ### `aapt2 ...` |
| 18 | - Fixed issue where enum values were interpreted as integers and range checked. (bug 62358540) |
Adam Lesinski | 8a3bffe | 2017-06-27 12:27:43 -0700 | [diff] [blame] | 19 | - Fixed issue where ints and floats with trailing whitespace would not be parsed. (bug 62902869) |
Adam Lesinski | 0d81f70 | 2017-06-27 15:51:09 -0700 | [diff] [blame] | 20 | - Fixed issue where `--custom-package` was not honored when writing Manifest.java. (bug 62826426) |
Adam Lesinski | 87f1e0f | 2017-06-27 16:21:58 -0700 | [diff] [blame] | 21 | - Add `<key-sets>` and its nested tags to the allowed set of XML tags in AndroidManifest.xml. |
| 22 | (bug 62839863) |
Adam Lesinski | f762df2 | 2017-06-26 16:39:03 -0700 | [diff] [blame] | 23 | - Fixed issue where Java classes referenced from fragments and menus were not added to |
| 24 | the set of Proguard keep rules. (bug 62216174) |
Adam Lesinski | 549e437 | 2017-06-27 18:39:07 -0700 | [diff] [blame] | 25 | - Fixed issue where escaped unicode characters would generate malformed UTF-8. (bug 62839202) |
Adam Lesinski | fba0cf2 | 2017-06-29 17:53:36 -0700 | [diff] [blame] | 26 | - Fixed issue where apostrophes or quotes used in XML attribute values were ignored. |
| 27 | (bug 62840406, 62840718) |
Adam Lesinski | 3124e7c | 2017-06-13 16:03:55 -0700 | [diff] [blame] | 28 | |
Adam Lesinski | 2354b56 | 2017-05-26 16:31:38 -0700 | [diff] [blame] | 29 | ## Version 2.17 |
Adam Lesinski | 48a7659 | 2017-06-08 11:10:18 -0700 | [diff] [blame] | 30 | ### `aapt2 ...` |
| 31 | - Fixed issue where symlinks would not be followed when compiling PNGs. (bug 62144459) |
Adam Lesinski | 4488f1c | 2017-05-26 17:33:38 -0700 | [diff] [blame] | 32 | - Fixed issue where overlays that declared `<add-resource>` did not compile. (bug 38355988) |
Adam Lesinski | 48a7659 | 2017-06-08 11:10:18 -0700 | [diff] [blame] | 33 | - Fixed issue where `%n` in a string resource was interpreted as a format argument. (bug 37132275) |
| 34 | - Allow empty resources to compile, giving them a value of `""` or `@null`, depending on the |
| 35 | accepted formats. (bug 38425050) |
| 36 | - Resources declared via `<item>` with no format attribute were changed to accept all |
| 37 | resource types. (bug 62260121) |
| 38 | - Allow `<layout>` element under `<activity>` in AndroidManifest.xml. (bug 62189611) |
| 39 | - Fix issue where `--no-version-vector` did not apply to `pathInterpolator` and `objectAnimator`. |
| 40 | (bug 62211148) |
| 41 | - Fix issue where overlaid `<style>` would not be merged, and would replace the original resource |
| 42 | instead. This fix brings behavior in-line with AAPT. (bug 38355988) |
Adam Lesinski | 2354b56 | 2017-05-26 16:31:38 -0700 | [diff] [blame] | 43 | |
Adam Lesinski | c744ae8 | 2017-05-17 19:28:38 -0700 | [diff] [blame] | 44 | ## Version 2.16 |
| 45 | ### `aapt2 link ...` |
| 46 | - Versioning of XML files is more intelligent, using a small set of rules to degrade |
| 47 | specific newer attributes to backwards compatible versions of them. |
| 48 | Ex: `android:paddingHorizontal` degrades to `android:paddingLeft` and `android:paddingRight`. |
| 49 | |
Adam Lesinski | 28e6c0b | 2017-05-10 14:56:36 -0700 | [diff] [blame] | 50 | ## Version 2.15 |
| 51 | ### `aapt2 compile ...` |
| 52 | - Add `--no-crunch` option to avoid processing PNGs during the compile phase. Note that this |
| 53 | shouldn't be used as a performance optimization, as once the PNG is processed, its result is |
| 54 | cached for incremental linking. This should only be used if the developer has specially |
| 55 | pre-processed the PNG and wants it byte-for-byte identical to the input. |
| 56 | NOTE: 9-patches will not be processed correctly with this flag set. |
| 57 | |
Adam Lesinski | 1e4b0e5 | 2017-04-27 15:01:10 -0700 | [diff] [blame] | 58 | ## Version 2.14 |
| 59 | ### `aapt2 link ...` |
| 60 | - If an app is building with a minSdkVersion < 26 and a --package-id XX where XX > 7F, aapt2 |
| 61 | will automatically convert any 'id' resource references from the resource ID 0xPPTTEEEE to |
| 62 | 0x7FPPEEEE. |
| 63 | - This is done to workaround a bug in previous versions of the platform that would validate |
| 64 | a resource ID by assuming it is larger than 0. In Java, a resource ID with package ID greater |
| 65 | than 0x7F is interpreted as a negative number, causing valid feature split IDs like 0x80010000 |
| 66 | to fail the check. |
| 67 | - '@id/foo' resources are just sentinel values and do not actually need to resolve to anything. |
| 68 | Rewriting these resource IDs to use the package ID 7F while maintaining their definitions under |
| 69 | the original package ID is safe. Collisions against the base APK are checked to ensure these |
| 70 | rewritten IDs to not overlap with the base. |
| 71 | |
Adam Lesinski | d0f492d | 2017-04-03 18:12:45 -0700 | [diff] [blame] | 72 | ## Version 2.13 |
| 73 | ### `aapt2 optimize ...` |
| 74 | - aapt2 optimize can now split a binary APK with the same --split parameters as the link |
| 75 | phase. |
| 76 | |
Adam Lesinski | 33af6c7 | 2017-03-29 13:00:35 -0700 | [diff] [blame] | 77 | ## Version 2.12 |
| 78 | ### `aapt2 optimize ...` |
| 79 | - aapt2 optimize now understands map (complex) values under the type `id`. It ignores their |
| 80 | contents and interprets them as a sentinel `id` type. This was added to support existing |
| 81 | apps that build with their `id` types as map values. |
| 82 | AAPT and AAPT2 always generate a simple value for the type `ID`, so it is unclear how some |
| 83 | these apps are encoded. |
| 84 | |
Adam Lesinski | 06460ef | 2017-03-14 18:52:13 -0700 | [diff] [blame] | 85 | ## Version 2.11 |
| 86 | ### `aapt2 link ...` |
| 87 | - Adds the ability to specify assets directories with the -A parameter. Assets work just like |
| 88 | assets in the original AAPT. It is not recommended to package assets with aapt2, however, |
| 89 | since the resulting APK is post-processed by other tools anyways. Assets do not get processed |
| 90 | by AAPT2, just copied, so incremental building gets slower if they are included early on. |
| 91 | |
Adam Lesinski | f34b6f4 | 2017-03-03 16:33:26 -0800 | [diff] [blame] | 92 | ## Version 2.10 |
| 93 | ### `aapt2 link ...` |
| 94 | - Add ability to specify package ID to compile with for regular apps (not shared or static libs). |
| 95 | This package ID is limited to the range 0x7f-0xff inclusive. Specified with the --package-id |
| 96 | flag. |
| 97 | - Fixed issue with <plurals> resources being stripped for locales and other configuration. |
| 98 | - Fixed issue with escaping strings in XML resources. |
| 99 | |
Adam Lesinski | d48944a | 2017-02-21 14:22:30 -0800 | [diff] [blame] | 100 | ## Version 2.9 |
| 101 | ### `aapt2 link ...` |
| 102 | - Added sparse resource type encoding, which encodes resource entries that are sparse with |
| 103 | a binary search tree representation. Only available when minSdkVersion >= API O or resource |
| 104 | qualifier of resource types is >= v26 (or whatever API level O becomes). Enabled with |
| 105 | `--enable-sparse-encoding` flag. |
| 106 | ### `aapt2 optimize ...` |
| 107 | - Adds an optimization pass that supports: |
| 108 | - stripping out any density assets that do not match the `--target-densities` list of |
| 109 | densities. |
| 110 | - resource deduping when the resources are dominated and identical (already happens during |
| 111 | `link` phase but this covers apps built with `aapt`). |
| 112 | - new sparse resource type encoding with the `--enable-sparse-encoding` flag if possible |
| 113 | (minSdkVersion >= O or resource qualifier >= v26). |
| 114 | |
Adam Lesinski | ceb9b2f | 2017-02-16 12:05:42 -0800 | [diff] [blame] | 115 | ## Version 2.8 |
| 116 | ### `aapt2 link ...` |
| 117 | - Adds shared library support. Build a shared library with the `--shared-lib` flag. |
| 118 | Build a client of a shared library by simply including it via `-I`. |
| 119 | |
Adam Lesinski | 7542162 | 2017-01-06 15:20:04 -0800 | [diff] [blame] | 120 | ## Version 2.7 |
Adam Lesinski | ceb9b2f | 2017-02-16 12:05:42 -0800 | [diff] [blame] | 121 | ### `aapt2 compile ...` |
Adam Lesinski | 7542162 | 2017-01-06 15:20:04 -0800 | [diff] [blame] | 122 | - Fixes bug where psuedolocalization auto-translated strings marked 'translateable="false"'. |
| 123 | |
Adam Lesinski | 86d67df | 2017-01-31 13:47:27 -0800 | [diff] [blame] | 124 | ## Version 2.6 |
| 125 | ### `aapt2` |
| 126 | - Support legacy `configVarying` resource type. |
| 127 | - Support `<bag>` tag and treat as `<style>` regardless of type. |
| 128 | - Add `<feature-group>` manifest tag verification. |
| 129 | - Add `<meta-data>` tag support to `<instrumentation>`. |
| 130 | |
Yuichi Araki | 4d35cca | 2017-01-18 20:42:17 +0900 | [diff] [blame] | 131 | ## Version 2.5 |
| 132 | ### `aapt2 link ...` |
| 133 | - Transition XML versioning: Adds a new flag `--no-version-transitions` to disable automatic |
| 134 | versioning of Transition XML resources. |
| 135 | |
Adam Lesinski | 5119e51 | 2016-12-05 19:48:20 -0800 | [diff] [blame] | 136 | ## Version 2.4 |
| 137 | ### `aapt2 link ...` |
| 138 | - Supports `<meta-data>` tags in `<manifest>`. |
| 139 | |
Adam Lesinski | c0c3663 | 2016-10-19 18:37:53 -0700 | [diff] [blame] | 140 | ## Version 2.3 |
| 141 | ### `aapt2` |
| 142 | - Support new `font` resource type. |
| 143 | |
Adam Lesinski | 5cb0530 | 2016-09-06 17:34:06 -0700 | [diff] [blame] | 144 | ## Version 2.2 |
| 145 | ### `aapt2 compile ...` |
| 146 | - Added support for inline complex XML resources. See |
| 147 | https://developer.android.com/guide/topics/resources/complex-xml-resources.html |
Alexandria Cornwall | 77788eb | 2016-09-06 15:16:49 -0700 | [diff] [blame] | 148 | ### `aapt link ...` |
| 149 | - Duplicate resource filtering: removes duplicate resources in dominated configurations |
| 150 | that are always identical when selected at runtime. This can be disabled with |
| 151 | `--no-resource-deduping`. |
Adam Lesinski | 5cb0530 | 2016-09-06 17:34:06 -0700 | [diff] [blame] | 152 | |
Adam Lesinski | 36c73a5 | 2016-08-11 13:39:24 -0700 | [diff] [blame] | 153 | ## Version 2.1 |
| 154 | ### `aapt2 link ...` |
| 155 | - Configuration Split APK support: supports splitting resources that match a set of |
| 156 | configurations to a separate APK which can be loaded alongside the base APK on |
| 157 | API 21+ devices. This is done using the flag |
| 158 | `--split path/to/split.apk:<config1>[,<config2>,...]`. |
| 159 | - SDK version resource filtering: Resources with an SDK version qualifier that is unreachable |
| 160 | at runtime due to the minimum SDK level declared by the AndroidManifest.xml are stripped. |
| 161 | |
Adam Lesinski | 0368ebf | 2016-07-26 12:55:51 -0700 | [diff] [blame] | 162 | ## Version 2.0 |
| 163 | ### `aapt2 compile ...` |
| 164 | - Pseudo-localization: generates pseudolocalized versions of default strings when the |
| 165 | `--pseudo-localize` option is specified. |
| 166 | - Legacy mode: treats some class of errors as warnings in order to be more compatible |
| 167 | with AAPT when `--legacy` is specified. |
| 168 | - Compile directory: treats the input file as a directory when `--dir` is |
| 169 | specified. This will emit a zip of compiled files, one for each file in the directory. |
| 170 | The directory must follow the Android resource directory structure |
| 171 | (res/values-[qualifiers]/file.ext). |
| 172 | |
| 173 | ### `aapt2 link ...` |
| 174 | - Automatic attribute versioning: adds version qualifiers to resources that use attributes |
| 175 | introduced in a later SDK level. This can be disabled with `--no-auto-version`. |
| 176 | - Min SDK resource filtering: removes resources that can't possibly be selected at runtime due |
| 177 | to the application's minimum supported SDK level. |