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 e56b3f63e8)
This commit is contained in:
Dmitriy Ivanov
2015-06-05 22:00:13 -07:00
parent 7f0b56527f
commit 88b85406d4

View File

@@ -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<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 {
@@ -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);
/*