History log of /frameworks/base/tools/aapt2/ResourceParser.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
90919978e7ccf7dc25622e9d039a7e87ebe7ba11 02-Jun-2017 Adam Lesinski <adamlesinski@google.com> DO NOT MERGE: AAPT2: Allow undefined resources (placeholders)

A resource defined like so:

<item type="drawable" name="foo" />

should be assigned the value @null.

The only exception is for <string> resources, which are given the
empty string value (since <string></string> is ambiguous). The decision
to use "" is based off the fact that old AAPT used to assign "" to all
undefined resources, even non-string ones.

Bug: 38425050
Test: make aapt2_tests
Change-Id: Ib3e0f6f83d16ddd8b279c9fd44a07a37867b85e9
/frameworks/base/tools/aapt2/ResourceParser.cpp
e597d68d33c76c2b830f5497ed4ba74c5193a056 02-Jun-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow any value type for <item> without format attr

TO bring AAPT2 behavior in-line with AAPT, <item> has a default
format of "any", and only becomes restricted with an explicit format
attribute.

Bug: 62260121
Test: make aapt2_tests
Change-Id: Ife416f520e6c2710bb30e3ba3f2d4463794bfa06
/frameworks/base/tools/aapt2/ResourceParser.cpp
4488f1c74a0f7df09f2b201f7caa228d729e8389 27-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix <add-resource> tag for overlays

Bug: 38355988
Test: make aapt2_tests
Change-Id: Iea8887f55f8ceb2c15bd963405fd132916173c0c
/frameworks/base/tools/aapt2/ResourceParser.cpp
d5fd76a2ff78400505ade936fc36e707d69ecf72 16-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Respect format attr in <array> resource

Bug: 38152130
Test: make aapt2_tests
Change-Id: I84f352afb1a8fd2f329354f789aaa36c5ef88e47
/frameworks/base/tools/aapt2/ResourceParser.cpp
8049f3da712ea9c3154b57ce2276c97e749d1f2c 01-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix pseudolocalization (again)

Pseudolocalization didn't properly handle spans in
strings like "<small><small>Hello</small></small>".

The spans would be identical and when doing range checks
only one of them would be updated.

Switched to a more robust way of extracting the relevant
chunks of a styled string. This uses a stack, which is more
in line with the real representation in XML.

Bug: 34088357
Test: make aapt2_tests
Change-Id: Ia4e4501713e688c96a89e26e4e2b1384f4cd3889
/frameworks/base/tools/aapt2/ResourceParser.cpp
ceb9b2f80f853059233cdd29057f39a5960a74ae 16-Feb-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Shared library support

Test: make aapt2_tests
Change-Id: I98dddf1367e6c0ac425bb20be46e6ff05f4f2f45
/frameworks/base/tools/aapt2/ResourceParser.cpp
7542162cb1b1fd2ce8a26dd7f3fedc8de8160d38 07-Jan-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix pseudolocalization to respect <xliff:g>

The XLIFF 'g' tag specifies content that should NOT be translated.
AAPT2's pseudolocalization process should respect it.

Bug:34064599
Test: make libandroidfw_tests
Change-Id: Ice437d7f0ff246730ee04896fd035e2d846148fb
/frameworks/base/tools/aapt2/ResourceParser.cpp
86d67df8d57b9537666f9b54a9ca563779a2288b 31-Jan-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Support CtsContentTestCases build

- Add <feature-group> to ManifestFixer.
- Support <meta-data> in <instrumentation>
- Add support for <bag> and type="configVarying". Some CTS tests use this
old notation, we need to support it (even though configVarying isn't
anything supported by the framework convention).

Change-Id: I6946fa633ce513ea8437c1496db883cf27dcf6de
Test: make aapt2_tests
/frameworks/base/tools/aapt2/ResourceParser.cpp
d5083f6f6b9bc76bbe64052bcec639eee752a321 17-Jan-2017 Adam Lesinski <adamlesinski@google.com> Move StringPiece to libandroidfw

libandroidfw needs to make use of StringPiece, so
move it to libandroidfw and update all code referencing
StringPiece in aapt2.

Test: make libandroidfw_tests libaapt2_tests
Change-Id: I68d7f0fc7c651b048d9d1f5e7971f10ef5349fa1
/frameworks/base/tools/aapt2/ResourceParser.cpp
ce5e56e243d262a9b65459c3bd0bb9eaadd40628 22-Oct-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Rename to match new style

Use Google3 naming style to match new
projects' and open source google projects' style.

Preferred to do this in a massive CL so as to avoid
style inconsistencies that plague legacy code bases.
This is a relatively NEW code base, may as well keep
it up to date.

Test: name/style refactor - existing tests pass
Change-Id: Ie80ecb78d46ec53efdfca2336bb57d96cbb7fb87
/frameworks/base/tools/aapt2/ResourceParser.cpp
b54ef10f55ab9f11fdc73b0436b708e518fb5029 21-Oct-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Ensure string pool ordering is compact

Keep styledstrings at the beginning of the StringPool
to reduce the padding in the StyledString array.

Bug:32336940
Test: manual
Change-Id: Iec820c21a54daac40ecc3b2f87517a0f1efc9d3d
/frameworks/base/tools/aapt2/ResourceParser.cpp
cacb28f2d60858106e2819cc7d95a65e8bda890b 19-Oct-2016 Adam Lesinski <adamlesinski@google.com> Use Google3 style guide with .clang-format

Test: style change only, builds ok
Change-Id: I885180e24cb2e7b58cfb4967c3bcb40058ce4078
/frameworks/base/tools/aapt2/ResourceParser.cpp
8c3f31f022f7e094fd227ef0c2987e0846cb3e43 07-Sep-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix issue with styled string indices

Styled strings use spans to denote which part
is styled (<b>, <i>, etc). Spans are simply a range
of indices into the original string.

In Java, we use String and its internal representation, meaning
we must encode the indices using UTF16 lengths.

When the internal AAPT2 representation of strings switched to UTF8,
the indices also began to index into the UTF8 string.

This change reverts the indices to use UTF16 lengths.

Bug:31170115
Change-Id: I07b8b5b67d2542c7e0a855b601cdbd3ac4ebffb0
/frameworks/base/tools/aapt2/ResourceParser.cpp
5eeaaddffd23d8d85aeb321e3ceea626e42cf9de 25-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add Inline Complex XML support

See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html

Change-Id: I8274c85e25cabf90423141c228697e873167d136
/frameworks/base/tools/aapt2/ResourceParser.cpp
36c73a595910e96f3552f938eeb81d46356067a1 11-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Expose split support to command line

Bug:30445078
Change-Id: If4b8530dba71b9059b8e62c04757da99c1119d22
/frameworks/base/tools/aapt2/ResourceParser.cpp
bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52 02-Jun-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add support to specify stable IDs

The --stable-ids flag allows the user to specify a file containing
a list of resource name and resource ID pairs in the form of:

package:type/name = 0xPPTTEEEE

This assigns the given resource the specified ID. It helps ensure
that when adding or removing resources, IDs are assigned in a stable
fashion.

If a package, type, or name is not found, no error or warning is
raised.

Change-Id: Ibc2f4e05cc924be255fedd862d835cb5b18d7584
/frameworks/base/tools/aapt2/ResourceParser.cpp
d0f116b619feede0cfdb647157ce5ab4d50a1c46 09-Jul-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Remove usage of u16string

For legacy reasons, we kept around the use of UTF-16 internally
in AAPT2. We don't need this and this CL removes all instances of
std::u16string and StringPiece16. The only places still needed
are when interacting with the ResTable APIs that only operate in
UTF16.

Change-Id: I492475b84bb9014fa13bf992cff447ee7a5fe588
/frameworks/base/tools/aapt2/ResourceParser.cpp
458b877488c12ea4336d8fc00a95d9c0298bd6d0 25-Apr-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add diff command

Adds the diff command and various small fixes to issues
discovered when diffing old AAPT built APKs with new AAPT2
built APKS.

Bug:22775504
Change-Id: I682a7fe1cf4b3efa7cbd5d18b333cf2d1046fe1b
/frameworks/base/tools/aapt2/ResourceParser.cpp
7656554f91b40bc93bf94c89afcad4a9a8ced884 11-Mar-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add descriptions of Attributes in Styleables for R.java

Change-Id: I69e7b73cbdfe4baf502348397435c501ae29ff5e
/frameworks/base/tools/aapt2/ResourceParser.cpp
e4bb9eb5af5b0899dc0921d5580220b20e15bd5a 13-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Introduce notion of 'product' to ResourceTable

This allows us to preserve the various product definitions during the compile
phase, and allows us to select the product in the link phase.

This allows compiled files to remain product-independent, so that they do not need
to be recompiled when switching targets.

Bug:25958912
Change-Id: Iaa7eed25c834b67a39cdc9be43613e8b5ab6cdd7
/frameworks/base/tools/aapt2/ResourceParser.cpp
52364f7ae31716d7827ea8f8566f4a28bd30a921 11-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Variety of small fixes to get the build working

- Add option to rename package in AndroidManifest.xml
- Support default versionName and versionCode
- Accept True and False as valid booleans

Change-Id: I400e350b9dcd0fd1c197d1929144299c7823617d
/frameworks/base/tools/aapt2/ResourceParser.cpp
979ccb2e6f3f1f7f00a448eb440a85daf033dc9e 11-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Warn when positional arguments exist and --legacy is on

This is normally an error, but old AAPT didn't check for it correctly,
so many projects violate this. With --legacy, this becomes a warning.

Change-Id: I23647e029930e11b719591cd38609e1b43247e20
/frameworks/base/tools/aapt2/ResourceParser.cpp
7751afc796842bbb24bfbb19bd0fee4a7b7c8a4e 07-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix product support

Previously the default product wasn't tried if 'default' wasn't specified on the command line.
Also adds support for multiple products.

Change-Id: I1e4872b34bb8d609b6444841a4e7e4dbb3bbb76b
/frameworks/base/tools/aapt2/ResourceParser.cpp
393b5f0d6130d3848dd82075986a5cf40c09ce44 17-Dec-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Port AAPT pseudolocalization to AAPT2

Pseudolocalization happens at the compile phase. Pseudolocalized
values are weak, such that manually specified values will take precedence.

Change-Id: I5e064ce0d270c9f4f9022f75aecedab9d45bc980
/frameworks/base/tools/aapt2/ResourceParser.cpp
7ff3ee19f4b831a526baf4b928d1ac172d070d82 15-Dec-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Respect format attribute of <item> tag

An <item> is a general tag that can override certain behavior. For
instance, this is allowed:

<item name="foo" type="integer" format="float">0.4</item>

Even though without the format attribute, this would be illegal.

Change-Id: I8133ce59e14719a70d7476a1464c3f564c435289
/frameworks/base/tools/aapt2/ResourceParser.cpp
a6fe345be955368a13aea76aefb4db821aad11df 10-Dec-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix overlay support

Supports the <add-resource> tag and mimics old AAPT behavior of
not allowing new resources defined unless <add-resource> was used
or --auto-add-overlay was specified.

Change-Id: I9b461137357617ade37fd7045b418b8e6450b9c4
/frameworks/base/tools/aapt2/ResourceParser.cpp
28cacf091ad2b1c2749e77f590e9523e58735252 23-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Record source/comments for compound values' children

Values like styles or arrays have children which need to have
their source and comments preserved.

Change-Id: I6fc713ba36627e6d66c7930b4080cc1403bac207
/frameworks/base/tools/aapt2/ResourceParser.cpp
a587065721053ad54e34f484868142407d59512d 21-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Verify min/max attr fields

Integers are now checked to see if they fall in the range
of min/max for the attribute they are assigned.

Change-Id: I42c435b15fd3f0bd23691c83efccce4ad5973276
/frameworks/base/tools/aapt2/ResourceParser.cpp
467f171315f9c2037fcd3eb5edcfabc40671bf7b 17-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fail compiling when private symbols are referenced

Also moved some XML specific stuff into its own directory,
and refactored ReferenceLinker a bit.

Change-Id: I912247a82023c1bbf72dc191fbdaf62858cbec0c
/frameworks/base/tools/aapt2/ResourceParser.cpp
abf83cbe4f63cd76043aab89cd0e08525560fea2 17-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Prevent duplicate enums/flags

Change-Id: I998cba12ac194000e9c778cb620ed7ab33003e7d
/frameworks/base/tools/aapt2/ResourceParser.cpp
fa10505ceaf9d4c41b76bb1b32f257926e96e441 07-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Accept aliases defined for external resource types

Resource types that are typically stored outside of the resource table
(like layout, xml, drawable) can only have aliases (reference to another
resource).

Change-Id: Idb768801f02bb142e5be5e438904f221499bd756
/frameworks/base/tools/aapt2/ResourceParser.cpp
27afb9e8894b512b21fcca6ce142f40f1ee16cbb 07-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Add support for clearer in-progress public attributes

Before, the ID assigned to a public resource without an explicitly set id
was more difficult to figure out. It would be the next available ID.

AAPT2 introduces a new way to specify public attributes in progress.

<public-group type="attr" first-id="0x0101047f">
<public name="foo" />
<public name="bar" />
...
</public-group>

The IDs assigned to each resource is auto-incremented starting from `first-id`.
This also keeps resource's with the same type grouped together so that
the auto-incrementing nature is evident.

Also, due to how AAPT2 was implemented, this is required :P

Change-Id: I95ea92ad0405e87ed0b1766879bb2f1d9d0b636e
/frameworks/base/tools/aapt2/ResourceParser.cpp
b274e35abfbbd09e0fce983a215c11522c56cce2 07-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix inclusion of comments in R.java javadoc

Comments weren't being copied when merged from the various
resource tables.

Also refactored the JavaClassGenerator to omit a class
if no entries exist for it.

Change-Id: I6eaa89b7b3715bc05403635a2baf0d1db3efd142
/frameworks/base/tools/aapt2/ResourceParser.cpp
9f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4 04-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix small issue with detecting translatable resources

Change-Id: Idd21b5de4d20be06c6f8c8eb5a22ccd68afc4927
/frameworks/base/tools/aapt2/ResourceParser.cpp
b23f1e077b02a1d62bcf5e34655e8dc979e124fa 03-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Verify positional Java String format arguments in strings

Change-Id: Id415969035a0d5712857c0e11e140155566a960c
/frameworks/base/tools/aapt2/ResourceParser.cpp
ca5638fd85098c3d0a699492751043545f75553a 21-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Support generating Manifest.java

This includes comments from AndroidManifest.xml.

Change-Id: I412d9ecb12bad20a49a683d6b3bea4a0be1235ae
/frameworks/base/tools/aapt2/ResourceParser.cpp
e78fd617ec60139a973a01925fa7adad31febb39 22-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Move comments and source into Value

Values are closely related to where they were defined, so
this information should live inside the Value.

This also enables comments to be attached to nested Values.

Change-Id: Ic7481b5a5f26d0ef248d638e2e29252f88154581
/frameworks/base/tools/aapt2/ResourceParser.cpp
9e10ac70155c993e7053323ad36beaea7bf7d54f 16-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Process <java-symbols> and private symbol package

Need to introduce the idea of multiple levels of visibility to support <java-symbol>.

Public, Private, Undefined.

Public means it is accessible from outside and requires an ID assigned.
Private means that we explicitly want this to be a symbol (show up in R.java), but not visible
to other packages. No ID required.

Undefined is any normal resource. When --private-symbols is specified in the link phase,
these resources will not show up in R.java.

Change-Id: Icba89221e08e685dee7683786aa7112baf28c856
/frameworks/base/tools/aapt2/ResourceParser.cpp
9ba47d813075fcb05c5e1532c137c93b394631cb 13-Oct-2015 Adam Lesinski <adamlesinski@google.com> Filter products during compile phase

Unfortunately there is no good way to deal with products in the link phase.
Products are like preprocessor defines in that they are processed early
and change the composition of the compiled unit.

Change-Id: I6d5e15ef60d29df8e83e059ba857c09333993779
/frameworks/base/tools/aapt2/ResourceParser.cpp
1ab598f46c3ff520a67f9d80194847741f3467ab 14-Aug-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Separate out the various steps

An early refactor. Some ideas became clearer as
development continued. Now the various phases are much
clearer and more easily reusable.

Also added a ton of tests!

Change-Id: Ic8f0a70c8222370352e63533b329c40457c0903e
/frameworks/base/tools/aapt2/ResourceParser.cpp
dfa5e0705ff82f15e228ba076bc192893bcbe118 13-May-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix issue where @null was wrongly encoded

@null must be encoded as TYPE_REFERENCE with a value of
0. TYPE_NULL is used by the runtime as a placeholder when resolving
style attributes. If we set a style attribute to TYPE_NULL,
the runtime will throw. The runtime will convert a TYPE_REFERENCE
with value 0 to a proper null value.

Change-Id: Id983ca7e1fbee3124dddafe32f1b5741b824225b
/frameworks/base/tools/aapt2/ResourceParser.cpp
bdaa092a193d8ddccbd9ad8434be97878e6ded59 09-May-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: inferred style parent processing

Change-Id: I8fbc4feef16b6039cf4c526fcfb767dc75a9c131
/frameworks/base/tools/aapt2/ResourceParser.cpp
24aad163bc88cb10d2275385e9afc3de7f342d65 25-Apr-2015 Adam Lesinski <adamlesinski@google.com> Add namespace handling in attribute values

Previously, you could only reference namespace prefixes in attribute names:

<View xmlns:appcompat="http://schemas.android.com/apk/res/android.support.v7.appcompat"
appcompat:name="hey"
...

Now you can also reference them in resource names within an attribute value:

...
android:text="@appcompat:string/confirm"
...

Which will be treated as "@android.support.v7.appcompat:string/confirm".

Change-Id: Ib076e867a990c80cf877a704eb77cd1ef0b23b52
/frameworks/base/tools/aapt2/ResourceParser.cpp
769de98f2dd41bfe39a1c9f76aefd1ad58942733 11-Apr-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Add library support

Change-Id: I307f56d9631784ab29ee4156d94886f9b2f25b30
/frameworks/base/tools/aapt2/ResourceParser.cpp
ca2fc353c2b07e24e297fdc8426c7abd601d908b 03-Apr-2015 Adam Lesinski <adamlesinski@google.com> Fix windows build of AAPT2

Change-Id: Ib8e1a4322510b582e9600a08d3118842c9abc73c
/frameworks/base/tools/aapt2/ResourceParser.cpp
6f6ceb7e1456698b1f33e04536bfb3227f9fcfcb 14-Nov-2014 Adam Lesinski <adamlesinski@google.com> AAPT2

First checking of AAPT2. The individual phases of AAPT2 work, but there
are some missing pieces.

For early testing we are missing:
- Need to properly mark file references and include them in package
- Need to package into zip

Final AAPT for apps we are missing:
- Need to crush PNGs
- Need to parse 9-patches
- Need to validate all of AndroidManifest.xml
- Need to write align method to align resource tables for splits.

Final AAPT for apps + system we are missing:
- Need to handle overlays
- Need to store comments for R file
- Need to handle --shared-lib (dynamic references too).

New AAPT features coming:
- Need to import compiled libraries
- Name mangling
- R file generation for library code

Change-Id: I95f8a63581b81a1f424ae6fb2c373c883b72c18d
/frameworks/base/tools/aapt2/ResourceParser.cpp