Commit Graph

654 Commits

Author SHA1 Message Date
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
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
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
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
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
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
247ecfa498 Merge "AAPT2: Support id reference chaining from AAPT" into pi-dev 2018-04-19 21:35:59 +00: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
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
356feb53b6 Merge "AAPT: Modified StringPool uniqueness detection" into pi-dev 2018-04-16 17:15:53 +00: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
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
Ryan Mitchell
6a23deef5d Merge "Changed AAPT2 to abide by AAPT resource whitespace triming." into pi-dev 2018-04-05 00:14:38 +00:00
Ryan Mitchell
498baa82e6 Merge "Added --debug-mode flag to AAPT2" into pi-dev 2018-04-04 21:21:28 +00:00
Ryan Mitchell
70414f22dc Check the size of the strings in the StringPool before flattening.
Test: Tested for normal functionality when string does not exceed
maximum length and tests for detection of string that is too lonhg for
UTF8i
Bug: b/74176037

Change-Id: Ic71d3671a069e7012e8ca107e79e071499eebbf6
(cherry picked from commit a15c2a8957)
2018-04-04 15:54:43 +00:00
Ryan Mitchell
9beaa9cfe3 Changed AAPT2 to abide by AAPT resource whitespace triming.
Bug: b/74331008
Test: Created tests in ResourceParser_test.cpp
Change-Id: Id7b387692b795774cd77452ca8cf06a8447bf3be
(cherry picked from commit a048807712)
2018-04-04 15:54:05 +00:00
Ryan Mitchell
e5b38a676c Added --debug-mode flag to AAPT2
Bug: 74968793
Test: Tested for correct debuggable attribute presense with and without
flag

Change-Id: I0148d1caba62db8cf258926f1d9e87a849aa283f
(cherry picked from commit 444f9bb6a1)
2018-04-04 15:51:53 +00:00
corysmith@google.com
f7db43ee35 Writes the resource table proto out when writing a LoadedApk.
Small fixes for consistancy to use constants instead of strings.

Change-Id: I33439c376e1634b7957730ce16e241b0f5bb92f8
Fixes: 74594854
Test: Manual, tested against blaze test //javatests/com/google/devtools/build/android:UnitTests
2018-03-18 14:30:13 -04:00
Anton Hansson
d137c872cd frameworks/base: Set LOCAL_SDK_VERSION where possible.
This change sets LOCAL_SDK_VERSION for all packages where
this is possible without breaking the build, and
LOCAL_PRIVATE_PLATFORM_APIS := true otherwise.

Setting one of these two will be made required soon, and this
is a change in preparation for that. Not setting LOCAL_SDK_VERSION
makes the app implicitly depend on the bootclasspath, which is
often not required. This change effectively makes depending on
private apis opt-in rather than opt-out.

Test: make relevant packages
Bug: 73535841
Exempt-From-Owner-Approval: Global cleanup
Change-Id: I26458e41ecb84de91ac9a356a5d4bafb44f463c1
2018-03-07 11:42:04 +00:00
Adam Lesinski
f3c951fd52 Merge "Change ownership of AAPT2 and libandroidfw" 2018-03-02 22:38:46 +00:00
TreeHugger Robot
51aed1c8b9 Merge "AAPT2: Allow to inline XML into custom attribute" 2018-03-02 22:36:22 +00:00
Adam Lesinski
a95e841846 Change ownership of AAPT2 and libandroidfw
toddke@ is now the new owner of these projects.

Test: none
Change-Id: Ie92b020e0ba063f48ce8a76ebaef768fe0d554f1
2018-03-02 12:11:03 -08:00
Adam Lesinski
c9a2926e66 AAPT2: Allow to inline XML into custom attribute
Previously, doing something like

<parent xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="app:foo">
        <child />
    </aapt:attr>
</parent>

would result in something like:

<parent xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:aapt="http://schemas.android.com/aapt"
        foo="@generated_name" />

while it should result in:

<parent xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:aapt="http://schemas.android.com/aapt"
        app:foo="@generated_name" />

Bug: 36809755
Test: make aapt2_tests
Change-Id: I72ea4b402e196ca05b53b788e4768a265190a0dc
2018-03-01 20:04:00 -08:00
Adam Lesinski
34a1687a67 AAPT2: Remove resources that define locales but no default values.
According to our docs:
https://developer.android.com/guide/topics/resources/localization.html#defaults-r-important

Some resources *require* that there is a default definition. So far,
the pain is felt when doing translations for strings that have been
renamed, etc.

This CL strips out resources that don't have a default value and define
a resource for a locale. This is conservative, but should be expanded
to other configuration properties moving forward.

Bug: 36572857
Test: make aapt2_tests
Change-Id: Ife94a1f8a2ee221f8532ffa856541a9c8c4e7143
2018-03-01 11:18:23 -08:00
Adam Lesinski
2eed52ecc0 AAPT2: Fix styled string whitespace processing
Change styled string whitespace processing to be like AAPT's was.

Main changes:
- whitespace around tags is preserved.
- tags start exactly where they are supposed to, not off by one.

Bug: 72406283
Test: make aapt2_tests
Change-Id: I4d12728c493efd8c978e2e3d2718b56534ff52ef
2018-02-27 11:39:10 -08:00
Adam Lesinski
e1094a2e23 AAPT2: Fix issue with String flattening in XmlFlattener
Compiled Strings (previously not encountered) in an XML resource
were using a different StringPool than the one being referred to
in the XmlFlattener, and so the indices were all wrong.

Bug: 72700446
Test: make aapt2_tests
Change-Id: I663924f8fad50fd4c69cfa196318dc63fb641a25
2018-02-23 14:59:37 -08:00
TreeHugger Robot
3ac786d217 Merge "AAPT2: normalize Manifest java identifiers." 2018-02-19 10:42:35 +00:00
TreeHugger Robot
983bacb959 Merge "AAPT2: Ensure output formats of files are correctly set" 2018-02-17 01:58:18 +00:00
Adam Lesinski
a65bbdf43c AAPT2: Ensure output formats of files are correctly set
When compiling straight to proto from source, the file types
were not set correctly (binary XML or proto XML).

Bug: 73406447
Test: manual
Change-Id: I68c1881a00a2ec1ad58f7ec485af2543d262d076
2018-02-15 16:44:15 -08:00
TreeHugger Robot
f74309f5e2 Merge "AAPT2: Fix issue with deserializing binary XML" 2018-02-15 06:39:21 +00:00
TreeHugger Robot
237b1d0cf6 Merge changes I2f594c22,I37a2b8b8
* changes:
  AAPT2: Fix compatible-screens element in AndroidManifest.xml
  AAPT2: Add order attribute to groups
2018-02-15 05:46:47 +00:00
Adam Lesinski
bbf429795d AAPT2: Fix issue with deserializing binary XML
We assumed that a raw text value set for an attribute meant there
were no compiled values set either.

This would only really happen for attributes that did not belong to any
namespace (no prefix:), since we always kept their raw string values
in case some code relied on it.

Bug: 72700446
Test: make aapt2_tests
Change-Id: Icba40a1d4b181bfe7cad73131c4dbe5ba7f8b085
2018-02-14 16:11:23 -08:00
Shane Farmer
d05b9130fd AAPT2: Fix compatible-screens element in AndroidManifest.xml
Fix an issue where the compatible-screens element was not being
populated correctly. The previous version was missing the screenSize
attribute which is mandatory. The attributes were also missing the
resource ID from the framework library as these are a part of the public
API.

Change-Id: I2f594c2259831dbbd96c58db4ba55e8288d4231e
Test: unit tests
Test: manually split an APK and dumped with aapt
2018-02-14 15:44:42 -08:00
Adam Lesinski
da9eba300b Dump XML files in aapt2 dump
Test: manual
Change-Id: Id7f656c1385f6d1fec8eaa993c8e2b36bb1ae5b0
2018-02-14 10:49:32 -08:00
Izabela Orlowska
d31bc123a0 AAPT2: normalize Manifest java identifiers.
Currently AAPT2 does not allow permissions which last piece contains the
"-" symbol (since it is an illegal character for a java identifier).

AAPT1 would normalize the last piece, therefore creating a valid java
identifier.

This CL makes AAPT2 behave in a similar way to AAPT1, but instead of
modifying the original value of the permission string, modifies only the
java identifier part, leaving the permission string unchanged.

Fixes: 72980877
Test: updated
Change-Id: Ie44317e07407341ba3e91a84d9b06980547b3448
2018-02-13 14:09:00 +00:00
Nick Butcher
e78a816966 Prevent AAPT from versioning <animated-selector> tags.
Bug: 69359529
Test: Manually tested with ag/3178054
Change-Id: I10ae4d96c2a31a0a7c363d7a9292ecdfd3bb526a
2018-02-09 11:36:27 +00:00
Mohamed Heikal
1084432e1e AAPT2: Fix silent failure when ContainerReader fails during Link
Currently in the link step ContainerReader is used to read files but the
reader is not checked for errors prior to the read. This can lead to
silent failure when reading invalid resource files.

Change-Id: I6420699ad30b5b84b0b2c696af8eb5a6cbd4111e
2018-02-08 14:50:14 -05:00
Shane Farmer
11cdc1cf7a AAPT2: Add order attribute to groups
Require explicit ordering of groups in the configuration file to ensure
that the correct version code is set. Ordering based on a single ABI is
straight forward to ensure Play Store delivers the correct APK, but when
an APK needs more than one ABI things get messy quickly. This also goes
for screen density etc. The only thing that is easily sorted without
this attribute is android-sdk since an artifact can only reference a
single SDK.

Test: unit tests
Test: manually split an APK with update config.xml
Change-Id: I37a2b8b8a8409d6d6ff27c7142d4c8c8065a7a51
2018-02-02 12:11:18 -08:00
Dave Ingram
22ed4122e7 AAPT2: Fix typo in BinaryPrimitives oneofs
Follow-up to ag/3449569

Bug: 69587794
Test: aapt2_tests
Change-Id: I95d2ba600c00bda2a8420794e43501f9bfca01df
2018-01-30 21:15:36 -08:00
TreeHugger Robot
e5b3296316 Merge "Allow <adopt-permissions> tag in manifest" 2018-01-19 17:10:29 +00:00
David Chaloupka
cfd1b4b263 Merge "Handle multiple packages of same name in 'aapt2 convert'" 2018-01-19 10:57:53 +00:00
TreeHugger Robot
8f2fffd809 Merge "AAPT2: Store BinaryPrimatives in protos as oneofs" 2018-01-19 01:00:00 +00:00
David Chaloupka
e3c1a4a9d2 Handle multiple packages of same name in 'aapt2 convert'
aapt2 currently looks-up packages only by package name and then verifies
whether the package ID has the expected value. For pre-L we need to be able
to handle resource tables having packages of same package name but
different IDs.

Note that this CL fixes only proto->binary conversion but many other aapt2
commands are still affected. This is because many transformations still
consider package name as sufficient identifier of a package.

Bug: 72143207
Test: Manual
Change-Id: Id8a920d6cd15bec747d3124270f5bcb7f48924cf
2018-01-18 19:20:01 +00:00