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

Commit 8e74eb6b authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

Create linker namespace in startServiceFromJar

Previously the classloader would have no initialized linker namespace,
so JNI libraries associated with a JAR in an APEX would not be found.

Use ClassLoaderFactory to ensure that the linker namespace is
initialized.

Bug: 172541385
Test: manual: boot device with system server JAR using JNI in APEX
Merged-In: Icc94c70b3e3817aa637c32f1190faa41364e1604

Change-Id: Icc94c70b3e3817aa637c32f1190faa41364e1604
parent 54082686
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.UserInfo;
import android.os.Build;
import android.os.Environment;
import android.os.SystemClock;
import android.os.Trace;
@@ -28,6 +29,7 @@ import android.os.UserManagerInternal;
import android.util.ArrayMap;
import android.util.Slog;

import com.android.internal.os.ClassLoaderFactory;
import com.android.server.SystemService.TargetUser;
import com.android.server.utils.TimingsTraceAndSlog;

@@ -99,7 +101,10 @@ public class SystemServiceManager {
        if (pathClassLoader == null) {
            // NB: the parent class loader should always be the system server class loader.
            // Changing it has implications that require discussion with the mainline team.
            pathClassLoader = new PathClassLoader(path, this.getClass().getClassLoader());
            pathClassLoader = (PathClassLoader) ClassLoaderFactory.createClassLoader(
                    path, null /* librarySearchPath */, null /* libraryPermittedPath */,
                    this.getClass().getClassLoader(), Build.VERSION.SDK_INT,
                    true /* isNamespaceShared */, null /* classLoaderName */);
            mLoadedPaths.put(path, pathClassLoader);
        }
        final Class<SystemService> serviceClass = loadClassFromLoader(className, pathClassLoader);