diff options
author | Adam Lesinski <adamlesinski@google.com> | 2014-08-20 14:59:19 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2014-08-20 17:55:33 -0700 |
commit | 6022debdbcc4498736580640c6287b57872617a2 (patch) | |
tree | 17fa702311166e6f78ad07af3e767ca672817135 /tools/aapt/ResourceTable.cpp | |
parent | e02f340d9a0c4f841376c3db8ec93f65e7e58417 (diff) | |
download | frameworks_base-6022debdbcc4498736580640c6287b57872617a2.zip frameworks_base-6022debdbcc4498736580640c6287b57872617a2.tar.gz frameworks_base-6022debdbcc4498736580640c6287b57872617a2.tar.bz2 |
AAPT: Fix regression generating dynamic ref table for shared libraries
AAPT stopped generating dynamic reference tables for shared libraries.
Change-Id: Ib0025811bdca1a4756eb21080dd6b6bb3fc1ca3d
Diffstat (limited to 'tools/aapt/ResourceTable.cpp')
-rw-r--r-- | tools/aapt/ResourceTable.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index c98808f..49d8699 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -2712,6 +2712,16 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>& // The libraries this table references. Vector<sp<Package> > libraryPackages; + const ResTable& table = mAssets->getIncludedResources(); + const size_t basePackageCount = table.getBasePackageCount(); + for (size_t i = 0; i < basePackageCount; i++) { + size_t packageId = table.getBasePackageId(i); + String16 packageName(table.getBasePackageName(i)); + if (packageId > 0x01 && packageId != 0x7f && + packageName != String16("android")) { + libraryPackages.add(sp<Package>(new Package(packageName, packageId))); + } + } // Iterate through all data, collecting all values (strings, // references, etc). @@ -2720,22 +2730,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>& for (pi=0; pi<N; pi++) { sp<Package> p = mOrderedPackages.itemAt(pi); if (p->getTypes().size() == 0) { - // Empty, this is an imported package being used as - // a shared library. We do not flatten this package. - if (p->getAssignedId() != 0x01 && p->getName() != String16("android")) { - // This is not the base Android package, and it is a library - // so we must add a reference to the library when flattening. - libraryPackages.add(p); - } continue; - } else if (p->getAssignedId() == 0x00) { - if (mPackageType != SharedLibrary) { - fprintf(stderr, "ERROR: Package %s can not have ID=0x00 unless building a shared library.", - String8(p->getName()).string()); - return UNKNOWN_ERROR; - } - // If this is a shared library, we also include ourselves as an entry. - libraryPackages.add(p); } StringPool typeStrings(useUTF8); @@ -3147,7 +3142,8 @@ status_t ResourceTable::flattenLibraryTable(const sp<AaptFile>& dest, const Vect const size_t libStart = dest->getSize(); const size_t count = libs.size(); - ResTable_lib_header* libHeader = (ResTable_lib_header*) dest->editDataInRange(libStart, sizeof(ResTable_lib_header)); + ResTable_lib_header* libHeader = (ResTable_lib_header*) dest->editDataInRange( + libStart, sizeof(ResTable_lib_header)); memset(libHeader, 0, sizeof(*libHeader)); libHeader->header.type = htods(RES_TABLE_LIBRARY_TYPE); @@ -3163,7 +3159,8 @@ status_t ResourceTable::flattenLibraryTable(const sp<AaptFile>& dest, const Vect String8(libPackage->getName()).string(), (uint8_t)libPackage->getAssignedId())); - ResTable_lib_entry* entry = (ResTable_lib_entry*) dest->editDataInRange(entryStart, sizeof(ResTable_lib_entry)); + ResTable_lib_entry* entry = (ResTable_lib_entry*) dest->editDataInRange( + entryStart, sizeof(ResTable_lib_entry)); memset(entry, 0, sizeof(*entry)); entry->packageId = htodl(libPackage->getAssignedId()); strcpy16_htod(entry->packageName, libPackage->getName().string()); |