Loading tools/aapt/AaptAssets.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -964,6 +964,7 @@ void AaptAssets::addResource(const String8& leafName, const String8& path, subdir->addFile(leafName, grr); } ssize_t AaptAssets::slurpFromArgs(Bundle* bundle) { int count; Loading tools/aapt/Command.cpp +3 −10 Original line number Diff line number Diff line Loading @@ -2501,21 +2501,14 @@ static status_t addResourcesToBuilder(const sp<AaptDir>& dir, const sp<ApkBuilde const size_t numConfigs = gp->getFiles().size(); for (size_t j = 0; j < numConfigs; j++) { status_t err = NO_ERROR; const sp<AaptFile>& file = gp->getFiles().valueAt(j); if (!file->hasData()) { // Empty files do not get written. continue; } if (ignoreConfig) { err = builder->getBaseSplit()->addEntry(gp->getPath(), file); err = builder->getBaseSplit()->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); } else { err = builder->addEntry(gp->getPath(), file); err = builder->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); } if (err != NO_ERROR) { fprintf(stderr, "Failed to add %s (%s) to builder.\n", gp->getPath().string(), file->getPrintableSource().string()); gp->getPath().string(), gp->getFiles()[j]->getPrintableSource().string()); return err; } } Loading tools/aapt/Resource.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -1403,8 +1403,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil String8 src = it.getFile()->getPrintableSource(); err = compileXmlFile(bundle, assets, String16(it.getBaseName()), it.getFile(), &table, xmlFlags); // Only verify IDs if there was no error and the file is non-empty. if (err == NO_ERROR && it.getFile()->hasData()) { if (err == NO_ERROR) { ResXMLTree block; block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); checkForIds(src, block); Loading Loading @@ -1551,7 +1550,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil String8 src = it.getFile()->getPrintableSource(); err = compileXmlFile(bundle, assets, String16(it.getBaseName()), it.getFile(), &table, xmlFlags); if (err == NO_ERROR && it.getFile()->hasData()) { if (err == NO_ERROR) { ResXMLTree block; block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); checkForIds(src, block); Loading Loading @@ -1599,7 +1598,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil err = compileXmlFile(bundle, assets, workItem.resourceName, workItem.xmlRoot, workItem.file, &table, xmlCompilationFlags); if (err == NO_ERROR && workItem.file->hasData()) { if (err == NO_ERROR) { assets->addResource(workItem.resPath.getPathLeaf(), workItem.resPath, workItem.file, Loading tools/aapt/ResourceTable.cpp +0 −78 Original line number Diff line number Diff line Loading @@ -78,13 +78,6 @@ status_t compileXmlFile(const Bundle* bundle, ResourceTable* table, int options) { if (table->versionForCompat(bundle, resourceName, target, root)) { // The file was versioned, so stop processing here. // The resource entry has already been removed and the new one added. // The `target` file will be empty, but empty files do not get written to the APK. return NO_ERROR; } if ((options&XML_COMPILE_STRIP_WHITESPACE) != 0) { root->removeWhitespace(true, NULL); } else if ((options&XML_COMPILE_COMPACT_WHITESPACE) != 0) { Loading Loading @@ -4765,77 +4758,6 @@ static bool IsTransitionElement(const String16& name) { return false; } bool ResourceTable::versionForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& target, const sp<XMLNode>& root) { XMLNode* node = root.get(); while (node->getType() != XMLNode::TYPE_ELEMENT) { // We're assuming the root element is what we're looking for, which can only be under a // bunch of namespace declarations. if (node->getChildren().size() != 1) { // Not sure what to do, bail. return false; } node = node->getChildren().itemAt(0).get(); } if (node->getElementNamespace().size() != 0) { // Not something we care about. return false; } int versionedSdk = 0; if (node->getElementName() == String16("adaptive-icon")) { versionedSdk = SDK_O; } const int minSdkVersion = getMinSdkVersion(bundle); const ConfigDescription config(target->getGroupEntry().toParams()); if (versionedSdk <= minSdkVersion || versionedSdk <= config.sdkVersion) { return false; } sp<ConfigList> cl = getConfigList(String16(mAssets->getPackage()), String16(target->getResourceType()), resourceName); if (!shouldGenerateVersionedResource(cl, config, versionedSdk)) { return false; } // Remove the original entry. cl->removeEntry(config); // We need to wholesale version this file. ConfigDescription newConfig(config); newConfig.sdkVersion = versionedSdk; sp<AaptFile> newFile = new AaptFile(target->getSourceFile(), AaptGroupEntry(newConfig), target->getResourceType()); String8 resPath = String8::format("res/%s/%s.xml", newFile->getGroupEntry().toDirName(target->getResourceType()).string(), String8(resourceName).string()); resPath.convertToResPath(); // Add a resource table entry. addEntry(SourcePos(), String16(mAssets->getPackage()), String16(target->getResourceType()), resourceName, String16(resPath), NULL, &newConfig); // Schedule this to be compiled. CompileResourceWorkItem item; item.resourceName = resourceName; item.resPath = resPath; item.file = newFile; item.xmlRoot = root->clone(); item.needsCompiling = false; // This step occurs after we parse/assign, so we don't need // to do it again. mWorkQueue.push(item); // Now mark the old entry as deleted. return true; } status_t ResourceTable::modifyForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& target, Loading tools/aapt/ResourceTable.h +0 −7 Original line number Diff line number Diff line Loading @@ -203,9 +203,6 @@ public: size_t numLocalResources() const; bool hasResources() const; bool versionForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& file, const sp<XMLNode>& root); status_t modifyForCompat(const Bundle* bundle); status_t modifyForCompat(const Bundle* bundle, const String16& resourceName, Loading Loading @@ -434,10 +431,6 @@ public: mEntries.add(config, entry); } void removeEntry(const ResTable_config& config) { mEntries.removeItem(config); } const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } private: const String16 mName; Loading Loading
tools/aapt/AaptAssets.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -964,6 +964,7 @@ void AaptAssets::addResource(const String8& leafName, const String8& path, subdir->addFile(leafName, grr); } ssize_t AaptAssets::slurpFromArgs(Bundle* bundle) { int count; Loading
tools/aapt/Command.cpp +3 −10 Original line number Diff line number Diff line Loading @@ -2501,21 +2501,14 @@ static status_t addResourcesToBuilder(const sp<AaptDir>& dir, const sp<ApkBuilde const size_t numConfigs = gp->getFiles().size(); for (size_t j = 0; j < numConfigs; j++) { status_t err = NO_ERROR; const sp<AaptFile>& file = gp->getFiles().valueAt(j); if (!file->hasData()) { // Empty files do not get written. continue; } if (ignoreConfig) { err = builder->getBaseSplit()->addEntry(gp->getPath(), file); err = builder->getBaseSplit()->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); } else { err = builder->addEntry(gp->getPath(), file); err = builder->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); } if (err != NO_ERROR) { fprintf(stderr, "Failed to add %s (%s) to builder.\n", gp->getPath().string(), file->getPrintableSource().string()); gp->getPath().string(), gp->getFiles()[j]->getPrintableSource().string()); return err; } } Loading
tools/aapt/Resource.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -1403,8 +1403,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil String8 src = it.getFile()->getPrintableSource(); err = compileXmlFile(bundle, assets, String16(it.getBaseName()), it.getFile(), &table, xmlFlags); // Only verify IDs if there was no error and the file is non-empty. if (err == NO_ERROR && it.getFile()->hasData()) { if (err == NO_ERROR) { ResXMLTree block; block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); checkForIds(src, block); Loading Loading @@ -1551,7 +1550,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil String8 src = it.getFile()->getPrintableSource(); err = compileXmlFile(bundle, assets, String16(it.getBaseName()), it.getFile(), &table, xmlFlags); if (err == NO_ERROR && it.getFile()->hasData()) { if (err == NO_ERROR) { ResXMLTree block; block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); checkForIds(src, block); Loading Loading @@ -1599,7 +1598,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil err = compileXmlFile(bundle, assets, workItem.resourceName, workItem.xmlRoot, workItem.file, &table, xmlCompilationFlags); if (err == NO_ERROR && workItem.file->hasData()) { if (err == NO_ERROR) { assets->addResource(workItem.resPath.getPathLeaf(), workItem.resPath, workItem.file, Loading
tools/aapt/ResourceTable.cpp +0 −78 Original line number Diff line number Diff line Loading @@ -78,13 +78,6 @@ status_t compileXmlFile(const Bundle* bundle, ResourceTable* table, int options) { if (table->versionForCompat(bundle, resourceName, target, root)) { // The file was versioned, so stop processing here. // The resource entry has already been removed and the new one added. // The `target` file will be empty, but empty files do not get written to the APK. return NO_ERROR; } if ((options&XML_COMPILE_STRIP_WHITESPACE) != 0) { root->removeWhitespace(true, NULL); } else if ((options&XML_COMPILE_COMPACT_WHITESPACE) != 0) { Loading Loading @@ -4765,77 +4758,6 @@ static bool IsTransitionElement(const String16& name) { return false; } bool ResourceTable::versionForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& target, const sp<XMLNode>& root) { XMLNode* node = root.get(); while (node->getType() != XMLNode::TYPE_ELEMENT) { // We're assuming the root element is what we're looking for, which can only be under a // bunch of namespace declarations. if (node->getChildren().size() != 1) { // Not sure what to do, bail. return false; } node = node->getChildren().itemAt(0).get(); } if (node->getElementNamespace().size() != 0) { // Not something we care about. return false; } int versionedSdk = 0; if (node->getElementName() == String16("adaptive-icon")) { versionedSdk = SDK_O; } const int minSdkVersion = getMinSdkVersion(bundle); const ConfigDescription config(target->getGroupEntry().toParams()); if (versionedSdk <= minSdkVersion || versionedSdk <= config.sdkVersion) { return false; } sp<ConfigList> cl = getConfigList(String16(mAssets->getPackage()), String16(target->getResourceType()), resourceName); if (!shouldGenerateVersionedResource(cl, config, versionedSdk)) { return false; } // Remove the original entry. cl->removeEntry(config); // We need to wholesale version this file. ConfigDescription newConfig(config); newConfig.sdkVersion = versionedSdk; sp<AaptFile> newFile = new AaptFile(target->getSourceFile(), AaptGroupEntry(newConfig), target->getResourceType()); String8 resPath = String8::format("res/%s/%s.xml", newFile->getGroupEntry().toDirName(target->getResourceType()).string(), String8(resourceName).string()); resPath.convertToResPath(); // Add a resource table entry. addEntry(SourcePos(), String16(mAssets->getPackage()), String16(target->getResourceType()), resourceName, String16(resPath), NULL, &newConfig); // Schedule this to be compiled. CompileResourceWorkItem item; item.resourceName = resourceName; item.resPath = resPath; item.file = newFile; item.xmlRoot = root->clone(); item.needsCompiling = false; // This step occurs after we parse/assign, so we don't need // to do it again. mWorkQueue.push(item); // Now mark the old entry as deleted. return true; } status_t ResourceTable::modifyForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& target, Loading
tools/aapt/ResourceTable.h +0 −7 Original line number Diff line number Diff line Loading @@ -203,9 +203,6 @@ public: size_t numLocalResources() const; bool hasResources() const; bool versionForCompat(const Bundle* bundle, const String16& resourceName, const sp<AaptFile>& file, const sp<XMLNode>& root); status_t modifyForCompat(const Bundle* bundle); status_t modifyForCompat(const Bundle* bundle, const String16& resourceName, Loading Loading @@ -434,10 +431,6 @@ public: mEntries.add(config, entry); } void removeEntry(const ResTable_config& config) { mEntries.removeItem(config); } const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } private: const String16 mName; Loading