应用程序进程是由ActivityManagerService请求Zygote进程创建的。ActivityManagerService在请求Zygote进程创建应用程序进程的时候,会传递很多参数,其中就包括seinfo。当ActivityMangerService需要创建应用程序进程的时候,就会调用ActivityMangerService类的成员函数startProcessLocked,查看这个函数(/home/chris/anrom-5.0/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java):
private final void startProcessLocked(ProcessRecord app, StringhostingType,
String hostingNameStr, String abiOverride, String entryPoint,String[] entryPointArgs) {
........
Process.ProcessStartResult startResult =Process.start(entryPoint,
app.processName, uid, uid, gids, debugFlags, mountExternal,
app.info.targetSdkVersion,
app.info.seinfo, requiredAbi,instructionSet,
app.info.dataDir, refreshTheme, entryPointArgs);
.........
}
startProcessLocked通过调用Process类的静态成员函数start来创建应用程序进程,包含了要创建的应用程序进程的各种参数。其中app.info.seinfo从mac_permission.xml中获得。这些参数会通过SocketIPC传递给Zygote进程。最后,Zygote进程会通过调用Zygote