From 88b85406d45188bb8f2ccc74c75e74635ef29036 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 5 Jun 2015 22:00:13 -0700 Subject: [PATCH] Add path to native libraries inside apk If an application has native code (and primary abi) include path to corresponding folder inside apk-file to ldLibraryPath when constructing PathClassLoader Bug: 21647354 Bug: 21667767 Bug: 21726698 Bug: 8076853 Change-Id: Ib0a2f01ee69019d3206a00c542bd7d0f58d0c481 (cherry picked from commit e56b3f63e8235ab45e081fc9d3476a3e5248ddde) --- core/java/android/app/LoadedApk.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 83c6c2bcbe8ae..778920072dc8c 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -55,6 +55,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; +import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; @@ -170,6 +171,7 @@ public final class LoadedApk { if (runtimeIsa.equals(secondaryIsa)) { final ApplicationInfo modified = new ApplicationInfo(info); modified.nativeLibraryDir = modified.secondaryNativeLibraryDir; + modified.primaryCpuAbi = modified.secondaryCpuAbi; return modified; } } @@ -276,8 +278,9 @@ public final class LoadedApk { } } - final ArrayList zipPaths = new ArrayList<>(); - final ArrayList libPaths = new ArrayList<>(); + final List zipPaths = new ArrayList<>(); + final List apkPaths = new ArrayList<>(); + final List libPaths = new ArrayList<>(); if (mRegisterPackage) { try { @@ -333,6 +336,8 @@ public final class LoadedApk { } } + apkPaths.addAll(zipPaths); + if (mSharedLibraries != null) { for (String lib : mSharedLibraries) { if (!zipPaths.contains(lib)) { @@ -350,6 +355,14 @@ public final class LoadedApk { } final String zip = TextUtils.join(File.pathSeparator, zipPaths); + + // Add path to libraries in apk for current abi + if (mApplicationInfo.primaryCpuAbi != null) { + for (String apk : apkPaths) { + libPaths.add(apk + "!/lib/" + mApplicationInfo.primaryCpuAbi); + } + } + final String lib = TextUtils.join(File.pathSeparator, libPaths); /*