From cd78febeac2956525931b1f0f15ad507bec6a24c Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 18 Dec 2019 15:20:48 -0800 Subject: Recognize dynamic res ids as valid Shared libraries are assigned package id 0. Resource ids that start with 0x00 are not invalid. This change changes is_valid to accept dynamic resource ids and adds an is_valid_static method for when an id must have a non-zero package id. This also fixes an issue that made layouts in shared libraries that use internal attributes exclude compiled resource ids from the binay xml output. Bug: 146491000 Test: Build a shared library with a layout that uses app attributes as well as android attribute and verify that all attributes have assigned resource ids using `aapt2 dump xmltree` Change-Id: Ibc0407c610ffc98d7aaf233c37c065912ab0d516 --- tools/aapt2/Resource.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'tools/aapt2/Resource.h') diff --git a/tools/aapt2/Resource.h b/tools/aapt2/Resource.h index 67ba895e51d1..c49c370bcc44 100644 --- a/tools/aapt2/Resource.h +++ b/tools/aapt2/Resource.h @@ -147,10 +147,11 @@ struct ResourceId { ResourceId(uint32_t res_id); // NOLINT(google-explicit-constructor) ResourceId(uint8_t p, uint8_t t, uint16_t e); - bool is_valid() const; + // Returns true if the ID is a valid ID that is not dynamic (package ID cannot be 0) + bool is_valid_static() const; // Returns true if the ID is a valid ID or dynamic ID (package ID can be 0). - bool is_valid_dynamic() const; + bool is_valid() const; uint8_t package_id() const; uint8_t type_id() const; @@ -233,11 +234,11 @@ inline ResourceId::ResourceId(uint32_t res_id) : id(res_id) {} inline ResourceId::ResourceId(uint8_t p, uint8_t t, uint16_t e) : id((p << 24) | (t << 16) | e) {} -inline bool ResourceId::is_valid() const { +inline bool ResourceId::is_valid_static() const { return (id & 0xff000000u) != 0 && (id & 0x00ff0000u) != 0; } -inline bool ResourceId::is_valid_dynamic() const { +inline bool ResourceId::is_valid() const { return (id & 0x00ff0000u) != 0; } -- cgit v1.2.3-59-g8ed1b