- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android深入浅出之Zygote
一 目的
zygote,是Android搞出来的一个东西。网上讲这个的也非常多。第一次看到这个名字我就挺郁闷,想干嘛这是?Linux下名字都取得挺通俗易懂,深得人心。zygote?不就想模仿Linux下的fork吗?个人觉得Google取名字挺怪,包括Google本身。
不管怎样,Zygote依然是Android系统的核心,zygote是受精卵的意思,可以认为是Android framework大家族的祖先!我们本节的目的是描述下zygote的来龙去脉,顺便揭露下它的短处,以后大家可以对症下药,变异一个更加优良的品种。
二Zygote
zygote本身是一个应用层的程序,和驱动,内核模块之类的没点关系。这下大家放心点了吧?zygote的启动由linux的祖先init启动。这个在init分析中提过。这里就不说了。
zygote,ps中看到的进程名叫zygote,其最初的名字是app_process,通过直接调用pctrl把名字给改成了”zygote”。不过不影响我们分析。
zygote的代码在framework/base/cmds/app_process/App_main.cpp中。我们一步步来看。
既然是应用程序,直接看main咯。
[----main]
int main(int argc, const char* const argv[])
{
//参数很重要啊,还记得init分析吗?
//恩,这几个参数就是:(一定要记住我们的情景分析方法!)
//zygote /system/bin/app_process
//-Xzygote /system/bin --zygote --start-system-server
// These are global variables in ProcessState.cpp
mArgC = argc;
mArgV = argv;
mArgLen = 0;
for (int i=0; iargc; i++) {
mArgLen += strlen(argv[i]) + 1;
}
mArgLen--;
AppRuntime runtime;
//AppRuntime是个什么玩意儿?addVmArguments?好像和虚拟机有点关系喔
int i = runtime.addVmArguments(argc, argv);
[---AppRuntime]
class AppRuntime : public AndroidRuntime
从AndroidRuntime中派生而来,是和dalvik交互的一个方便类,这里先不说了。
[----main]
...
int i = runtime.addVmArguments(argc, argv);
....
if (i argc) {
arg = argv[i++];
if (0 == strcmp(--zygote, arg)) {
bool startSystemServer = (i argc) ?
strcmp(argv[i], --start-system-server) == 0 : false;
//废话,根据我们的参数,startSystemServer=true
setArgv0(argv0, zygote);
//改名字,不知道windows下的怎么改、linux下的可以用pctrl系统调用
set_process_name(zygote);
//start?记住我们的参数
runtime.start(ernal.os.ZygoteInit,
startSystemServer);
}
} else {
return 10;
}
FT,app_main还是很简单的,但是runtime.start看起来不简单啊,传进去的那个参数
“ernal.os.ZygoteInit“挺像java类的命名规则。
2.1 AppRuntime
好了,代码进入到runtime.start(ernal.os.ZygoteInit,true)了。source insight直接进去看看。代码在framework/base/core/jni/AppRuntime.cpp中。
[---void Androi
您可能关注的文档
- ZJQ00-SG-001-20038_细_部_工_程.doc
- ZJQ00-SG-001-20035涂_饰_工_程.doc
- zhx_流程改好.doc
- ZJQ00-SG-001-20032吊_顶_工_程.doc
- ZK95+1729-544路基-.doc
- zkhxsj_04.doc
- ZLPG100中药浸膏喷雾干燥机DQIQOQPQ13806118222.doc
- zmj-1837-5511.doc
- zmj-5038-28970.doc
- zmj-8839-26517.doc
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
文档评论(0)