Commit Graph

697 Commits

Author SHA1 Message Date
Ryan Mitchell
d86ea58bdd AAPT2: Encode 4-byte strings in Modified UTF-8
Codepoints that are encoded to 4 bytes in UTF-8 are not allowed in
Modified UTF-8. They instead should be encoded as surrogate pairs in the
same way that CESU-8 allows for surrogate pairs. This will also cause 4
byte UTF-8 codes to be represented in 6 bytes.

Bug: 37140916
Test: aapt2_tests
Change-Id: I155dc24f166139d1d36a16bac088dcfcd59eb321
2018-07-02 14:14:33 -07:00
Ryan Mitchell
d6ace01c5a Merge "AAPT2: Fix unrecognized CDATA" 2018-06-25 16:10:59 +00:00
Ryan Mitchell
cb76d734fe AAPT2: Fix unrecognized CDATA
This change adds support for resources that have CDATA blocks within
their values. The blocks should allow any character to occur without
being escaped. It also should not effect the current state of quote
processing.

Bug: 80326349
Test: Created tests in aapt2_tests
Change-Id: Ie1a00e50cffc877e2eb5f788f8d7a1bda839c0cf
2018-06-22 14:06:02 -07:00
Colin Cross
fdc40f52d8 Merge "Fix ManifestMerger issues" into stage-aosp-master am: 669c4d7ae7
am: fae24f5aa2

Change-Id: I66e9b74a7db9ae9a0c4040e37a3f2807b24aa391
2018-06-18 13:38:11 -07:00
Colin Cross
ff311dd893 Fix ManifestMerger issues
Set LOCAL_MIN_SDK_VERSION in aapt2 integration test libraries so that
the build system doesn't raise the minSdkVersion value specified in
the manifest, which causes ManifestMerger to error when trying to
merge it into a package that specifies a lower minSdkVersion.

Bug: 78447299
Test: m java
Change-Id: If5d4f97bb2d8a503bd3c20f2ea8aea2519c51e85
2018-06-15 23:03:46 +00:00
Ryan Mitchell
1b327db1af Merge "AAPT2: Fix raw string parsing" 2018-06-12 20:51:33 +00:00
Ryan Mitchell
633d796623 AAPT2: Fix raw string parsing
Trim whitespace of raw strings when parsing xml values. This change
trims the whitespace of style items. For example:

<item name="viewInflaterClass">com.helloworld.Inflater
</item>

This will be trimmed to not include a trailing whitespace.

Bug: 109666819
Test: aapt2_tests
Change-Id: I0c1fbb3abdc7e609316c92e59ccaf0573b07e5a7
2018-06-11 15:57:23 -07:00
Jake Wharton
3001f0311d Only keep methods with correct signature for view/menu click
For View's onClick attribute the method must have a single argument of type android.view.View. For a MenuItem's onClick attribute the method must have a single argument of type android.view.MenuItem. Since these rules match all types and any return type, matching by signature is the only available specificity that can be added.

Bug: 37123156
Test: make aapt2_tests
Change-Id: I4b82f5ef9e62a8ecffaab424e269df627825709e
2018-06-11 17:21:28 -04:00
Jake Wharton
420785e6d0 Improve tests for ProGuard rules, add transition tests
Test: make aapt2_tests
Change-Id: If3300a9f82ad90189b74aab03c0d7f649e74e3f3
2018-06-11 15:57:59 -04:00
Jake Wharton
ab660a7fde Only keep default constructor of manifest items
Reflection-based instantiation of manifest-declared types is only done on the default (aka no-argument) constructor. While these types are unlikely to have alternate constructors (unlike the others listed in the bug), there's no reason to generate overly keep-y rules for them.

Bug: 37123156
Test: make aapt2_tests
Change-Id: Ic83a2671a54ea5dd558bfcacf033a60e9568ab8c
2018-06-11 11:33:17 -04:00
Ryan Mitchell
40c95320fd Merge "AAPT2: Add Proguard rules for nav fragments" 2018-05-31 21:32:39 +00:00
Colin Cross
da02feaca2 Add support for --replace-version to aapt2
Implement --replace-version to match aapt1.

Bug: 79755007
Test: aapt2_tests
Change-Id: Iee2bd9a3981c7d4681509f18b735c6e9e6c1a336
Merged-In: Iee2bd9a3981c7d4681509f18b735c6e9e6c1a336
(cherry picked from commit dcd58c4207)
2018-05-30 23:25:21 +00:00
Colin Cross
dcd58c4207 Add support for --replace-version to aapt2
Implement --replace-version to match aapt1.

Bug: 79755007
Test: aapt2_tests
Change-Id: Iee2bd9a3981c7d4681509f18b735c6e9e6c1a336
2018-05-30 14:48:52 -07:00
Ryan Mitchell
9a2f6e60c6 AAPT2: Add Proguard rules for nav fragments
Adds generation of proguard rules for fragments in res/navigation. All
android:name attributes have keep rules generated for the classes they
reference.

Bug: 69929974
Test: aapt2_tests
Change-Id: I05a87484ab357ea5629b73caad8488182f474e1f
2018-05-24 09:58:27 -07:00
Ryan Mitchell
a593605dfa AAPT2: Accept density config as default
When a resource does not have a default config value defined, and the
resource only has config values defined for language translations, that
resource should be removed; however, if the resource also contains a
density specific config value, the resource should not be removed.

This is because a density specific value should have the same content as
what the default value would have, just higher or lower quality.

Bug: 76413048
Test: aapt2_tests
Change-Id: I52fe37a7aa3aefb694d3af6c8adfd6269fa26f54
2018-05-24 09:46:33 -07:00
Ryan Mitchell
3a20be789f Merge "AAPT2: Insert platformBuild information" into pi-dev am: 91d2f87d0e
am: 78e0e6aa2e

Change-Id: I6fb1af5b521c5a887ee494c745b83592e48228de
2018-05-11 08:41:00 -07:00
Ryan Mitchell
7cb82a86be AAPT2: Insert platformBuild information
Inserts platformBuildVersionName and platformBuildVersionName when the
attributes are not currrently present. The attributes are set to
the values of versionName and versionCode.

Bug: 77541121
Test: Build apk using aapt and appt2 and dumped using xmltree to confirm
the presence of the attributes
Change-Id: I5330381905c878fb877214b42f83d7e2e48cd062
2018-05-10 15:37:37 -07:00
Ryan Mitchell
461b3001f6 Merge "AAPT2: Fix quoted text in res/xml assets" into pi-dev am: 150bafd217
am: cc6e856522

Change-Id: Ie22b644b07da19fcc51e59529f5e38ee2f1f9137
2018-05-02 17:49:08 -07:00
Ryan Mitchell
60f06b7770 Merge "AAPT2: Fixed id parsing error" into pi-dev am: f4c089dd90
am: 932c44d329

Change-Id: I661784fcabac19d4d9bae137904b9282d9765d79
2018-05-02 13:55:05 -07:00
Ryan Mitchell
0dcb20c727 AAPT2: Fix quoted text in res/xml assets
AAPT2 aggressively processed xml nodes and regressed from the behavior
of AAPT. This change restores AAPT's processing of xml nodes with
quotations.

Bug: 71805084
Test: Created tests in XmlFlattener_test.cpp and ran the test in the
Android Studio project given in the bug

Change-Id: Idedb4f1002e9fd705ceb5feae35289235b754b02
2018-05-02 17:53:21 +00:00
Ryan Mitchell
f4c089dd90 Merge "AAPT2: Fixed id parsing error" into pi-dev 2018-05-02 16:27:03 +00:00
Izabela Orlowska
d51efe818b AAPT2: add flag for strict visibility
Will only detect whether a resource was defined as both 'public' and
'private' (but will allow overriding 'undefined' visiblity for now).

Test: TableMerger_test + manual
Bug: 72735798

Change-Id: If0749559c91c4d8820a6286fc9ddc80209c1e5e9
2018-05-02 13:14:33 +01:00
Ryan Mitchell
eaf77e1d3a AAPT2: Fixed id parsing error
A previous change, editied the logic for parsing ids to allow for ids to
reference other ids. This change though caused a regression that made
ids in the form '<id name="name" />' cease to parse. This changes fixes
that regression.

Bug: 78513618
Test: Updated tests in ResourceParser_test.cpp
Change-Id: I3608bb764464e951a50910be55e199c6ec575d09
2018-05-01 11:11:55 -07:00
Todd Kennedy
0a81745b48 Merge "Allow using reserved package IDs" into pi-dev am: 13588dc9e4
am: c323122e93

Change-Id: I0addf146d9519a93bc2f8f73898a3454cb1cfb56
2018-04-26 15:27:00 -07:00
Todd Kennedy
13588dc9e4 Merge "Allow using reserved package IDs" into pi-dev 2018-04-26 21:29:17 +00:00
Todd Kennedy
325129964e Allow using reserved package IDs
Pre-O, the platform treats negative resource IDs [those with
a package ID of 0x80 or higher] as invalid.  In order to work
around this limitation, we allow the use of traditionally
reserved resource IDs [those between 0x02 and 0x7E].

Bug: 78041707
Test: ./out/host/linux-x86/nativetest64/aapt2_tests/aapt2_tests
Test: ./out/host/linux-x86/nativetest/libandroidfw_tests/libandroidfw_tests
Test: Manual. Create a feature split with a package ID of 0x7E and see it runs and can reference base resources.

Change-Id: I3d9782cc05d3a55e1a2467bf39566788847e1160
2018-04-26 10:27:30 -07:00
Todd Kennedy
4cb8826c28 Merge "Allow overriding the compile SDK" into pi-dev am: fd5166ddac
am: e31a442140

Change-Id: Iaaaee5337ba37a24d409c2e453995e314c562bce
2018-04-23 20:30:05 -07:00
TreeHugger Robot
fd5166ddac Merge "Allow overriding the compile SDK" into pi-dev 2018-04-24 03:14:04 +00:00
Todd Kennedy
9f6dec11e6 Allow overriding the compile SDK
We automatically pull the compile SDK from the platform. But,
in certain circumstances the platform's SDK codename is
incorrect. Allow the name to be overridden on the command line.

Change-Id: I398f1b00b29db42e4ce202b94cda483c98971a14
Fixes: 78324052
Test: ./out/host/linux-x86/nativetest64/aapt2_tests/aapt2_tests
2018-04-20 22:41:52 +00:00
Michael Wachenschwanz
07c0fc37fb Merge "Fix fraction and dimension type in Resource.proto" into pi-dev am: 1a12311433
am: 4dcb9b082b

Change-Id: I5068164f7904d21b3de56be20c37092faac751be
2018-04-20 12:39:11 -07:00
TreeHugger Robot
1a12311433 Merge "Fix fraction and dimension type in Resource.proto" into pi-dev 2018-04-20 18:59:11 +00:00
Michael Wachenschwanz
8b74927e9e Fix fraction and dimension type in Resource.proto
Change fraction and dimnesion type from float to uint32

Change-Id: I641dc42cf7b6bdd8bc16c8cdbd573ec3281a084a
Fixes: 78182701
Test: aapt2_tests
2018-04-20 10:46:47 -07:00
Ryan Mitchell
027453d6fb Merge "AAPT2: Support id reference chaining from AAPT" into pi-dev am: 247ecfa498
am: e9bbefa7dc

Change-Id: Ic40b9e08352e561e21284d72592860b868f6edc1
2018-04-19 15:20:51 -07:00
Ryan Mitchell
247ecfa498 Merge "AAPT2: Support id reference chaining from AAPT" into pi-dev 2018-04-19 21:35:59 +00:00
Ryan Mitchell
cf05869e24 Merge "AAPT2: Modified StringPool uniqueness detection #2" into pi-dev am: b2182c412c
am: 8751b6ee4e

Change-Id: I36e19f3e0013bdcaa8fc2ce110a78cc544168ef6
2018-04-18 15:49:17 -07:00
y
4602926f83 AAPT2: Modified StringPool uniqueness detection #2
b/77862560 detected that when converting an apk to binary using aapt2,
all resource ids of attributes that have been replaced with resource
identifiers become set to the identifier of the first attribute. This is
because the attribute names are all empty because the names are not necessary
since the resource ids are present. The empty attribute names all map to
the same string pool reference and cause all the ids to be the first
empty string into the string pool.

The ag/3897499 approach to fix the specified bug was extremely inefficient
and caused hour long builds. This change takes advantage of the multimap
data structure to do lookups efficiently.

Bug: 77862560
Test: Converted apk in listed bug from proto to binary and observed
correct resource ids and correct badging. Also built the Android tree to
check for regressions in build time.

Change-Id: I27a9ee4ffbed8b9ff6f238ad315cdf87b588947c
2018-04-18 20:58:50 +00:00
y
9efbbef2e0 AAPT2: Support id reference chaining from AAPT
AAPT would allow for ids to be declared in the form:

<item name="name" type="id>@id/other</item>

@id/name should hold a reference to @id/other. When
getResources().getValue() is called on R.id.name with resolveRefs
enabled, the resuling reference should be R.id.other.

Bug: 69445910
Test: Created tests for correct parsing of id references and correct
resolving of deep references

Change-Id: Id1feb37b2565c213dc6a19b4c401906260d7fc14
2018-04-18 11:46:53 -07:00
Izabela Orlowska
1056019c2d AAPT2: include package name in styleable children
When writing partial R files, also include the package of the styleable
child:
<declare-styleable name="ds1">
    <attr name="font"/>
    <attr name="android:font"/>
    <attr name="tools:font"/>
    <attr name="com.foo.bar:font"/>
</declare-styleable>
will produce:
default int styleable ds1_font
default int styleable ds1_android_font
default int styleable ds1_tools_font
default int styleable ds1_com_foo_bar_font

Bug: 73927419
Test: manual, see description
Change-Id: Ica493408c7c6d9e7fae2b693c96fbc20a723ce08
2018-04-18 14:27:52 +01:00
Ryan Mitchell
b5e66d8516 Merge "Revert "AAPT: Modified StringPool uniqueness detection"" into pi-dev am: 61ac57283f
am: 312a3ff350

Change-Id: I956eefccec0613ed3b6caf0ec665c8079b6a41bf
2018-04-16 13:02:15 -07:00
Ryan Mitchell
61ac57283f Merge "Revert "AAPT: Modified StringPool uniqueness detection"" into pi-dev 2018-04-16 19:28:43 +00:00
Ryan Mitchell
61ffd40290 Revert "AAPT: Modified StringPool uniqueness detection"
This reverts commit 35ecb89a8a.

Reason for revert: <Long make duration (infinite loop)>

Change-Id: I10d1cf53ca3054d40e23b06368ebaff6af69beab
2018-04-16 18:21:14 +00:00
Ryan Mitchell
ac7c9dda2c Merge "AAPT: Modified StringPool uniqueness detection" into pi-dev am: 356feb53b6
am: 789ffb45c5

Change-Id: I577bd1b6a7de0a81fbb5f23a0f31e3f5f5352d4b
2018-04-16 10:47:31 -07:00
Ryan Mitchell
356feb53b6 Merge "AAPT: Modified StringPool uniqueness detection" into pi-dev 2018-04-16 17:15:53 +00:00
Wale Ogunwale
605007578e Finalizing P SDK am: 3da5f3b2dd
am: fc89e7f17a

Change-Id: I85aaa6fb6de6cc76a2ac004c7e575737537401fc
2018-04-14 16:04:49 -07:00
y
35ecb89a8a AAPT: Modified StringPool uniqueness detection
b/77862560 detected that when converting an apk to binary using aapt2,
all resource ids of attributes that have been replaced with resource
identifiers become set to the identifier of the first attribute. This is
because the attribute names are all empty because the names are not necessary
since the resource ids are present. The empty attribute names all map to
the same string pool reference and cause all the ids to be the first
empty string into the string pool.

Bug: 77862560
Test: Converted apk in listed bug from proto to binary and observed
correct resource ids and correct badging.

Change-Id: I635c13cd1ad7a395fe40a57198cfe5ec91602d01
2018-04-13 16:15:42 -07:00
Wale Ogunwale
3da5f3b2dd Finalizing P SDK
Bug: 77588754
Test: builds
Change-Id: Ic06cad790a3dc53d012a7c43dfac911fc6dc61e7
2018-04-12 15:26:31 -07:00
Ryan Mitchell
a086da2cd0 Merge "AAPT: Multiple period legacy support and errors" into pi-dev am: f845891031
am: 68dc7ca568

Change-Id: I9da94ea0e84ff3caf28597b1038ed6e4ac158280
2018-04-12 11:51:16 -07:00
y
d6b83299a6 AAPT: Multiple period legacy support and errors
AAPT would accept files with multiple periods in the filename as input.
This lead to cases explained in b/74999475. This change adds error
messages for files with multiple periods unless the legacy flag is
present. With the legacy flag present, AAPT2 will behave like AAPT
rather than throwing an error.

Test: Added tests to aapt2_tests
Bug: 73071563
Bug: 74999475
Change-Id: I28dfceeea7b39f8e4b9e6671e0fc8793cf388f52
2018-04-11 15:52:43 -07:00
Mohamed Heikal
57ffac7f10 Merge "AAPT2: Adds config support for manipulating resources" 2018-04-09 14:57:04 +00:00
Mohamed Heikal
d3c5fb64e3 AAPT2: Adds config support for manipulating resources
aapt2 optimise command can now take a resources config file as an
argument. The config has the name of each resource and a list of
directives. Currently implemented is the "remove" directive which marks
the resource for deletion.

The obfuscation whitelist code and argument name was changed to prevent
confusion.

Test: make aapt2_tests
Bug: b/27523794

Change-Id: I2d8e1985e5ea2286131c25231e2c411f3d9610ce
2018-04-06 15:03:23 -04:00