- A+
所属分类:art虚拟机
art虚拟主机—从zygote启动开始分析,内容分为17篇笔记更新,欢迎大家阅读。
AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv)); runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
class AppRuntime : public AndroidRuntime { public: }
AndroidRuntime.cpp frameworks\base\core\jni
void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote) { .... JniInvocation jni_invocation; jni_invocation.Init(NULL); JNIEnv* env; if (startVm(&mJavaVM, &env, zygote) != 0) { return; } onVmCreated(env); ... char* slashClassName = toSlashClassName(className); jclass startClass = env->FindClass(slashClassName); if (startClass == NULL) { ... } else { jmethodID startMeth = env->GetStaticMethodID(startClass, "main", "([Ljava/lang/String;)V"); if (startMeth == NULL) { ALOGE("JavaVM unable to find main() in '%s'\n", className); /* keep going */ } else { env->CallStaticVoidMethod(startClass, startMeth, strArray); .... } } ... }
- 首先是要看下 JniInvocation 里面的初始化的东西
- 然后是要看下JavaVM 和 JNIEnv 的初始化,就是java环境的建立。
- 然后看下JNI_CreateJavaVM 对运行时 oat文件等等,runtime等等的建立
- 最后看下FindClass 怎么找到我们的ZygoteInit类,已经怎么连接本地代码和怎么调用。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏