From efce929711536274fddc0642df162df1dddc7752 Mon Sep 17 00:00:00 2001 From: Chris Wailes Date: Fri, 11 Jan 2019 13:19:20 -0800 Subject: [PATCH] Code cleanup to conform to style guide / linter. This commit made the following changes to make the code conform to the Frameworks style guide: * Re-named variables * Re-flowed code * Organized includes Topic: zygote-prefork Test: make & flash & launch apps Bug: 68253328 Change-Id: I9274b32f1f606f29f6eb3a1e5068ca18f607afe7 --- core/java/android/os/AppZygote.java | 2 +- core/java/android/os/Process.java | 15 +- core/java/android/os/ZygoteProcess.java | 257 ++++++++++-------- core/java/android/webkit/WebViewZygote.java | 2 +- .../com/android/internal/os/ZygoteInit.java | 5 +- .../server/am/ActivityManagerService.java | 8 +- .../java/com/android/server/SystemServer.java | 2 +- 7 files changed, 162 insertions(+), 129 deletions(-) diff --git a/core/java/android/os/AppZygote.java b/core/java/android/os/AppZygote.java index 950f381677540..6daa5b4dc6d8b 100644 --- a/core/java/android/os/AppZygote.java +++ b/core/java/android/os/AppZygote.java @@ -103,7 +103,7 @@ public class AppZygote { String abi = mAppInfo.primaryCpuAbi != null ? mAppInfo.primaryCpuAbi : Build.SUPPORTED_ABIS[0]; try { - mZygote = Process.zygoteProcess.startChildZygote( + mZygote = Process.ZYGOTE_PROCESS.startChildZygote( "com.android.internal.os.AppZygoteInit", mAppInfo.processName + "_zygote", mZygoteUid, diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index f2a9adb6feea1..07c4933e2e3f3 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -31,16 +31,6 @@ import dalvik.system.VMRuntime; public class Process { private static final String LOG_TAG = "Process"; - /** - * @hide for internal use only. - */ - public static final String ZYGOTE_SOCKET = "zygote"; - - /** - * @hide for internal use only. - */ - public static final String SECONDARY_ZYGOTE_SOCKET = "zygote_secondary"; - /** * An invalid UID value. */ @@ -479,8 +469,7 @@ public class Process { * State associated with the zygote process. * @hide */ - public static final ZygoteProcess zygoteProcess = - new ZygoteProcess(ZYGOTE_SOCKET, SECONDARY_ZYGOTE_SOCKET); + public static final ZygoteProcess ZYGOTE_PROCESS = new ZygoteProcess(); /** * Start a new process. @@ -538,7 +527,7 @@ public class Process { @Nullable String[] packagesForUid, @Nullable String[] visibleVols, @Nullable String[] zygoteArgs) { - return zygoteProcess.start(processClass, niceName, uid, gid, gids, + return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, packageName, packagesForUid, visibleVols, zygoteArgs); diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index ec7782177c731..4cb9c5b027f69 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -62,87 +62,119 @@ import java.util.UUID; * {@hide} */ public class ZygoteProcess { + + /** + * @hide for internal use only. + */ + public static final String ZYGOTE_SOCKET_NAME = "zygote"; + + /** + * @hide for internal use only. + */ + public static final String ZYGOTE_SECONDARY_SOCKET_NAME = "zygote_secondary"; + + /** + * @hide for internal use only + */ private static final String LOG_TAG = "ZygoteProcess"; /** * The name of the socket used to communicate with the primary zygote. */ - private final LocalSocketAddress mSocket; + private final LocalSocketAddress mZygoteSocketAddress; /** * The name of the secondary (alternate ABI) zygote socket. */ - private final LocalSocketAddress mSecondarySocket; + private final LocalSocketAddress mZygoteSecondarySocketAddress; - public ZygoteProcess(String primarySocket, String secondarySocket) { - this(new LocalSocketAddress(primarySocket, LocalSocketAddress.Namespace.RESERVED), - new LocalSocketAddress(secondarySocket, LocalSocketAddress.Namespace.RESERVED)); + public ZygoteProcess() { + mZygoteSocketAddress = + new LocalSocketAddress(ZYGOTE_SOCKET_NAME, LocalSocketAddress.Namespace.RESERVED); + mZygoteSecondarySocketAddress = + new LocalSocketAddress(ZYGOTE_SECONDARY_SOCKET_NAME, + LocalSocketAddress.Namespace.RESERVED); } - public ZygoteProcess(LocalSocketAddress primarySocket, LocalSocketAddress secondarySocket) { - mSocket = primarySocket; - mSecondarySocket = secondarySocket; + public ZygoteProcess(LocalSocketAddress primarySocketAddress, + LocalSocketAddress secondarySocketAddress) { + mZygoteSocketAddress = primarySocketAddress; + mZygoteSecondarySocketAddress = secondarySocketAddress; } public LocalSocketAddress getPrimarySocketAddress() { - return mSocket; + return mZygoteSocketAddress; } /** * State for communicating with the zygote process. */ public static class ZygoteState { - final LocalSocket socket; - final DataInputStream inputStream; - final BufferedWriter writer; - final List abiList; + final LocalSocketAddress mZygoteSocketAddress; - boolean mClosed; + private final LocalSocket mZygoteSessionSocket; - private ZygoteState(LocalSocket socket, DataInputStream inputStream, - BufferedWriter writer, List abiList) { - this.socket = socket; - this.inputStream = inputStream; - this.writer = writer; - this.abiList = abiList; + final DataInputStream mZygoteInputStream; + final BufferedWriter mZygoteOutputWriter; + + private final List mABIList; + + private boolean mClosed; + + private ZygoteState(LocalSocketAddress zygoteSocketAddress, + LocalSocket zygoteSessionSocket, + DataInputStream zygoteInputStream, + BufferedWriter zygoteOutputWriter, + List abiList) { + this.mZygoteSocketAddress = zygoteSocketAddress; + this.mZygoteSessionSocket = zygoteSessionSocket; + this.mZygoteInputStream = zygoteInputStream; + this.mZygoteOutputWriter = zygoteOutputWriter; + this.mABIList = abiList; } - public static ZygoteState connect(LocalSocketAddress address) throws IOException { + /** + * Create a new ZygoteState object by connecting to the given Zygote socket. + * + * @param zygoteSocketAddress Zygote socket to connect to + * @return A new ZygoteState object containing a session socket for the given Zygote socket + * address + * @throws IOException + */ + public static ZygoteState connect(LocalSocketAddress zygoteSocketAddress) + throws IOException { + DataInputStream zygoteInputStream = null; - BufferedWriter zygoteWriter = null; - final LocalSocket zygoteSocket = new LocalSocket(); + BufferedWriter zygoteOutputWriter = null; + final LocalSocket zygoteSessionSocket = new LocalSocket(); try { - zygoteSocket.connect(address); - - zygoteInputStream = new DataInputStream(zygoteSocket.getInputStream()); - - zygoteWriter = new BufferedWriter(new OutputStreamWriter( - zygoteSocket.getOutputStream()), 256); + zygoteSessionSocket.connect(zygoteSocketAddress); + zygoteInputStream = new DataInputStream(zygoteSessionSocket.getInputStream()); + zygoteOutputWriter = + new BufferedWriter( + new OutputStreamWriter(zygoteSessionSocket.getOutputStream()), + 256); } catch (IOException ex) { try { - zygoteSocket.close(); - } catch (IOException ignore) { - } + zygoteSessionSocket.close(); + } catch (IOException ignore) { } throw ex; } - String abiListString = getAbiList(zygoteWriter, zygoteInputStream); - Log.i("Zygote", "Process: zygote socket " + address.getNamespace() + "/" - + address.getName() + " opened, supported ABIS: " + abiListString); - - return new ZygoteState(zygoteSocket, zygoteInputStream, zygoteWriter, - Arrays.asList(abiListString.split(","))); + return new ZygoteState(zygoteSocketAddress, + zygoteSessionSocket, zygoteInputStream, zygoteOutputWriter, + getAbiList(zygoteOutputWriter, zygoteInputStream)); } boolean matches(String abi) { - return abiList.contains(abi); + return mABIList.contains(abi); } public void close() { try { - socket.close(); + mZygoteSessionSocket.close(); } catch (IOException ex) { Log.e(LOG_TAG,"I/O exception on routine close", ex); } @@ -241,7 +273,7 @@ public class ZygoteProcess { try { return startViaZygote(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, - abi, instructionSet, appDataDir, invokeWith, false /* startChildZygote */, + abi, instructionSet, appDataDir, invokeWith, /*startChildZygote=*/false, packageName, packagesForUid, visibleVols, zygoteArgs); } catch (ZygoteStartFailedEx ex) { Log.e(LOG_TAG, @@ -260,7 +292,7 @@ public class ZygoteProcess { * @throws ZygoteStartFailedEx if the query failed. */ @GuardedBy("mLock") - private static String getAbiList(BufferedWriter writer, DataInputStream inputStream) + private static List getAbiList(BufferedWriter writer, DataInputStream inputStream) throws IOException { // Each query starts with the argument count (1 in this case) writer.write("1"); @@ -276,7 +308,9 @@ public class ZygoteProcess { byte[] bytes = new byte[numBytes]; inputStream.readFully(bytes); - return new String(bytes, StandardCharsets.US_ASCII); + String rawList = new String(bytes, StandardCharsets.US_ASCII); + + return Arrays.asList(rawList.split(",")); } /** @@ -310,8 +344,8 @@ public class ZygoteProcess { * the child or -1 on failure, followed by boolean to * indicate whether a wrapper process was used. */ - final BufferedWriter writer = zygoteState.writer; - final DataInputStream inputStream = zygoteState.inputStream; + final BufferedWriter writer = zygoteState.mZygoteOutputWriter; + final DataInputStream inputStream = zygoteState.mZygoteInputStream; writer.write(Integer.toString(args.size())); writer.newLine(); @@ -528,18 +562,18 @@ public class ZygoteProcess { ZygoteState state = openZygoteSocketIfNeeded(abi); // Each query starts with the argument count (1 in this case) - state.writer.write("1"); + state.mZygoteOutputWriter.write("1"); // ... followed by a new-line. - state.writer.newLine(); + state.mZygoteOutputWriter.newLine(); // ... followed by our only argument. - state.writer.write("--get-pid"); - state.writer.newLine(); - state.writer.flush(); + state.mZygoteOutputWriter.write("--get-pid"); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.flush(); // The response is a length prefixed stream of ASCII bytes. - int numBytes = state.inputStream.readInt(); + int numBytes = state.mZygoteInputStream.readInt(); byte[] bytes = new byte[numBytes]; - state.inputStream.readFully(bytes); + state.mZygoteInputStream.readFully(bytes); return Integer.parseInt(new String(bytes, StandardCharsets.US_ASCII)); } @@ -593,16 +627,16 @@ public class ZygoteProcess { return true; } try { - state.writer.write(Integer.toString(mApiBlacklistExemptions.size() + 1)); - state.writer.newLine(); - state.writer.write("--set-api-blacklist-exemptions"); - state.writer.newLine(); + state.mZygoteOutputWriter.write(Integer.toString(mApiBlacklistExemptions.size() + 1)); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.write("--set-api-blacklist-exemptions"); + state.mZygoteOutputWriter.newLine(); for (int i = 0; i < mApiBlacklistExemptions.size(); ++i) { - state.writer.write(mApiBlacklistExemptions.get(i)); - state.writer.newLine(); + state.mZygoteOutputWriter.write(mApiBlacklistExemptions.get(i)); + state.mZygoteOutputWriter.newLine(); } - state.writer.flush(); - int status = state.inputStream.readInt(); + state.mZygoteOutputWriter.flush(); + int status = state.mZygoteInputStream.readInt(); if (status != 0) { Slog.e(LOG_TAG, "Failed to set API blacklist exemptions; status " + status); } @@ -622,13 +656,13 @@ public class ZygoteProcess { return; } try { - state.writer.write(Integer.toString(1)); - state.writer.newLine(); - state.writer.write("--hidden-api-log-sampling-rate=" + state.mZygoteOutputWriter.write(Integer.toString(1)); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.write("--hidden-api-log-sampling-rate=" + Integer.toString(mHiddenApiAccessLogSampleRate)); - state.writer.newLine(); - state.writer.flush(); - int status = state.inputStream.readInt(); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.flush(); + int status = state.mZygoteInputStream.readInt(); if (status != 0) { Slog.e(LOG_TAG, "Failed to set hidden API log sampling rate; status " + status); } @@ -638,22 +672,29 @@ public class ZygoteProcess { } /** - * Tries to open socket to Zygote process if not already open. If - * already open, does nothing. May block and retry. Requires that mLock be held. + * Tries to open a session socket to a Zygote process with a compatible ABI if one is not + * already open. If a compatible session socket is already open that session socket is returned. + * This function may block and may have to try connecting to multiple Zygotes to find the + * appropriate one. Requires that mLock be held. */ @GuardedBy("mLock") - private ZygoteState openZygoteSocketIfNeeded(String abi) throws ZygoteStartFailedEx { + private ZygoteState openZygoteSocketIfNeeded(String abi) + throws ZygoteStartFailedEx { + Preconditions.checkState(Thread.holdsLock(mLock), "ZygoteProcess lock not held"); if (primaryZygoteState == null || primaryZygoteState.isClosed()) { try { - primaryZygoteState = ZygoteState.connect(mSocket); + primaryZygoteState = + ZygoteState.connect(mZygoteSocketAddress); } catch (IOException ioe) { throw new ZygoteStartFailedEx("Error connecting to primary zygote", ioe); } + maybeSetApiBlacklistExemptions(primaryZygoteState, false); maybeSetHiddenApiAccessLogSampleRate(primaryZygoteState); } + if (primaryZygoteState.matches(abi)) { return primaryZygoteState; } @@ -661,10 +702,12 @@ public class ZygoteProcess { // The primary zygote didn't match. Try the secondary. if (secondaryZygoteState == null || secondaryZygoteState.isClosed()) { try { - secondaryZygoteState = ZygoteState.connect(mSecondarySocket); + secondaryZygoteState = + ZygoteState.connect(mZygoteSecondarySocketAddress); } catch (IOException ioe) { throw new ZygoteStartFailedEx("Error connecting to secondary zygote", ioe); } + maybeSetApiBlacklistExemptions(secondaryZygoteState, false); maybeSetHiddenApiAccessLogSampleRate(secondaryZygoteState); } @@ -685,11 +728,11 @@ public class ZygoteProcess { IOException { synchronized (mLock) { ZygoteState state = openZygoteSocketIfNeeded(abi); - state.writer.write("2"); - state.writer.newLine(); + state.mZygoteOutputWriter.write("2"); + state.mZygoteOutputWriter.newLine(); - state.writer.write("--preload-app"); - state.writer.newLine(); + state.mZygoteOutputWriter.write("--preload-app"); + state.mZygoteOutputWriter.newLine(); // Zygote args needs to be strings, so in order to pass ApplicationInfo, // write it to a Parcel, and base64 the raw Parcel bytes to the other side. @@ -697,12 +740,12 @@ public class ZygoteProcess { appInfo.writeToParcel(parcel, 0 /* flags */); String encodedParcelData = Base64.getEncoder().encodeToString(parcel.marshall()); parcel.recycle(); - state.writer.write(encodedParcelData); - state.writer.newLine(); + state.mZygoteOutputWriter.write(encodedParcelData); + state.mZygoteOutputWriter.newLine(); - state.writer.flush(); + state.mZygoteOutputWriter.flush(); - return (state.inputStream.readInt() == 0); + return (state.mZygoteInputStream.readInt() == 0); } } @@ -715,27 +758,27 @@ public class ZygoteProcess { IOException { synchronized(mLock) { ZygoteState state = openZygoteSocketIfNeeded(abi); - state.writer.write("5"); - state.writer.newLine(); + state.mZygoteOutputWriter.write("5"); + state.mZygoteOutputWriter.newLine(); - state.writer.write("--preload-package"); - state.writer.newLine(); + state.mZygoteOutputWriter.write("--preload-package"); + state.mZygoteOutputWriter.newLine(); - state.writer.write(packagePath); - state.writer.newLine(); + state.mZygoteOutputWriter.write(packagePath); + state.mZygoteOutputWriter.newLine(); - state.writer.write(libsPath); - state.writer.newLine(); + state.mZygoteOutputWriter.write(libsPath); + state.mZygoteOutputWriter.newLine(); - state.writer.write(libFileName); - state.writer.newLine(); + state.mZygoteOutputWriter.write(libFileName); + state.mZygoteOutputWriter.newLine(); - state.writer.write(cacheKey); - state.writer.newLine(); + state.mZygoteOutputWriter.write(cacheKey); + state.mZygoteOutputWriter.newLine(); - state.writer.flush(); + state.mZygoteOutputWriter.flush(); - return (state.inputStream.readInt() == 0); + return (state.mZygoteInputStream.readInt() == 0); } } @@ -749,13 +792,13 @@ public class ZygoteProcess { synchronized (mLock) { ZygoteState state = openZygoteSocketIfNeeded(abi); // Each query starts with the argument count (1 in this case) - state.writer.write("1"); - state.writer.newLine(); - state.writer.write("--preload-default"); - state.writer.newLine(); - state.writer.flush(); + state.mZygoteOutputWriter.write("1"); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.write("--preload-default"); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.flush(); - return (state.inputStream.readInt() == 0); + return (state.mZygoteInputStream.readInt() == 0); } } @@ -763,20 +806,21 @@ public class ZygoteProcess { * Try connecting to the Zygote over and over again until we hit a time-out. * @param socketName The name of the socket to connect to. */ - public static void waitForConnectionToZygote(String socketName) { - final LocalSocketAddress address = - new LocalSocketAddress(socketName, LocalSocketAddress.Namespace.RESERVED); - waitForConnectionToZygote(address); + public static void waitForConnectionToZygote(String zygoteSocketName) { + final LocalSocketAddress zygoteSocketAddress = + new LocalSocketAddress(zygoteSocketName, LocalSocketAddress.Namespace.RESERVED); + waitForConnectionToZygote(zygoteSocketAddress); } /** * Try connecting to the Zygote over and over again until we hit a time-out. * @param address The name of the socket to connect to. */ - public static void waitForConnectionToZygote(LocalSocketAddress address) { + public static void waitForConnectionToZygote(LocalSocketAddress zygoteSocketAddress) { for (int n = 20; n >= 0; n--) { try { - final ZygoteState zs = ZygoteState.connect(address); + final ZygoteState zs = + ZygoteState.connect(zygoteSocketAddress); zs.close(); return; } catch (IOException ioe) { @@ -789,7 +833,8 @@ public class ZygoteProcess { } catch (InterruptedException ie) { } } - Slog.wtf(LOG_TAG, "Failed to connect to Zygote through socket " + address.getName()); + Slog.wtf(LOG_TAG, "Failed to connect to Zygote through socket " + + zygoteSocketAddress.getName()); } /** diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java index 29b3b3cff0440..3a1c4576ab3e6 100644 --- a/core/java/android/webkit/WebViewZygote.java +++ b/core/java/android/webkit/WebViewZygote.java @@ -150,7 +150,7 @@ public class WebViewZygote { } try { - sZygote = Process.zygoteProcess.startChildZygote( + sZygote = Process.ZYGOTE_PROCESS.startChildZygote( "com.android.internal.os.WebViewZygoteInit", "webview_zygote", Process.WEBVIEW_ZYGOTE_UID, diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index c2c6ae6712ab1..04034fb68fbf7 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -21,7 +21,6 @@ import static android.system.OsConstants.S_IRWXO; import android.content.res.Resources; import android.content.res.TypedArray; -import android.opengl.EGL14; import android.os.Build; import android.os.Environment; import android.os.IInstalld; @@ -853,8 +852,8 @@ public class ZygoteInit { } private static void waitForSecondaryZygote(String socketName) { - String otherZygoteName = Process.ZYGOTE_SOCKET.equals(socketName) ? - Process.SECONDARY_ZYGOTE_SOCKET : Process.ZYGOTE_SOCKET; + String otherZygoteName = ZygoteProcess.ZYGOTE_SOCKET_NAME.equals(socketName) + ? ZygoteProcess.ZYGOTE_SECONDARY_SOCKET_NAME : ZygoteProcess.ZYGOTE_SOCKET_NAME; ZygoteProcess.waitForConnectionToZygote(otherZygoteName); } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 089847d1ff7f4..5c158d30f1a7c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -64,6 +64,7 @@ import static android.os.Process.SHELL_UID; import static android.os.Process.SIGNAL_USR1; import static android.os.Process.SYSTEM_UID; import static android.os.Process.THREAD_PRIORITY_FOREGROUND; +import static android.os.Process.ZYGOTE_PROCESS; import static android.os.Process.getTotalMemory; import static android.os.Process.isThreadInProcess; import static android.os.Process.killProcess; @@ -75,7 +76,6 @@ import static android.os.Process.removeAllProcessGroups; import static android.os.Process.sendSignal; import static android.os.Process.setThreadPriority; import static android.os.Process.setThreadScheduler; -import static android.os.Process.zygoteProcess; import static android.provider.Settings.Global.ALWAYS_FINISH_ACTIVITIES; import static android.provider.Settings.Global.DEBUG_APP; import static android.provider.Settings.Global.NETWORK_ACCESS_TIMEOUT_MS; @@ -2162,7 +2162,7 @@ public class ActivityManagerService extends IActivityManager.Stub ? Collections.emptyList() : Arrays.asList(exemptions.split(",")); } - if (!zygoteProcess.setApiBlacklistExemptions(mExemptions)) { + if (!ZYGOTE_PROCESS.setApiBlacklistExemptions(mExemptions)) { Slog.e(TAG, "Failed to set API blacklist exemptions!"); // leave mExemptionsStr as is, so we don't try to send the same list again. mExemptions = Collections.emptyList(); @@ -2175,7 +2175,7 @@ public class ActivityManagerService extends IActivityManager.Stub } if (logSampleRate != -1 && logSampleRate != mLogSampleRate) { mLogSampleRate = logSampleRate; - zygoteProcess.setHiddenApiAccessLogSampleRate(mLogSampleRate); + ZYGOTE_PROCESS.setHiddenApiAccessLogSampleRate(mLogSampleRate); } mPolicy = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY); } @@ -4880,7 +4880,7 @@ public class ActivityManagerService extends IActivityManager.Stub ArraySet completedIsas = new ArraySet(); for (String abi : Build.SUPPORTED_ABIS) { - zygoteProcess.establishZygoteConnectionForAbi(abi); + ZYGOTE_PROCESS.establishZygoteConnectionForAbi(abi); final String instructionSet = VMRuntime.getInstructionSet(abi); if (!completedIsas.contains(instructionSet)) { try { diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index cef47caff740b..13373163e5840 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -862,7 +862,7 @@ public final class SystemServer { TimingsTraceLog traceLog = new TimingsTraceLog( SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); traceLog.traceBegin(SECONDARY_ZYGOTE_PRELOAD); - if (!Process.zygoteProcess.preloadDefault(Build.SUPPORTED_32_BIT_ABIS[0])) { + if (!Process.ZYGOTE_PROCESS.preloadDefault(Build.SUPPORTED_32_BIT_ABIS[0])) { Slog.e(TAG, "Unable to preload default resources"); } traceLog.traceEnd();