AAPT2: Shared library support
Test: make aapt2_tests
Change-Id: I98dddf1367e6c0ac425bb20be46e6ff05f4f2f45
diff --git a/tools/aapt2/unflatten/BinaryResourceParser.cpp b/tools/aapt2/unflatten/BinaryResourceParser.cpp
index 7098fe9..29a921c 100644
--- a/tools/aapt2/unflatten/BinaryResourceParser.cpp
+++ b/tools/aapt2/unflatten/BinaryResourceParser.cpp
@@ -248,6 +248,12 @@
}
break;
+ case android::RES_TABLE_LIBRARY_TYPE:
+ if (!ParseLibrary(parser.chunk())) {
+ return false;
+ }
+ break;
+
default:
context_->GetDiagnostics()->Warn(
DiagMessage(source_)
@@ -395,6 +401,21 @@
return true;
}
+bool BinaryResourceParser::ParseLibrary(const ResChunk_header* chunk) {
+ DynamicRefTable dynamic_ref_table;
+ if (dynamic_ref_table.load(reinterpret_cast<const ResTable_lib_header*>(chunk)) != NO_ERROR) {
+ return false;
+ }
+
+ const KeyedVector<String16, uint8_t>& entries = dynamic_ref_table.entries();
+ const size_t count = entries.size();
+ for (size_t i = 0; i < count; i++) {
+ table_->included_packages_[entries.valueAt(i)] =
+ util::Utf16ToUtf8(StringPiece16(entries.keyAt(i).string()));
+ }
+ return true;
+}
+
std::unique_ptr<Item> BinaryResourceParser::ParseValue(
const ResourceNameRef& name, const ConfigDescription& config,
const Res_value* value, uint16_t flags) {