上述代码有几处关键点,分别是:
创建虚拟机。
注册JNI函数。
进入Java世界。
接下来,我们分别分析这三个关键点。
创建虚拟机——startVm
startVm并没有特别之处,就是调用JNI的虚拟机创建函数,但是创建虚拟机时的一些参数却是在startVm中确定的,其源码如下:
- #define PROPERTY_VALUE_MAX 92 /**
- * Start the Dalvik Virtual Machine. *
- * Various arguments, most determined by system properties, are passed in. * The "mOptions" vector is updated.
- * * Returns 0 on success.
- */ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIENV** pEnv)
- { int result = -1;
- JavaVMInitArgs initArgs; JavaVMOption opt;
- char propBuf[PROPERTY_VALUE_MAX]; char stackTraceFileBuf[PROPERTY_VALUE_MAX];
- char dexoptFlagsBuf[PROPERTY_VALUE_MAX]; char enableAssertBuf[sizeof("-ea:")-1 + PROPERTY_VALUE_MAX];










