diff options
Diffstat (limited to 'tools')
4 files changed, 58 insertions, 10 deletions
diff --git a/tools/aapt/ApkBuilder.h b/tools/aapt/ApkBuilder.h index a4b7d4a..db23c84 100644 --- a/tools/aapt/ApkBuilder.h +++ b/tools/aapt/ApkBuilder.h @@ -55,6 +55,10 @@ public: return mSplits; } + android::sp<ApkSplit> getBaseSplit() { + return mSplits[0]; + } + void print() const; private: diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index 8f2d852..4e0a9fe 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -453,7 +453,7 @@ String8 getComponentName(String8 &pkgName, String8 &componentName) { return retStr; } -static void printCompatibleScreens(ResXMLTree& tree) { +static void printCompatibleScreens(ResXMLTree& tree, String8* outError) { size_t len; ResXMLTree::event_code_t code; int depth = 0; @@ -471,7 +471,12 @@ static void printCompatibleScreens(ResXMLTree& tree) { continue; } depth++; - String8 tag(tree.getElementName(&len)); + const char16_t* ctag16 = tree.getElementName(&len); + if (ctag16 == NULL) { + *outError = "failed to get XML element name (bad string pool)"; + return; + } + String8 tag(ctag16); if (tag == "screen") { int32_t screenSize = getIntegerAttribute(tree, SCREEN_SIZE_ATTR, NULL, -1); @@ -536,7 +541,12 @@ Vector<String8> getNfcAidCategories(AssetManager& assets, String8 xmlPath, bool while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { if (code == ResXMLTree::END_TAG) { depth--; - String8 tag(tree.getElementName(&len)); + const char16_t* ctag16 = tree.getElementName(&len); + if (ctag16 == NULL) { + *outError = "failed to get XML element name (bad string pool)"; + return Vector<String8>(); + } + String8 tag(ctag16); if (depth == 0 && tag == serviceTagName) { withinApduService = false; @@ -544,7 +554,12 @@ Vector<String8> getNfcAidCategories(AssetManager& assets, String8 xmlPath, bool } else if (code == ResXMLTree::START_TAG) { depth++; - String8 tag(tree.getElementName(&len)); + const char16_t* ctag16 = tree.getElementName(&len); + if (ctag16 == NULL) { + *outError = "failed to get XML element name (bad string pool)"; + return Vector<String8>(); + } + String8 tag(ctag16); if (depth == 1) { if (tag == serviceTagName) { @@ -711,7 +726,12 @@ int doDump(Bundle* bundle) continue; } depth++; - String8 tag(tree.getElementName(&len)); + const char16_t* ctag16 = tree.getElementName(&len); + if (ctag16 == NULL) { + fprintf(stderr, "ERROR: failed to get XML element name (bad string pool)\n"); + goto bail; + } + String8 tag(ctag16); //printf("Depth %d tag %s\n", depth, tag.string()); if (depth == 1) { if (tag != "manifest") { @@ -970,7 +990,13 @@ int doDump(Bundle* bundle) continue; } depth++; - String8 tag(tree.getElementName(&len)); + + const char16_t* ctag16 = tree.getElementName(&len); + if (ctag16 == NULL) { + fprintf(stderr, "ERROR: failed to get XML element name (bad string pool)\n"); + goto bail; + } + String8 tag(ctag16); //printf("Depth %d, %s\n", depth, tag.string()); if (depth == 1) { if (tag != "manifest") { @@ -1297,7 +1323,12 @@ int doDump(Bundle* bundle) goto bail; } } else if (tag == "compatible-screens") { - printCompatibleScreens(tree); + printCompatibleScreens(tree, &error); + if (error != "") { + fprintf(stderr, "ERROR getting compatible screens: %s\n", + error.string()); + goto bail; + } depth--; } else if (tag == "package-verifier") { String8 name = getAttribute(tree, NAME_ATTR, &error); @@ -2035,10 +2066,16 @@ bail: return (result != NO_ERROR); } -static status_t addResourcesToBuilder(const sp<AaptDir>& dir, const sp<ApkBuilder>& builder) { +static status_t addResourcesToBuilder(const sp<AaptDir>& dir, const sp<ApkBuilder>& builder, bool ignoreConfig=false) { const size_t numDirs = dir->getDirs().size(); for (size_t i = 0; i < numDirs; i++) { - status_t err = addResourcesToBuilder(dir->getDirs().valueAt(i), builder); + bool ignore = ignoreConfig; + const sp<AaptDir>& subDir = dir->getDirs().valueAt(i); + const char* dirStr = subDir->getLeaf().string(); + if (!ignore && strstr(dirStr, "mipmap") == dirStr) { + ignore = true; + } + status_t err = addResourcesToBuilder(subDir, builder, ignore); if (err != NO_ERROR) { return err; } @@ -2049,7 +2086,12 @@ static status_t addResourcesToBuilder(const sp<AaptDir>& dir, const sp<ApkBuilde sp<AaptGroup> gp = dir->getFiles().valueAt(i); const size_t numConfigs = gp->getFiles().size(); for (size_t j = 0; j < numConfigs; j++) { - status_t err = builder->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); + status_t err = NO_ERROR; + if (ignoreConfig) { + err = builder->getBaseSplit()->addEntry(gp->getPath(), gp->getFiles().valueAt(j)); + } else { + 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(), gp->getFiles()[j]->getPrintableSource().string()); diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index 9787432..4af73cf 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -183,6 +183,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { SessionParams params = getParams(); BridgeContext context = getContext(); + RenderResources resources = getParams().getResources(); DisplayMetrics metrics = getContext().getMetrics(); diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 813a895..59979ce 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -137,6 +137,7 @@ public final class CreateInfo implements ICreateInfo { "android.text.format.DateFormat#is24HourFormat", "android.view.Choreographer#getRefreshRate", "android.view.Display#updateDisplayInfoLocked", + "android.view.Display#getWindowManager", "android.view.LayoutInflater#rInflate", "android.view.LayoutInflater#parseInclude", "android.view.View#isInEditMode", |
