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

Commit 1aaae10e authored by Torne (Richard Coles)'s avatar Torne (Richard Coles)
Browse files

Introduce ApplicationInfo.getAllApkPaths().

Add an internal method to ApplicationInfo to get all APK files that may
be required by an application. This moves assumptions about how apps are
constructed out of Zygote.allowAppFilesAcrossFork and into a more
appropriate place where it can be shared.

Bug: 124116212
Test: atest android.webkit.cts.WebViewTest
Change-Id: I79add98c4922c4f97263bff78cf808bc38274755
parent 80421043
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.server.SystemConfig;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
@@ -2028,6 +2029,27 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        return this;
    }

    /**
     * Return all the APK paths that may be required to load this application, including all
     * splits, shared libraries, and resource overlays.
     * @hide
     */
    public String[] getAllApkPaths() {
        final String[][] inputLists = { splitSourceDirs, sharedLibraryFiles, resourceDirs };
        final List<String> output = new ArrayList<>(10);
        if (sourceDir != null) {
            output.add(sourceDir);
        }
        for (String[] inputList : inputLists) {
            if (inputList != null) {
                for (String input : inputList) {
                    output.add(input);
                }
            }
        }
        return output.toArray(new String[output.size()]);
    }

    /** {@hide} */ public void setCodePath(String codePath) { scanSourceDir = codePath; }
    /** {@hide} */ public void setBaseCodePath(String baseCodePath) { sourceDir = baseCodePath; }
    /** {@hide} */ public void setSplitCodePaths(String[] splitCodePaths) { splitSourceDirs = splitCodePaths; }
+2 −11
Original line number Diff line number Diff line
@@ -369,19 +369,10 @@ public final class Zygote {
     * @param appInfo ApplicationInfo of the application
     */
    protected static void allowAppFilesAcrossFork(ApplicationInfo appInfo) {
        Zygote.nativeAllowFileAcrossFork(appInfo.sourceDir);
        if (appInfo.splitSourceDirs != null) {
            for (String path : appInfo.splitSourceDirs) {
        for (String path : appInfo.getAllApkPaths()) {
            Zygote.nativeAllowFileAcrossFork(path);
        }
    }
        // As well as its shared libs
        if (appInfo.sharedLibraryFiles != null) {
            for (String path : appInfo.sharedLibraryFiles) {
                Zygote.nativeAllowFileAcrossFork(path);
            }
        }
    }

    /**
     * Installs a seccomp filter that limits setresuid()/setresgid() to the passed-in range