summaryrefslogtreecommitdiffstats
path: root/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/jni/com_android_internal_content_NativeLibraryHelper.cpp')
-rw-r--r--core/jni/com_android_internal_content_NativeLibraryHelper.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index f7f19b4..e6e413d 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -499,17 +499,28 @@ static int findSupportedAbi(JNIEnv *env, jlong apkHandle, jobjectArray supported
}
}
}
- int asset_status = NO_NATIVE_LIBRARIES;
- int rc = initAssetsVerifierLib();
- if (rc == LIB_INITED_AND_SUCCESS) {
- asset_status = GetAssetsStatusFunc(zipFile, supportedAbis, numAbis);
- } else {
- ALOGE("Failed to load assets verifier: %d", rc);
- }
- if (asset_status == 1) {
- // override the status if asset_status hints at 32-bit abi
- status = 1;
+ if(status <= 0) {
+ // Scan the 'assets' folder only if
+ // the abi (after scanning the lib folder)
+ // is not already set to 32-bit (i.e '1' or '2').
+
+ int asset_status = NO_NATIVE_LIBRARIES;
+ int rc = initAssetsVerifierLib();
+
+ if (rc == LIB_INITED_AND_SUCCESS) {
+ asset_status = GetAssetsStatusFunc(zipFile, supportedAbis, numAbis);
+ } else {
+ ALOGE("Failed to load assets verifier: %d", rc);
+ }
+ if(asset_status >= 0) {
+ // Override the ABI only if
+ // 'asset_status' is a valid ABI (64-bit or 32-bit).
+ // This is to prevent cases where 'lib' folder
+ // has native libraries, but
+ // 'assets' folder has none.
+ status = asset_status;
+ }
}
for (int i = 0; i < numAbis; ++i) {