summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitriy Ivanov <dimitry@google.com>2015-06-05 22:00:13 -0700
committerDmitriy Ivanov <dimitry@google.com>2015-06-09 20:40:20 -0700
commite56b3f63e8235ab45e081fc9d3476a3e5248ddde (patch)
tree5be660a05fe2e9c0186ffb1652006439a707a8ca
parent7e8e29ad2e5e8a722db163f5e740ba3453c45d9b (diff)
downloadframeworks_base-e56b3f63e8235ab45e081fc9d3476a3e5248ddde.zip
frameworks_base-e56b3f63e8235ab45e081fc9d3476a3e5248ddde.tar.gz
frameworks_base-e56b3f63e8235ab45e081fc9d3476a3e5248ddde.tar.bz2
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
-rw-r--r--core/java/android/app/LoadedApk.java17
1 files changed, 15 insertions, 2 deletions
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 9604789..c2bf28a 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;
@@ -166,6 +167,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;
}
}
@@ -272,8 +274,9 @@ public final class LoadedApk {
}
}
- final ArrayList<String> zipPaths = new ArrayList<>();
- final ArrayList<String> libPaths = new ArrayList<>();
+ final List<String> zipPaths = new ArrayList<>();
+ final List<String> apkPaths = new ArrayList<>();
+ final List<String> libPaths = new ArrayList<>();
if (mRegisterPackage) {
try {
@@ -329,6 +332,8 @@ public final class LoadedApk {
}
}
+ apkPaths.addAll(zipPaths);
+
if (mSharedLibraries != null) {
for (String lib : mSharedLibraries) {
if (!zipPaths.contains(lib)) {
@@ -346,6 +351,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);
/*