Add Application.getProcessName()

This information is already available to non-sandboxed processes via
ActivityManager.getRunningAppProcesses(). However, performing an IPC and
iterating processes is quite cumbersome. See other alternatives devs have tried:

https://stackoverflow.com/questions/19631894/is-there-a-way-to-get-current-process-name-in-android

My specific motivation for exposing this information more directly is to
be able to perform process-specific initialization logic in
Application.attachBaseContext():

https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java?rcl=ac2e180a1265f88dd4030bb35d69f5d0b2dc488d&l=54

Bug: 73344323
Test: Same code that's used in Chrome via reflection.
Change-Id: I83cec468458078e3fa183427a039869f74539c3d
This commit is contained in:
Andrew Grieve
2018-02-13 23:27:50 -05:00
committed by Richard Coles
parent e84c506fc3
commit 4700befb26
2 changed files with 12 additions and 1 deletions

View File

@@ -4265,6 +4265,7 @@ package android.app {
public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
ctor public Application();
method public static java.lang.String getProcessName();
method public void onConfigurationChanged(android.content.res.Configuration);
method public void onCreate();
method public void onLowMemory();

View File

@@ -191,6 +191,16 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 {
}
}
/**
* Returns the name of the current process. A package's default process name
* is the same as its package name. Non-default processes will look like
* "$PACKAGE_NAME:$NAME", where $NAME corresponds to an android:process
* attribute within AndroidManifest.xml.
*/
public static String getProcessName() {
return ActivityThread.currentProcessName();
}
// ------------------ Internal API ------------------
/**
@@ -333,4 +343,4 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 {
}
return null;
}
}
}