187 Commits

Author SHA1 Message Date
Adam Lesinski
9b624c186c AAPT: Move private attrs to new type for framework
Private attributes are typically placed after public
attributes in the resource table. Each time a new version
of the Android framework is released, new public attributes
take the place of the private attributes, and the private
attributes are shifted after the new public ones.

This means that any apps built against the newer SDK
may inadvertently be using private attributes on older
devices.

This change moves all private attributes to a completely
different type ID, so there will never be collisions across
versions.

These private attributes are automatically moved to a synthesized
type only for the system resources.

Bug:18263655

Change-Id: I7a850512953fadcc9f3524d509cea30249782db8
2014-12-03 15:59:20 -08:00
Adam Lesinski
cd6f00c3a0 Merge "Implement back-tracking when searching for attributes in XML or resource bag" into lmp-mr1-dev 2014-11-17 19:39:17 +00:00
Adam Lesinski
a7d1d73a47 Implement back-tracking when searching for attributes in XML or resource bag
Shared libraries have their package ID assigned at run-time, so some
of the guarantees we used to have about sort order of attributes in
bags or XML elements no longer hold.

This CL adds back-tracking and can jump to the nearest attribute with the
same package ID and continue searching.

This means that attributes with the same package ID must be sorted by increasing
resource ID, as was the case before.

Attributes with the same package ID must be grouped together, but the groups can
be in any order. Ex: 0x02010001, 0x02010002, 0x01010000, 0x01010010, 0x7f010032

Bug:17666947
Change-Id: I9c198bbb6ca788849aac85b6323606ea5d9550d6
2014-11-04 16:34:34 -08:00
Adam Lesinski
de7de47fef Add error checking to aapt for split generation
Change-Id: Ica627db6a671f6a6c35f98bfd9c03598ffe103ce
2014-11-03 15:55:44 -08:00
Adam Lesinski
668f0a356c Merge "Fix issues that will be present in C++11" into lmp-mr1-dev 2014-11-03 23:38:43 +00:00
Adam Lesinski
4bf58108d4 Fix issues that will be present in C++11
- char16_t is a distinct type, so stay consistent
  with it throughout the code base.
- char16_t is defined as minimum size of 16 bits.
  Since we mmap and cast data structures onto raw memory,
  we need a precise definition (uint16_t), so we cast between
  that (and static_assert that they are the same size).

Change-Id: I869c32637543bbcfb39d2643e7d9df10d33acd3c
2014-11-03 11:49:47 -08:00
Alan Viverette
f296940502 Distinguish unspecified and explicit null values in resources
BUG: 17919345
Change-Id: Ic4f04f7dd0f986f58a749b5950d80c1cfdb074ea
2014-10-29 17:09:36 -07:00
Adam Lesinski
f001e37b31 libandroidfw: Do not build device library when building SDK
Building the windows SDK causes a build failure if the device
libandroidfw target is not omitted.

Change-Id: I587b166342d0d047820911d279f192d2b39b6263
2014-10-24 18:39:56 +00:00
Adam Lesinski
6029319737 Added some more Split density tests
Change-Id: I3b83515f1240e713bbcff5385cf054bba693f297
2014-10-23 16:01:58 -07:00
Adam Lesinski
e60a87f552 Search all packages for a given type string when looking up resources by name
Previously we would stop at the first match when looking for a type string,
but we should search all packages in case a feature Split added a type
with the same name.

Bug:17924027

Change-Id: I6bc7ef073324db99448538cd8bdf566658f066ff
2014-10-09 11:26:19 -07:00
Adam Powell
908c748096 Revert "Fix issue with using locally defined attrs in a shared lib"
This reverts commit 5069dd69898bd0d9c69ba2bbd37239ec8d1c9dc6.

The reverted commit caused issues loading resources supplied by static libraries.

Bug 17748356

Change-Id: I860a4f31451ee7c03c02974826472a67226b029f
2014-10-01 18:11:18 +00:00
Adam Lesinski
5069dd6989 Fix issue with using locally defined attrs in a shared lib
The attribute name resource IDs were never fixed up with
the runtime package ID so we weren't finding attributes
whenever the runtime package ID was different than the build
time one, which happened to be when a shared lib referenced itself
(0x00 vs 0x02).

Bug:17666947
Change-Id: Icf3e874bcea0e27eebe42d60fbed626a34bf9266
2014-09-30 16:18:09 -07:00
Adam Lesinski
82a2dd8efe Fix backwards compat problem with AAPT public attrs
AAPT has traditionally assigned resource IDs to public attributes,
and then followed those public definitions with private attributes.

--- PUBLIC ---
| 0x01010234 | attr/color
| 0x01010235 | attr/background

--- PRIVATE ---
| 0x01010236 | attr/secret
| 0x01010237 | attr/shhh

Each release, when attributes are added, they take the place of the private
attributes and the private attributes are shifted down again.

--- PUBLIC ---
| 0x01010234 | attr/color
| 0x01010235 | attr/background
| 0x01010236 | attr/shinyNewAttr
| 0x01010237 | attr/highlyValuedFeature

--- PRIVATE ---
| 0x01010238 | attr/secret
| 0x01010239 | attr/shhh

Platform code may look for private attributes set in a theme. If an app
compiled against a newer version of the platform uses a new public
attribute that happens to have the same ID as the private attribute
the older platform is expecting, then the behavior is undefined.

We get around this by detecting any newly defined attributes (in L),
copy the resource into a -v21 qualified resource, and delete the
attribute from the original resource. This ensures that older platforms
don't see the new attribute, but when running on L+ platforms, the
attribute will be respected.

We still need to address this problem in the platform moving forward,
as this will only help us in the transition from pre L to L.

Bug:17520380
Change-Id: Ia2a985798b50006c21c7c3431d30d9598f27cd91
2014-09-18 14:05:24 -07:00
Adam Lesinski
9d9cc6233c Add test to ensure themes get copied from separate resource tables
Change-Id: I94e9966cf1e9d0e7e6c7daa0606a87bb0f67705e
2014-08-29 14:34:54 -07:00
Adam Lesinski
d79e33379d Clean up test allocations so real memory leaks are more visible
Change-Id: Ic405f08c8d8e3e7fc4e4a991671e980752c19899
2014-08-29 12:29:31 -07:00
Adam Lesinski
a9aa9f0458 Merge "Fix memory leak in ResTable" into lmp-dev 2014-08-29 05:27:49 +00:00
Adam Lesinski
7f668d03ce Fix memory leak in ResTable
We were basically never cleaning any of the
cached bags... oops :S

Bug:16683269
Change-Id: Ic0a44218f660e16fbaac8df1d61ce6f1fdb0018b
2014-08-28 18:32:32 -07:00
Adam Lesinski
ad2d07d2d9 Stamp platform version code into app Apks
The versionCode of theframework resources that an app is built against
gets stamped inside an app's AndroidManifest.xml in the <manifest>
tag as "platformBuildVersionCode" and "platformBuildVersionName"
attributes.

Bug:17207635
Change-Id: Id573c3dffcbca38eec9c0eb3e89f4a547e3361d3
2014-08-27 18:28:49 -07:00
Adam Lesinski
31245b4f06 Introduce anydpi density resource qualifier
This is meant to be used with scaleable vector
drawables, and are chosen as the best match unless
there is a configuration that matches the density
requested exactly.

Bug:17007265
Change-Id: Ic3288d0236fe0bff20bb1599aba2582c25b0db32
2014-08-25 17:47:30 -07:00
Adam Lesinski
6022debdbc AAPT: Fix regression generating dynamic ref table for shared libraries
AAPT stopped generating dynamic reference tables for shared libraries.

Change-Id: Ib0025811bdca1a4756eb21080dd6b6bb3fc1ca3d
2014-08-20 17:55:33 -07:00
Adam Lesinski
2cb761e3dd Fix assumption about DynamicRefTable in aapt
Packages without any resources should not expect to have
a DynamicRefTable.

Bug:16895517
Bug:17056720
Change-Id: Id006f6bdbf08f30505f6ba5982bc9d1b09db0f0a
2014-08-15 14:01:43 -07:00
Adam Lesinski
89147ed84b Merge "Revert "Fix aapt dump for APKs with no resources"" into lmp-dev 2014-08-15 04:37:53 +00:00
Adam Lesinski
18560886cb Revert "Fix aapt dump for APKs with no resources"
This reverts commit 0e475302cd196f45a01a525c49089018b238d4ba.

I'll re-upload this CL with the correct fix in LoadedApk.

Change-Id: I17c6381f8e5907dab9f996f89c5d435b9c08a13a
2014-08-15 17:18:21 +00:00
Adam Lesinski
4b2d0f20db Fix crash in ResStringPool
When a String isn't found in the StringPool,
we should not try to construct a String8 object
from the NULL string.

Bug:15163956
Change-Id: I51e701918b10a72c18a860b8a36dce2afd9c0b82
2014-08-15 06:39:01 +00:00
Adam Lesinski
e23a91e2bd Fix aapt dump for APKs with no resources
All APKs are expected to have at least one resource table (even if
it is empty). We were missing the creation of an empty DynamicRefTable.

Bug:16895517
Change-Id: I6a6e887f91b3b4bbcc52b3fd2741ef3d05fab1fd
2014-08-14 21:20:41 +00:00
Adam Lesinski
d7df9d7b38 Merge "Fix aapt dump for APKs with no resources" into lmp-dev 2014-08-14 16:46:52 +00:00
Adam Lesinski
8d5667d2a2 Print xxxhdpi from ResTable_config::toString
Change-Id: I2e1a07649cb498c12023b198d8e50534f9d91840
2014-08-14 21:35:37 +00:00
Adam Lesinski
ccf25c7bf6 Fix shared library bug in bag attributes
A ResTable_map entry has a name attribute, which
could be a dynamic reference if it comes from
a shared library. It was not being patched with
the correct package id.

Bug:16795890
Change-Id: Ia8df6a943269b2fefb2132c3ed74eb1997d7701b
2014-08-11 09:16:01 -07:00
Adam Lesinski
833f3ccbc8 AAPT support for feature splits
This change allows the developer to add a base package for
which to build a feature split. The generated resource types
will begin after the base APK's defined types so as not
to collide or override resources.

Multiple features can be generated by first choosing an
arbitrary order for the features. Then for each feature,
the base APK and any preceding features are specified
with the --feature-of flags.

So with a base APK 'A' and features, 'B', and 'C',
'B' would be built with

aapt package [...] --feature-of A [...]

and 'C' would be built with

aapt package [...] --feature-of A --feature-of B [...]

Change-Id: I1be66e3f8df9a737b21c71f8a93685376c7e6780
2014-08-04 18:48:14 -07:00
Adam Lesinski
f28d505dc5 Ensure the ResTable data is at least the size of a ResTable_header
Change-Id: Ib8d5574bd6a125797a582837987332e66721e84d
2014-07-29 17:42:34 +00:00
Martin Kosiba
7df3625d5b Allow for appending of resources to an AssetManager.
BUG: 11505352
Change-Id: Ifa290580a6dc63c2f471d0bbf5f066db14aed4d7
2014-07-17 18:10:02 +01:00
Elliott Hughes
e8e968a7c6 am 583a845c: am 3964ea46: am d74f99d3: Merge "Switch frameworks/base/libs/androidfw to the new icu."
* commit '583a845c6eb6308d7ada72cb0e91444efc91cc54':
  Switch frameworks/base/libs/androidfw to the new icu.
2014-07-10 00:42:48 +00:00
Elliott Hughes
583a845c6e am 3964ea46: am d74f99d3: Merge "Switch frameworks/base/libs/androidfw to the new icu."
* commit '3964ea46750cd5715f29ad4d9cada4a35208ad7a':
  Switch frameworks/base/libs/androidfw to the new icu.
2014-07-10 00:16:43 +00:00
Elliott Hughes
6a4deeda70 Switch frameworks/base/libs/androidfw to the new icu.
Change-Id: Id82830750dd7e83bbc66811a1133b403cc697c97
2014-07-09 16:58:28 -07:00
Narayan Kamath
10eb3b0665 am e0849423: am 501bb0a5: Merge "Fix issue when converting fil->tl."
* commit 'e0849423214007d4377638fb42db15276e3ca575':
  Fix issue when converting fil->tl.
2014-07-07 10:11:23 +00:00
Narayan Kamath
fec5106c8e Fix issue when converting fil->tl.
We should call ResourceTable::getLocales directly,
and not AssetManager::getLocales. The latter will convert
"tl" to "fil" so we'll end up thinking we have resources
for "fil" when we don't really have any.

bug: 15873165

Change-Id: I9753e4608aaecede328a40ee1f3ee6b016d0dedc
2014-07-07 09:51:01 +01:00
Narayan Kamath
23902f5f4d am 10eb3b06: am e0849423: am 501bb0a5: Merge "Fix issue when converting fil->tl."
* commit '10eb3b0665dd7c636af5f0d657512c1a2e309e0c':
  Fix issue when converting fil->tl.
2014-07-07 10:26:42 +00:00
Nick Kralevich
a00144ca89 resolved conflicts for merge of a8dbd7b4 to master
Change-Id: I90f42546c6d0a8f21af3041e59baf6a226247b1c
2014-07-02 15:41:21 -07:00
Narayan Kamath
a8dbd7b433 am 39e4f590: am f56399f6: Merge "Fall back to "tl" if "fil" is absent."
* commit '39e4f590787246ce35b995c0c0ce37b676a05e0c':
  Fall back to "tl" if "fil" is absent.
2014-07-02 10:09:45 +00:00
Narayan Kamath
e4345dbd2a Fall back to "tl" if "fil" is absent.
For JB-MR1, there was a hack that used "tl" where
we really meant "fil" because ICU didn't have localizations
for "fil". This has now been fixed, and we now support 3 letter
language codes for AAPT so we can use "fil" where required.

For the benefit of apps that need to target older platforms,
we fall back to "tl" if the app has assets for "tl" and the
resource locale is "fil".

See bugs 7291355, 7207176 and 8049507 for more context.

Change-Id: I1ac8502525f99b40f9091d5efd2df33518d47a41
2014-07-02 10:53:43 +01:00
Narayan Kamath
8c1c0a6881 am 7f319c47: am 1dc550fa: Merge "Fix packing of values at offset 16."
* commit '7f319c47c8f5e947638eb1e5e73789ff83123bba':
  Fix packing of values at offset 16.
2014-07-01 10:23:44 +00:00
Narayan Kamath
b297591622 Fix packing of values at offset 16.
Our bitmask for setting the highest bit to 0 for
0b11100000 (0xef) instead of 0b01111111 (0x7f) so
we would end up setting bit 5 of each offset to
zero. Fix this and expand test coverage by adding
a fake language (tgp) that has this bit set in both
its bytes.

This issue was discovered while adding CTS tests for
"tgl".

Change-Id: Ibb6de03000951c907c252049771039ab7466187a
2014-06-30 16:20:27 +01:00
Narayan Kamath
c7400b0ce6 am 8c1c0a68: am 7f319c47: am 1dc550fa: Merge "Fix packing of values at offset 16."
* commit '8c1c0a6881b1507f9ae25d753b64de185a7615b2':
  Fix packing of values at offset 16.
2014-07-01 10:43:41 +00:00
Narayan Kamath
70bf06986a am b20b0629: am 71dfc7e9: Merge "Memory leak in parsePackage"
* commit 'b20b0629c2ea6a8e1f7bebd0791dd21e545a4605':
  Memory leak in parsePackage
2014-06-24 14:26:45 +00:00
Narayan Kamath
71dfc7e9ac Merge "Memory leak in parsePackage" 2014-06-24 06:22:45 +00:00
Henrik Baard
5f7ce10c93 Memory leak in parsePackage
The method parsePackage failes to delete some resources
in case of failures.

Added delete of "package" in the cases that was previously
missed.

Change-Id: I183e9ec5864c5ed18bb48410ab41317cb3d96bda
2014-06-23 14:03:46 +02:00
Adam Lesinski
fb600d60c0 Fix build break in log statement
For logging purposes, a uint32_t was being converted into
a void pointer, which on certain systems would be a conversion
to a different size.

Change-Id: I90af69ab975d84c9c8cbb1cce94ff4e9cc6edcf2
2014-06-18 13:00:28 -07:00
Adam Lesinski
f90f2f8dc3 Support multiple resource tables with same package
In order to support APK split features, the resource
table needs to support loading multiple resource
tables with the same package but potentially new set
of type IDs.

This adds some complexity as the type ID space changes
from dense and ordered to potentially sparse.

A ByteBucketArray is used to store the type IDs in
a memory efficient way that allows for fast retrieval.

In addition, the IDMAP format has changed. We no longer
need random access to the type data, since we store the
types differently. However, random access to entries of
a given type is still required.

Change-Id: If6f5be680b405b368941d9c1f2b5d2ddca964160
2014-06-18 19:20:08 +00:00
Adam Lesinski
f5cb96cfbb am 51736de1: am 4c488cca: Merge "[Asset Manager] Fix memory leakage bug"
* commit '51736de19a4c225a54cda73754d0f57aa68def4f':
  [Asset Manager] Fix memory leakage bug
2014-06-17 19:13:58 +00:00
Adam Lesinski
7efc0eb163 am f5cb96cf: am 51736de1: am 4c488cca: Merge "[Asset Manager] Fix memory leakage bug"
* commit 'f5cb96cfbbd2a7148b4b337097c94bea3f52d5f3':
  [Asset Manager] Fix memory leakage bug
2014-06-17 19:21:56 +00:00