summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/jni/com_android_internal_content_NativeLibraryHelper.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index a5b85b4..b68c97a 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -283,6 +283,7 @@ iterateOverNativeFiles(JNIEnv *env, jstring javaFilePath, jstring javaCpuAbi, js
const int N = zipFile.getNumEntries();
char fileName[PATH_MAX];
+ bool hasPrimaryAbi = false;
for (int i = 0; i < N; i++) {
const ZipEntryRO entry = zipFile.findEntryByIndex(i);
@@ -318,11 +319,22 @@ iterateOverNativeFiles(JNIEnv *env, jstring javaFilePath, jstring javaCpuAbi, js
if (cpuAbi.size() == cpuAbiRegionSize
&& *(cpuAbiOffset + cpuAbi.size()) == '/'
&& !strncmp(cpuAbiOffset, cpuAbi.c_str(), cpuAbiRegionSize)) {
- ALOGV("Using ABI %s\n", cpuAbi.c_str());
+ ALOGV("Using primary ABI %s\n", cpuAbi.c_str());
+ hasPrimaryAbi = true;
} else if (cpuAbi2.size() == cpuAbiRegionSize
&& *(cpuAbiOffset + cpuAbi2.size()) == '/'
&& !strncmp(cpuAbiOffset, cpuAbi2.c_str(), cpuAbiRegionSize)) {
- ALOGV("Using ABI %s\n", cpuAbi2.c_str());
+
+ /*
+ * If this library matches both the primary and secondary ABIs,
+ * only use the primary ABI.
+ */
+ if (hasPrimaryAbi) {
+ ALOGV("Already saw primary ABI, skipping secondary ABI %s\n", cpuAbi2.c_str());
+ continue;
+ } else {
+ ALOGV("Using secondary ABI %s\n", cpuAbi2.c_str());
+ }
} else {
ALOGV("abi didn't match anything: %s (end at %zd)\n", cpuAbiOffset, cpuAbiRegionSize);
continue;