Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e56b3f63 authored by Dmitriy Ivanov's avatar Dmitriy Ivanov
Browse files

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
parent 7e8e29ad
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -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);

                /*