diff options
| author | Adam Lesinski <adamlesinski@google.com> | 2014-08-15 22:07:59 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-08-15 22:07:59 +0000 |
| commit | ab9b1f5b2a12352f901520445d113cbdd570cc95 (patch) | |
| tree | 3ee20b2c6b038a7596751dbd6999ca82e02a678c | |
| parent | a4dd2c336f289b67d194056b9d4acd9ab5676ab5 (diff) | |
| parent | 9e4056b7af8c2297bd86983607d3fe3f01464e35 (diff) | |
| download | frameworks_base-ab9b1f5b2a12352f901520445d113cbdd570cc95.zip frameworks_base-ab9b1f5b2a12352f901520445d113cbdd570cc95.tar.gz frameworks_base-ab9b1f5b2a12352f901520445d113cbdd570cc95.tar.bz2 | |
am 5bcfb6b9: am 2fdf2db8: Merge "Fix assumption about DynamicRefTable in aapt" into lmp-dev
* commit '5bcfb6b98261c94a6ff33438e6b29ca71bb3c0eb':
Fix assumption about DynamicRefTable in aapt
| -rw-r--r-- | core/java/android/app/LoadedApk.java | 12 | ||||
| -rw-r--r-- | libs/androidfw/ResourceTypes.cpp | 5 | ||||
| -rw-r--r-- | libs/androidfw/tests/ResTable_test.cpp | 16 | ||||
| -rw-r--r-- | tools/aapt/Command.cpp | 7 |
4 files changed, 29 insertions, 11 deletions
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index fcfc1c4..e0c7816 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -40,6 +40,7 @@ import android.os.StrictMode; import android.os.Trace; import android.os.UserHandle; import android.util.AndroidRuntimeException; +import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.DisplayAdjustments; @@ -643,8 +644,17 @@ public final class LoadedApk { } private void rewriteRValues(ClassLoader cl, String packageName, int id) { + final Class<?> rClazz; + try { + rClazz = cl.loadClass(packageName + ".R"); + } catch (ClassNotFoundException e) { + // This is not necessarily an error, as some packages do not ship with resources + // (or they do not need rewriting). + Log.i(TAG, "Could not find R class for package '" + packageName + "'"); + return; + } + try { - final Class<?> rClazz = cl.loadClass(packageName + ".R"); Class<?>[] declaredClasses = rClazz.getDeclaredClasses(); for (Class<?> clazz : declaredClasses) { try { diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index f963a4e..2a4dec0 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -6212,11 +6212,6 @@ void ResTable::print(bool inclValues) const if (mError != 0) { printf("mError=0x%x (%s)\n", mError, strerror(mError)); } -#if 0 - char localeStr[RESTABLE_MAX_LOCALE_LEN]; - mParams.getBcp47Locale(localeStr); - printf("mParams=%s,\n" localeStr); -#endif size_t pgCount = mPackageGroups.size(); printf("Package Groups (%d)\n", (int)pgCount); for (size_t pgIndex=0; pgIndex<pgCount; pgIndex++) { diff --git a/libs/androidfw/tests/ResTable_test.cpp b/libs/androidfw/tests/ResTable_test.cpp index 8016a82..89d271d0 100644 --- a/libs/androidfw/tests/ResTable_test.cpp +++ b/libs/androidfw/tests/ResTable_test.cpp @@ -195,4 +195,20 @@ TEST(ResTableTest, resourceIsOverridenWithBetterConfig) { ASSERT_EQ(uint32_t(400), val.data); } +TEST(ResTableTest, emptyTableHasSensibleDefaults) { + const int32_t assetCookie = 1; + + ResTable table; + ASSERT_EQ(NO_ERROR, table.addEmpty(assetCookie)); + + // Adding an empty table gives us one table! + ASSERT_EQ(uint32_t(1), table.getTableCount()); + + // Adding an empty table doesn't mean we get packages. + ASSERT_EQ(uint32_t(0), table.getBasePackageCount()); + + Res_value val; + ASSERT_LT(table.getResource(base::R::integer::number1, &val, MAY_NOT_BE_BAG), 0); +} + } diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index 41102fe..c74a373 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -764,12 +764,9 @@ int doDump(Bundle* bundle) return 1; } + // The dynamicRefTable can be null if there are no resources for this asset cookie. + // This fine. const DynamicRefTable* dynamicRefTable = res.getDynamicRefTableForCookie(assetsCookie); - if (dynamicRefTable == NULL) { - fprintf(stderr, "ERROR: failed to find dynamic reference table for asset cookie %d\n", - assetsCookie); - return 1; - } Asset* asset = NULL; |
