141 Commits

Author SHA1 Message Date
Ryan Mitchell
70e02d4285 Fix <overlay-config-signature> comments
Fix comments that refer to <overlay-config-signature> as
<config-signature>.

Bug: none
Test: build
Change-Id: I1d3e5e66ec3da993082f3441997b0d243d61520b
2020-10-14 14:53:01 -07:00
Ryan Mitchell
bf1f45b071 Remove malloc/free for inline overlay values
Remove malloc/free of android::ResTable_entry for inline overlay
values.

Add `target_entry_inline` to the idmap format to encode inline overlay
values separate from direct mapping of target resource to overlay
resource. This reduces the number of bytes needed to represent a direct
mapping of target resource to overlay resource from 9 bytes to 8 bytes
per entry.

Fixed all idmap alignment issues that required the framework to use
"#pragma pack(push, 1)" when loading idmaps.

Bug: 170341022
Test: idmap2_tests and libandroidfw_tests
Change-Id: Iab4d3902508f02773464724913e0ee966e3689e4
2020-10-14 14:52:52 -07:00
Zoran Jovanovic
0f942f99ca OMS: Add config_signature policy handling
Alongside SIGNATURE and ACTOR_SIGNATURE policies, add CONFIG_SIGNATURE
policy to overlayable that overlay fulfills if it is signed with the
same certificate as the reference package whose package name is
declared in 'config-signature' tag of SystemConfig and is vetted by
OMS that it's a system pre-installed package.

BUG: 158726924
TEST: regular aapt2, idmap2, OMS tests

Merged-In: I645ee72271496008742886274be0d63a2985201b
Change-Id: I645ee72271496008742886274be0d63a2985201b
2020-10-14 14:52:46 -07:00
Xin Li
628590d7ec Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)
Bug: 166295507
Merged-In: I3d92a6de21a938f6b352ec26dc23420c0fe02b27
Change-Id: Ifdb80563ef042738778ebb8a7581a97c4e3d96e2
2020-08-31 21:21:38 -07:00
Stephen Hines
39fa5efb15 Prefer = delete in place of DISALLOW_COPY_AND_ASSIGN.
Clang-tidy expects modernized code to prefer deleting copy constructors
and assignment operators to legacy macros.

/disk/android_trees/aosp-master-plus-llvm/frameworks/base/cmds/idmap2/tests/ResultTests.cpp:263:3: error: prefer deleting copy constructor and assignment operator over using macro 'DISALLOW_COPY_AND_ASSIGN' [modernize-replace-disal low-copy-and-assign-macro,-warnings-as-errors]
  DISALLOW_COPY_AND_ASSIGN(NoCopyContainer);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Bug: http://b/155835175
Test: mm in idmap2
Change-Id: I3bb29b48a478a67cbda959f47b271ccf8543a768
2020-08-22 10:08:56 -07:00
Treehugger Robot
ee9897ebaf Merge changes If69f69bf,I941b3c89 am: b3bd77fcbe am: a4060c02e8
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1326399

Change-Id: I64611036a17776bc3e11ebbf7014a76e596130d6
2020-06-10 23:09:24 +00:00
Stephen Hines
1588869c97 Use tidy_checks_as_errors list instead of -warnings-as-errors=* am: ab17065423 am: 52a2ca94a8
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1326398

Change-Id: If4d0a362ec646adabf135769c75fbce64a86a624
2020-06-10 23:09:09 +00:00
TreeHugger Robot
8f8122eed5 Merge "idmap2: Set aidl_return to true on success" into rvc-dev am: 6700d5e48c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11795074

Change-Id: I2d0cb691028bd264675625610eda332aed8d19f9
2020-06-10 17:33:03 +00:00
Ryan Mitchell
038a284f24 idmap2: Set aidl_return to true on success
idmap2d did not set the aidl return value to true when
IdmapHeader::IsUpToDate succeeded. This regressed OMS initialization
time.

This change sets aidl_return to true when the header is up-to-date and
also replaces usages of `uint32_t` for fulfilled_policies with
`PolicyBitmask`.

Bug: 158491243
Bug: 158535227
Bug: 158468195
Test: enable/disable overlays and onserve that verify succeeds
Test: change the values of enforce overlayable and fulfilled policies
      and confirm that idmap verify fails
Change-Id: If8febbfd0283d53211263690f85e2970706a33b7
2020-06-09 22:21:16 +00:00
Stephen Hines
328a29cc48 Add back missing tidy_checks, since tidy_checks_as_errors isn't enough
I unfortunately missed in the original testing that
`tidy_checks_as_errors` isn't sufficient by itself. Instead we need to
have both places with the same variables. A future change will make
Soong expand `tidy_checks_as_errors` into both locations appropriately.

Bug: 119328308
Test: WITH_TIDY=1 DEFAULT_GLOBAL_TIDY_CHECKS=*,-readability-*,-google-readability-*,-google-runtime-references,-cppcoreguidelines-*,-modernize-*,-llvm-*,-bugprone-narrowing-conversions,-misc-non-private-member-variables-in-classes,-misc-unused-parameters,-hicpp-*,-fuchsia-* mm
Change-Id: If69f69bf7861ba3569756270381f3f737366f2f0
Merged-In: If69f69bf7861ba3569756270381f3f737366f2f0
(cherry picked from commit 56af59395e0cdcebeb9b01813f752cc22468c4c0)
2020-06-09 00:15:34 -07:00
Stephen Hines
ab17065423 Use tidy_checks_as_errors list instead of -warnings-as-errors=*
This fixes a build break due to new code from
http://ag/I96f970e82b5243be01b205ac2cb6ab249c6100bc that inadvertently
triggers some false positives with other clang-tidy flags. Builds that
use a wider set of tidy flags (as specified in the test below) will
break since `-warnings-as-errors=*` turns all warnings into errors,
rather than just the ones that were specified as part of this
Android.bp. The preferred way of checking this is to use
`tidy_checks_as_errors`

Bug: 119328308
Test: WITH_TIDY=1 DEFAULT_GLOBAL_TIDY_CHECKS=*,-readability-*,-google-readability-*,-google-runtime-references,-cppcoreguidelines-*,-modernize-*,-llvm-*,-bugprone-narrowing-conversions,-misc-non-private-member-variables-in-classes,-misc-unused-parameters,-hicpp-*,-fuchsia-* mm
Change-Id: I941b3c89402e2cfa290b3829e2ac8ff7ea67ca3d
Merged-In: I941b3c89402e2cfa290b3829e2ac8ff7ea67ca3d
(cherry picked from commit 0bc64543270b16e1953b399dc73fa739132a6e5f)
2020-06-09 00:15:27 -07:00
Ryan Mitchell
1b4cda227a Merge "Add policies and enforce overlayable to header" into rvc-dev am: 2201f8b626
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11481145

Change-Id: I71ff9f46e1e5a5016291a062dd5389078527588f
2020-06-05 16:11:20 +00:00
Ryan Mitchell
ea84d2e299 Merge "Revert "Persist implicit overlay configurator actor policy"" into rvc-dev am: 13313007e5
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11725029

Change-Id: Ib923d89cec746f8ca6fe35806fd2d20f23d14e0d
2020-06-04 23:33:34 +00:00
Ryan Mitchell
e88ef74249 Revert "Persist implicit overlay configurator actor policy"
This reverts commit af93f5de66f09797345d2171306c9de2951bf85c.

The overlays.xml file version should not be reverted to 3.
Increasing the version caused b/158054824 so for devices that have not
upgraded to version 4, do not ignore a version 3 overlay file when
restoring settings. In a future change, we must create testing so that
version upgrades always migrate old overlays.xml files to new
overlays.xml files.

Bug: 157266239
Bug: 158054824
Change-Id: I3f8c49d30a1961a756bbed9b2ab01aeb1f887e55
2020-06-04 21:18:45 +00:00
Ryan Mitchell
a707013b78 Add policies and enforce overlayable to header
If the fulfilled policies change without the contents of the target
and overlay APKs changing, the idmap for the overlay should be
regenerated. This change adds fulfilled policies and enforce
overlayable to the idmap header so that idmap2d can determine if the
polices or enforce overlayable changed from what was used to generate
the idmap.

Bug: 119328308
Test: idmap2_tests
Test: atest RegenerateIdmapTest

Change-Id: I96f970e82b5243be01b205ac2cb6ab249c6100bc
2020-06-01 16:15:35 -07:00
Ryan Mitchell
b04a16d744 Merge "Persist implicit overlay configurator actor policy" into rvc-dev am: 41b850d0a8
Change-Id: I9337e44ed7c662d26e0518cca1f93e00d2952e71
2020-05-29 23:00:50 +00:00
Ryan Mitchell
af93f5de66 Persist implicit overlay configurator actor policy
This change does three things:

1) If an overlay targets a package that does not declare an overlayable
   and the overlay fulfills the actor policy, the overlay can override
   any resource in the target,
2) The actor policy is now implicitly granted to overlays signed with
   the same signature as the configurator that target white-listed
   target packages regardless of whether or not the target defines an
   overlayable.
3) If an overlay was previously granted the actor policy through the
   mechanism specified in (2), the overlay will continue to fulfill
   the actor policy even if the configurator is removed, changes
   signature, changes to a different package, or the list of
   configurator targets changes. If the overlay target package or
   target overlayable name changes, the persisted setting will be
   reset.

Bug: 157244814
Bug: 157266239
Test: atest OverlayManagerServiceImplTests
Test: idmap2_tests
Change-Id: Iff3937849ad898b1b2d74c2c632a4cdf7690fe10
2020-05-28 10:38:15 -07:00
Ryan Mitchell
04fa9c9f57 Merge "Reduce OMS start time" into rvc-dev am: 84a84ac62a
Change-Id: I9a419e6be7cc950693e39c5d474e3c60161c4b69
2020-04-28 23:47:58 +00:00
Ryan Mitchell
84a84ac62a Merge "Reduce OMS start time" into rvc-dev 2020-04-28 23:44:03 +00:00
Ryan Mitchell
7d53f19089 Reduce OMS start time
This change attempts to reduce the amount of time initializing the
OMS. The change:
1) Reduces the amount of time between subsequent attempts to connect
   to the idmap2d service when it is not alive.
2) Caches package infos retrieved from getOverlayPackages
3) Caches the crc of the android package to preventing having to
   retrieve it for every overlay package targeting the framework

This chance reduced OMS start up time from ~500ms to ~100ms on a
Pixel 3. If the idmap2d service is running when system sever starts
then start up time will be around ~70ms.

Bug: 151481016
Test: adb shell stop && adb shell start && [capture trace]

Change-Id: I6137c385baf099413b62e98557419fffb9fd2d93
2020-04-28 18:07:00 +00:00
Jiyong Park
fe22da569d Merge "Mark some aidl_interface modules as unstable" into rvc-dev am: 28665792a2
Change-Id: I87f2b5384ad7f82374597a75de4595e380564e55
2020-04-20 05:23:12 +00:00
Jiyong Park
db589dded4 Mark some aidl_interface modules as unstable
With b/152655547, all aidl_interface modules are considered as stable
unless it is explicitly with "unstable: true". This change marks the
aidl_interface that are not used across updatable module bounraries
as unstable, so that the build system does not run the API
dumping/checking on them.

Bug: 152655547
Test: m
Change-Id: I1257c66de6dd42b2d32d47ed74cb2878f79d14fb
2020-04-13 13:00:47 +09:00
Ryan Mitchell
cca1593b23 Merge changes from topic "invalidate_idmap" into rvc-dev am: 6cb79cdfb7
Change-Id: Iec3d0e3bab28964442c5aada00c2586e284feb92
2020-04-10 15:53:05 +00:00
Ryan Mitchell
09943af999 Test that upgrading target apk invalidates idmap
This change adds tests that run in presubmit to verify that updating
the target APK invalidates the idmap for overlays targeting the
target.

Bug: 147794117
Bug: 150877400
Test: atest PackagedUpgradedTest
Change-Id: I0268ea99dc7beb4bbc7009a67d9929e2d82862cb
2020-04-07 12:15:03 -07:00
Ryan Mitchell
a90930528d Invalidate idmap when target updates
When the target package update, check if the idmap file must change.
If so, propagate the idmap changes to the targets overlay paths, and
invalidate cached overlay ApkAssets in ResourcesManager.

Bug: 147794117
Bug: 150877400
Test: OverlayRemountedTest
Test: libandroidfw_tests
Change-Id: I6115c30bae3672b188a5ff270720a0eea15b43b5
2020-04-07 12:14:51 -07:00
Ryan Mitchell
bb99b2afce Merge "Consider target path when verifyIdmap." into rvc-dev am: fa0f02a91c
Change-Id: Iad2e29a73f4b7b11c84fa30fd376a5d25e3c197c
2020-03-30 15:49:11 +00:00
hg.choi
a3a68132b5 Consider target path when verifyIdmap.
Updating new version package with changing resource id,
Overlay idmap still retain same resource id and target path of prebuilt package.
Consequentially overlay can not apply to new update resource id.

As is : VerifyIdmap only verify uptodate of idmap.
To be : Verify change of target path.

Bug: 147794117
Bug: 150877400
Test: idmap2_tests

Change-Id: I2ed6b5ba49aeb1b24625866daefea56c9766baef
2020-03-26 12:35:58 -07:00
Treehugger Robot
6982a7dc69 Merge "Fix idmap2 uninitialized variables" 2020-03-24 01:47:12 +00:00
Ryan Mitchell
a7b7de59e0 Fix idmap2 uninitialized variables
Some primitives were not initialized to a default value causing
--ignore-overlayable and --verbose to default to true.

Bug: 148181123
Test: idmap2_tests
Change-Id: If87ba76b7d24803f46b71ef36befa12f25916680
Merged-In: Ic9dbd3e9a768beb39ac677ff294b0fca5ee8f9d2
2020-03-24 01:02:38 +00:00
Jooyung Han
66c567a8c4 Use aidl::nullable for nullable type in C++
To reduce the discrepance between old code which still uses
std::unique_ptr and new code using std::optional.

This might help to avoid merge-conflicts between branches.

Bug: 144773267
Test: m
Merged-In: Ie3196ee5cce17d77950eea9479d2cc1406e9e674
Merged-In: I33822bc76ef87637d5408849f64a0607e121792e
Change-Id: I33822bc76ef87637d5408849f64a0607e121792e
(cherry picked from commit ad62e8cbf5cf6083568f6f230ef7d73ad8776971)

Exempt-From-Owner-Approval: cherry-pick from master with owner's approval
2020-03-12 11:36:33 +00:00
Jooyung Han
c85cc13b5a Use aidl::nullable for nullable type in C++
To reduce the discrepance between old code which still uses
std::unique_ptr and new code using std::optional.

This might help to avoid merge-conflicts between branches.

Bug: 144773267
Test: m
(cherry picked from commit ad62e8cbf5cf6083568f6f230ef7d73ad8776971)

Change-Id: Ie3196ee5cce17d77950eea9479d2cc1406e9e674
Merged-In: I33822bc76ef87637d5408849f64a0607e121792e

Exempt-From-Owner-Approval: approved from master
2020-03-12 08:42:33 +00:00
Jooyung Han
aa7d5dd5f9 Revert "Use aidl::nullable for nullable type in C++"
Revert submission 10632869-nullable-compat-rvc-dev-plus-aosp

Reason for revert: incorrect merged-in line
Reverted Changes:
I33822bc76:Use aidl::nullable for nullable type in C++
I378dbf848:Add aidl::nullable type for nullable in AIDL

Change-Id: I98d4041770fe97b622aaaf8c829b97259bd82e2c
Exempt-From-Owner-Approval: revert wrong submission
2020-03-12 07:05:54 +00:00
Jooyung Han
4b1d2889dc Use aidl::nullable for nullable type in C++
To reduce the discrepance between old code which still uses
std::unique_ptr and new code using std::optional.

This might help to avoid merge-conflicts between branches.

Bug: 144773267
Test: m
Merged-In I33822bc76ef87637d5408849f64a0607e121792e
Change-Id: I33822bc76ef87637d5408849f64a0607e121792e
(cherry picked from commit ad62e8cbf5cf6083568f6f230ef7d73ad8776971)

Exempt-From-Owner-Approval: cherry-pick from master
2020-03-12 06:22:10 +00:00
Automerger Merge Worker
2f586d9c9f Merge "Allow bugprone-* warnings until they are all fixed." am: 7f58bef392 am: 129beaf75e
Change-Id: I80db8c6c9c08b588db5c6276fdc3f54185fc9321
2020-03-04 22:59:05 +00:00
Chih-Hung Hsieh
db84f188ee Allow bugprone-* warnings until they are all fixed.
Test: WITH_TIDY=1 make checkbuild
Change-Id: I93e9526d66ab9ac88672ccd77eb409603482ea47
2020-03-03 20:09:15 -08:00
Automerger Merge Worker
832fe4a424 Merge changes from topic "actor-signature-policy-rvc-dev" into rvc-dev am: b0c5105b2d
Change-Id: I55a362a896901a09fc1bf49f9129455d53b2d440
2020-02-27 18:32:31 +00:00
Jooyung Han
f452968ae8 Use optional for nullable types
AIDL generates optional<T> for nullable T types for C++, which is more
efficient and idomatic and easy to use.

Bug: 144773267
Test: build/flash/boot
Merged-In: I90cf2ce1193c479179687d71a5c1416f6cdf0b16
Change-Id: I90cf2ce1193c479179687d71a5c1416f6cdf0b16
(cherry picked from commit ff7f4279bd7fa33577f5f4d46aa9de322fb625d4)

Exempt-From-Owner-Approval: CP from master
2020-02-27 03:05:19 +00:00
Winson
f56ade365a Actor signature overlayable policy
There are cases where an app can ship overlays for itself,
but the "signature" policy as described would open up
a vulnerability by allowing the system actor to create
and sign any arbitrary overlay that will apply to the target.

To prevent this, redefine "signature" as target package only,
and introduce "actor" for checking against the actor signature.
Any app that wishes to use both can include both policies.

Bug: 130563563

Test: m aapt2_tests idmapt2_tests and run from host test output
Test: atest libandroidfw_tests

Change-Id: I1c583a5b37f4abbeb18fc6a35c502377d8977a41
2020-02-26 15:59:44 -08:00
Winson
62ac8b56a9 Refactor overlayable policy
To make it easier to add the actor policy in a follow up CL,
move most of the policy handling to a central location.

The strings and transformation between strings and flags is
now handled in libidmap2policies, with libandroidfw
containing the single source of policy flags.

This also extracts all the test resource IDs into an R.h
so they can be swapped without having to edit a dozen files
each time.

Bug: 130563563

Test: m aapt2_tests idmapt2_tests and run from host test output
Test: atest libandroidfw_tests

Change-Id: Ie533c9cebf938215df7586f00c38763ae467e606
2020-02-26 15:59:43 -08:00
Automerger Merge Worker
09927af859 Merge "Call verify in create-multiple" into rvc-dev am: 0c9978cdce
Change-Id: I1fab929004c20d63b18e6b94f39fb44b2ab9d19f
2020-02-26 18:19:34 +00:00
Jooyung Han
605e39f5fd Use optional for nullable types
AIDL generates optional<T> for nullable T types for C++, which is more
efficient and idomatic and easy to use.

Bug: 144773267
Test: build/flash/boot
Merged-In: I90cf2ce1193c479179687d71a5c1416f6cdf0b16
Change-Id: I90cf2ce1193c479179687d71a5c1416f6cdf0b16
(cherry picked from commit 53be7f4db497a05256407bd4c499a8fafc8e095d)

Exempt-From-Owner-Approval: CP from master
2020-02-26 04:00:40 +00:00
Ryan Mitchell
625ebd3911 Call verify in create-multiple
Idmap Scan previously called Verify before calling Create. OverlayConfig
should do the same. Removing the verify call caused b/149784008.

Since sSystem is marked @UnsupportedAppUsage,
createSystemAssetsInZygoteLocked could potentially be invoked in the
system server. Rather than attempting to create the overlays a second
time, first check whether the idmap must be invalidated.

Bug: 149784008
Test: running forrest using web UI
Change-Id: I5d995a87e8552bd156fb5415b2c46a08f4c1d6c5
2020-02-26 00:53:13 +00:00
Ryan Mitchell
f2392c6f56 Merge changes from topic "rro_config"
* changes:
  Make overlay config work with immutable non-android overlays
  Add xml configuration of RROs
  Extract system partitions into standalone class
2020-02-19 04:37:26 +00:00
Ryan Mitchell
9b93942a80 Add xml configuration of RROs
This change adds the ability to configure the priority, default enable
state, and mutability (previously know as staticness) of an overlay.
Rather than overlays configuring themselves, the system can configure
overlays relative to each other.

An example configuration file looks like:
<config>
    <merge path="auto-generated.xml" />
    <overlay package="com.example.one" mutable="false"
             enabled="true"/>
    <overlay package="com.example.two" mutable="false"
             enabled="true"/>
    <overlay package="com.example.three" enabled="true"/>
</config>

The <overlay> tag configures the overlay while the <merge> tag allows
additional configuration files to be included at a position within
the configuration file.

If the configuration file is not present for a partition, the legacy
android:isStatic and android:priority will continue to configure the
overlays in the partition. Once at least one configuration file has
been defined in any partition, strict partition precedence will be
enforced and overlays on separate partitions will no longer be able
to use android:priority to reorder themselves conversely from the
overlay partition precedence.

The order of the system partitions from least to greatest precedence
is system, vendor, odm, oem, product, system_ext.

Bug: 135048762
Test: atest OverlayConfigTest
Change-Id: If57e8caa9b881f9d424ef48bba80b18cc8b7b943
2020-02-18 16:13:22 -08:00
Zoran Jovanovic
9c20f729c7 idmap2: support Lookup for arrays
Lookup of array resource in idmap2 would result in an error.
The reason was that on AssetManager2::GetValue call bags were
not taken into consideration.

Acquire the bag as well and traverse through it to fetch all
its values.

Bug: 134426097
Test: run `adb exec-out lookup` on a known array resource
Change-Id: Ife066154e74d2ee8bd7b273030e75d8448558437
Signed-off-by: Zoran Jovanovic <zoran.jovanovic@sony.com>
2020-02-10 14:22:54 -08:00
Ryan Mitchell
5035d66aee Fix resourcesMap to work with shared libraries
android:resourcesMap is not working at all with shared libraries.
This change fixes that so overlays built as shared libraries can
use the attribute.

Bug: None
Test: idmap2_tests
Change-Id: I767481f88c58892a3818a919616056291b09b57e
2020-02-06 16:25:35 -08:00
Ryan Mitchell
ee4a564d4f Allow for overlaying dynamic shared libraries
Overlays targeting shared libraries should be loaded into the
resources of every target that depends on the shared library.

Static shared libraries are currently not supported because overlays
should override all versions of static shared libraries and there is
not currently support for an overlay targeting multiple APKs.

Also created a test instrumentation and host test suite for testing
overlays and packages on the system image.

Bug: 140790224
Test: atest OverlayRemountedTest
Change-Id: I20a217b6368d6cf92b2b9f46908fd58012933f72
2020-01-10 23:20:19 +00:00
Mårten Kongstad
35cb783acb idmap2: add sections to 'idmap2 dump' output
With the introduction of the debug info, the output of 'idmap2 dump' is
becoming messy. Add sections to combat this.

Example output:

  $ idmap2 create \
        --target-apk-path frameworks/base/cmds/idmap2/tests/data/target/target.apk \
        --overlay-apk-path frameworks/base/cmds/idmap2/tests/data/overlay/overlay.apk \
        --idmap-path /tmp/a.idmap \
        --policy public \
        --policy oem

  $ idmap2 dump --idmap-path /tmp/a.idmap
  Paths:
      target apk path  : frameworks/base/cmds/idmap2/tests/data/target/target.apk
      overlay apk path : frameworks/base/cmds/idmap2/tests/data/overlay/overlay.apk
  Debug info:
      I fulfilled_policies=oem|public enforce_overlayable=true
      W failed to find resource "integer/not_in_target" in target resources
  Mapping:
      0x7f010000 -> 0x7f010000 integer/int1
      0x7f02000c -> 0x7f020000 string/str1
  [...]

Test: idmap2_tests
Change-Id: Ie42f97484b31af0c0b34f1856d321533904dbf7a
2019-12-20 07:03:16 -08:00
Mårten Kongstad
d7e8a534d0 idmap2: add debug information to idmap file format
Add a new variable length string to the idmap file format. This string will
hold debug information like fulfilled policies and any warnings triggered while
generating the file.

Bump the idmap version to 3.

Adjust the idmap header definition in ResourceType.h to take the new string
into account.

Example debug info:

  $ idmap2 create \
        --target-apk-path frameworks/base/cmds/idmap2/tests/data/target/target.apk \
        --overlay-apk-path frameworks/base/cmds/idmap2/tests/data/overlay/overlay.apk \
        --idmap-path /tmp/a.idmap \
        --policy public \
        --policy oem

  $ idmap2 dump --idmap-path /tmp/a.idmap
  target apk path  : frameworks/base/cmds/idmap2/tests/data/target/target.apk
  overlay apk path : frameworks/base/cmds/idmap2/tests/data/overlay/overlay.apk
  I fulfilled_policies=oem|public enforce_overlayable=true
  W failed to find resource "integer/not_in_target" in target resources
  0x7f010000 -> 0x7f010000 integer/int1
  0x7f02000c -> 0x7f020000 string/str1
  [...]

  $ idmap2 dump --idmap-path /tmp/a.idmap --verbose
  00000000: 504d4449  magic
  00000004: 00000003  version
  00000008: 76a20829  target crc
  0000000c: c054fb26  overlay crc
  00000010: ........  target path: frameworks/base/cmds/idmap2/tests/data/target/target.apk
  00000110: ........  overlay path: frameworks/base/cmds/idmap2/tests/data/overlay/overlay.apk
  00000210: ........  debug info: ...
  00000294:       7f  target package id
  00000295:       7f  overlay package id
  [...]

Also, tell cpplint to accept non-const references as function parameters:
they make more sense as out-parameters than pointers that are assumed to
be non-null.

Also, switch to regular expressions in the RawPrintVisitorTests: no more
manual fixups of the stream offsets! Tell cpplint that the <regex>
header is OK to use.

Bug: 140790707
Test: idmap2_tests
Change-Id: Ib94684a3b4001240321801e21af8e132fbcf6609
2019-12-19 16:51:51 +00:00
Ryan Mitchell
8a891d86ab Allow for RRO internal referencing
This change allows RROs to reference their own internal resources as
expected.

Overlays are loaded as shared libraries so they can have their own
resource id space that does not conflict with the resource id space of
the target or other overlays.

References to overlay resources that override target resources now
appear as references to the target resources.

Overlay values that are inlined into the xml file specified using
android:overlayResources are now able to be used at runtime.

See go/rro-references for more information.

Bug: 135943783
Test: idmap2_tests
Test: libandroidfw_tests
Change-Id: Ie349c56d7fd3f7d94b7d595ed6d01dc6b59b6178
2019-10-17 13:09:33 -07:00