ID types should not be encoded as a map. AAPT and AAPT2 emit IDs as boolean types. Some apps exist that for some reason have their ID types encoded as empty maps. This is the case only for the auto generated IDs from enum values in <attr> tags. Allow IDs as maps and ignore their content when processing an APK for optimizing. Also fixes an issue with expected size of the ResTable_package struct. Bug: 35861796 Test: tested against the APK in b/35861796 Change-Id: I29a19cd9777bb10bed6766cd42e35e50e098797b
4.7 KiB
4.7 KiB
Android Asset Packaging Tool 2.0 (AAPT2) release notes
Version 2.12
aapt2 optimize ...
- aapt2 optimize now understands map (complex) values under the type
id
. It ignores their contents and interprets them as a sentinelid
type. This was added to support existing apps that build with theirid
types as map values. AAPT and AAPT2 always generate a simple value for the typeID
, so it is unclear how some these apps are encoded.
Version 2.11
aapt2 link ...
- Adds the ability to specify assets directories with the -A parameter. Assets work just like assets in the original AAPT. It is not recommended to package assets with aapt2, however, since the resulting APK is post-processed by other tools anyways. Assets do not get processed by AAPT2, just copied, so incremental building gets slower if they are included early on.
Version 2.10
aapt2 link ...
- Add ability to specify package ID to compile with for regular apps (not shared or static libs). This package ID is limited to the range 0x7f-0xff inclusive. Specified with the --package-id flag.
- Fixed issue with resources being stripped for locales and other configuration.
- Fixed issue with escaping strings in XML resources.
Version 2.9
aapt2 link ...
- Added sparse resource type encoding, which encodes resource entries that are sparse with
a binary search tree representation. Only available when minSdkVersion >= API O or resource
qualifier of resource types is >= v26 (or whatever API level O becomes). Enabled with
--enable-sparse-encoding
flag.
aapt2 optimize ...
- Adds an optimization pass that supports:
- stripping out any density assets that do not match the
--target-densities
list of densities. - resource deduping when the resources are dominated and identical (already happens during
link
phase but this covers apps built withaapt
). - new sparse resource type encoding with the
--enable-sparse-encoding
flag if possible (minSdkVersion >= O or resource qualifier >= v26).
- stripping out any density assets that do not match the
Version 2.8
aapt2 link ...
- Adds shared library support. Build a shared library with the
--shared-lib
flag. Build a client of a shared library by simply including it via-I
.
Version 2.7
aapt2 compile ...
- Fixes bug where psuedolocalization auto-translated strings marked 'translateable="false"'.
Version 2.6
aapt2
- Support legacy
configVarying
resource type. - Support
<bag>
tag and treat as<style>
regardless of type. - Add
<feature-group>
manifest tag verification. - Add
<meta-data>
tag support to<instrumentation>
.
Version 2.5
aapt2 link ...
- Transition XML versioning: Adds a new flag
--no-version-transitions
to disable automatic versioning of Transition XML resources.
Version 2.4
aapt2 link ...
- Supports
<meta-data>
tags in<manifest>
.
Version 2.3
aapt2
- Support new
font
resource type.
Version 2.2
aapt2 compile ...
- Added support for inline complex XML resources. See https://developer.android.com/guide/topics/resources/complex-xml-resources.html
aapt link ...
- Duplicate resource filtering: removes duplicate resources in dominated configurations
that are always identical when selected at runtime. This can be disabled with
--no-resource-deduping
.
Version 2.1
aapt2 link ...
- Configuration Split APK support: supports splitting resources that match a set of
configurations to a separate APK which can be loaded alongside the base APK on
API 21+ devices. This is done using the flag
--split path/to/split.apk:<config1>[,<config2>,...]
. - SDK version resource filtering: Resources with an SDK version qualifier that is unreachable at runtime due to the minimum SDK level declared by the AndroidManifest.xml are stripped.
Version 2.0
aapt2 compile ...
- Pseudo-localization: generates pseudolocalized versions of default strings when the
--pseudo-localize
option is specified. - Legacy mode: treats some class of errors as warnings in order to be more compatible
with AAPT when
--legacy
is specified. - Compile directory: treats the input file as a directory when
--dir
is specified. This will emit a zip of compiled files, one for each file in the directory. The directory must follow the Android resource directory structure (res/values-[qualifiers]/file.ext).
aapt2 link ...
- Automatic attribute versioning: adds version qualifiers to resources that use attributes
introduced in a later SDK level. This can be disabled with
--no-auto-version
. - Min SDK resource filtering: removes resources that can't possibly be selected at runtime due to the application's minimum supported SDK level.