Zygote(app_process)相关分析2
在前一篇文章中已经分析了从init.c到Zygote(app_process)的启动流程。
今天开始分析frameworks/base/cmds/app_process/app_main.cpp。
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
上面的内容会在app_main.cpp中用到。
/*
* 启动zygote的方式为/system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
* 所以 argc == 5
* argv里头存的就是这5个参数argv[0]=="/system/bin/app_process" ,argv[1] == "-Xzygote"....
*/
int main(int argc, const char* const argv[])
{
...
AppRuntime runtime;
... // 这个函数会返回1,表示只处理了-Xzytote这一个参数,所谓的处理实际上就是将这个参数添加到了runtime对象的mOptions 变量中。
int i = runtime.addVmArguments(argc, argv); // Next arg is parent directory
if (i < argc) {
runtime.mParentDir = argv[i++];
} // Next arg is startup classname or "--zygote"
// Process command line arguments if (i < argc) {
arg = argv[i++];
if ( == strcmp("--zygote", arg)) {
bool startSystemServer = (i < argc) ?
strcmp(argv[i], "--start-system-server") == : false;
setArgv0(argv0, "zygote");
set_process_name("zygote");
runtime.start("com.android.internal.os.ZygoteInit",
startSystemServer);
} else {
set_process_name(argv0); runtime.mClassName = arg; // Remainder of args get passed to startup class main()
runtime.mArgC = argc-i;
runtime.mArgV = argv+i; LOGV("App process is starting with pid=%d, class=%s.\n",
getpid(), runtime.getClassName());
runtime.start();
}
} else {
LOG_ALWAYS_FATAL("app_process: no class name or --zygote supplied.");
fprintf(stderr, "Error: no class name or --zygote supplied.\n");
app_usage();
return ;
}
从代码中可以看出会调用AppRuntime的start函数来完成zygote的启动。
AppRuntime继承自AndroidRuntime分析:(zygote进入java世界)
会调用AndroidRuntime.cpp的start函数。
在这个函数里主要做一下动作,比较简单。
start():
设置root目录“/system” startVM() . 调用JNI的虚拟机创建函数。 . 设置虚拟机的heapsize默认为16MB startReg() . 注册JNI函数。 . 通过JNI调用com.android.internal.os.ZygoteInit类的main函数。 zygoteInit相关 . 找到zygoteInit类的main函数(java类) . 通过调用CallStaticVoidMethod()进入java世界(ZygoteInit.java的main())
我们看一下代码:
void start(const char* className, const char* options){
// start the virtual machine
JNIEnv* env;
if (startVm(&mJavaVM, &env) != ) {
return;
}
//register JNI
if (startReg(env) < ) {
return;
}
// jni 调用java的main方法
jmethodID startMeth = env->GetStaticMethodID(startClass,
"main","([Ljava/lang/String;)V");
// jni调用找出ZygoteInit类
jclass startClass = env->FindClass(className);
// 运行ZygoteInit类的main函数
env->CallStaticVoidMethod(startClass, startMeth, strArray);
}
在下一节我们继续分析com.android.internal.os.ZygoteInit类的main函数。
Zygote(app_process)相关分析2的更多相关文章
- android手机各大分区详解
1. bootloader 当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这张简化了的手机结构图开始: 注意:该结构图并不反映手机的实 ...
- Zygote(app_process)相关分析1
首先我们从Init.c中来看,当Init中解析完init.rc文件时会得到一系列的action,通过action去调用一些函数. Zygote是在init.rc中service section中 se ...
- 系统进程 zygote(三)—— app_process 的 main 函数
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 首先: , , , ) < ) { // Older kernels don't understand ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- 系统进程 zygote(一)—— 概述
和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...
- 系统进程 zygote(二)—— zygote.rc 脚本
夕阳已在沉沉的淡化,这黄昏的美,有谁能描画?莽莽的天涯,哪里是我的家,哪里是我的家?爱人呀,我这般的想着你,你那里可也有丝毫的牵挂?—— 徐志摩·海边的梦 ilocker:关注 Android 安全( ...
- Zygote浅谈
Zygote是什么 操作系统中,进程实际上是文件到地址空间的映射像.进程将要运行时,由操作系统将其映射到地址空间,完成这项工作的事物本质也应是一个进程,我们称这个进程为孵化进程,那么这个进程怎么收到消 ...
- Zygote进程【1】——Zygote的诞生
在Android中存在着C和Java两个完全不同的世界,前者直接建立在Linux的基础上,后者直接建立在JVM的基础上.zygote的中文名字为"受精卵",这个名字很好的诠释了zy ...
- [Android] 解析android framework下利用app_process来调用java写的命令及示例
reference to :http://bbs.9ria.com/thread-253058-1-1.html 在android SDK的framework/base/cmds目录下了,有不少目录, ...
随机推荐
- 单链表(c++)
#include "stdafx.h"#include <iostream>using namespace std;const int MaxSize = 100; c ...
- tornado框架之路二
二.路由系统 路由系统其实就是 url 和 类 的对应关系,这里不同于其他框架,其他很多框架均是 url 对应 函数,Tornado中每个url对应的是一个类. #!/usr/bin/env pyth ...
- javascript设计模式-桥接模式
在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...
- 如何用手机维护Mysql数据库
如何用手机维护网站数据库 身边很多人都在拿ipad或iphone来玩儿游戏或听歌,大多数人认为它们就是个娱乐设备,在我看来它们同样可以帮助我们更加快捷的工作,我用手机遥控单反.用手机控制PPT的播放. ...
- kafka概念
一.结构与概念解释 1.基础概念 topics: kafka通过topics维护各类信息. producer:发布消息到Kafka topic的进程. consumer:订阅kafka topic进程 ...
- 再论App的安全性
现代人早已脱离不了智能手机,几乎人手一机,常见人边走边滑,着实危险.大家用手机App购物,用网银App付费,用股票App下单炒股,太方便了所以成了家常便饭. 没错,就是因为太方便,所以大多只会留意好不 ...
- XSS测试语句大全
'><script>alert(document.cookie)</script> ='><script>alert(document.cookie)& ...
- CSS 3 中二维三维以及渐变过程简单总结 及效果(动图不好发)
一. 不动,区域内的变化(本质生产一张图片) /*渐变 1 长方形之渐变先定义长方形的宽高大小(好观察最好加边框) ...
- 01-实现图片按钮的缩放、动画效果(block的初步应用)
#import "ViewController.h" #define kDelta 60 @interface ViewController () @end @implementa ...
- CentOS6.X安装vsftpd服务
#-----------------CentOS6.X安装VSFTPD服务 #! /bin/sh #1.关闭selinux setenforce 0 sed -i 's/enforcing/disab ...