diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt index 6b7c1a23f2b..12209c09c8f 100644 --- a/api/module-lib-current.txt +++ b/api/module-lib-current.txt @@ -398,6 +398,7 @@ package dalvik.system { method public static void onBeginPreload(); method public static void onEndPreload(boolean); method public static void onEndPreload(); + method public static void postExecSpawn(int); method public static void postForkChild(int, boolean, boolean, String); method public static void postForkCommon(); method public static void postForkSystemServer(int); diff --git a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java index ee52962cada..e424e522548 100644 --- a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java +++ b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java @@ -271,6 +271,24 @@ public static void postForkChild(int runtimeFlags, boolean isSystemServer, } } + /** + * Called in an app process started through exec-based spawning. + * + *

The process was not forked from a zygote, so this deliberately avoids + * the fork-specific {@link #postForkChild} work. It applies app runtime + * policy that normally comes from zygote runtime flags before the app + * entrypoint is loaded. + * + * @param runtimeFlags The flags listed in com.android.internal.os.Zygote + * passed to the runtime. + * + * @hide + */ + @SystemApi(client = MODULE_LIBRARIES) + public static void postExecSpawn(int runtimeFlags) { + nativePostExecSpawn(runtimeFlags); + } + /** * Called by the zygote in both the parent and child processes after * every fork. In the child process, this method is called after @@ -319,5 +337,8 @@ private static native void nativePostForkChild(long token, int runtimeFlags, boolean isSystemServer, boolean isZygote, String instructionSet); + // Hook for app processes started through exec-based spawning. + private static native void nativePostExecSpawn(int runtimeFlags); + private static native boolean nativeZygoteLongSuspendOk(); }