1. init CommandLine
从/data/local/chrome-command-line文件中读取命令行。
2. ResourceExtractor
解压资源文件: *.pak。这些资源文件由GTIR产生,包含本地化的字符串资源和图片。
包含:"chrome.pak","en-US.pak","resources.pak","chrome_100_percent.pak","devtools_resources.pak"
3. load library
装载共享库。
static String[] libraries = { "webviewchromium" }; // if you run android_webview_apk
static String[] libraries = { "content_shell_content_view" }; // if you run content_shell_apk
static String[] libraries = { "chromiumtestshell" }; // if you run chromium_testshell
4. 当装载完共享库后,注册jni接口。
5. JNI接口包含:
base::android::RegisterJni(env)
net::android::RegisterJni(env)
ui::android::RegisterJni(env)
ui::gl::android::RegisterJni(env)
ui::shell_dialogs::RegisterJni(env)
content::android::RegisterCommonJni(env)
content::android::RegisterBrowserJni(env)
content::android::RegisterAppJni(env)
media::RegisterJni(env)
[5_1. base::android::RegisterJni(env)
static RegistrationMethod kBaseRegisteredMethods[] = {
{ "BuildInfo", base::android::BuildInfo::RegisterBindings },
{ "CpuFeatures", base::android::RegisterCpuFeatures },
{ "ImportantFileWriterAndroid", base::android::RegisterImportantFileWriterAndroid },
{ "PathService", base::android::RegisterPathService },
{ "PathUtils", base::android::RegisterPathUtils },
{ "SystemMessageHandler", base::MessagePumpForUI::RegisterBindings },
{ "PowerMonitor", base::RegisterPowerMonitor },
{ "ThreadUtils", base::RegisterThreadUtils },
};
RegisterNativeMethods(env, kBaseRegisteredMethods, arraysize(kBaseRegisteredMethods));
[5_2. net::android::RegisterJni(env)
static base::android::RegistrationMethod kNetRegisteredMethods[] = {
{ "AndroidKeyStore", net::android::RegisterKeyStore },
{ "AndroidNetworkLibrary", net::android::RegisterNetworkLibrary },
{ "GURLUtils", net::RegisterGURLUtils },
{ "NetworkChangeNotifierAndroid", net::NetworkChangeNotifierAndroid::Register },
{ "ProxyConfigService", net::ProxyConfigServiceAndroid::Register },
};
RegisterNativeMethods(env, kNetRegisteredMethods, arraysize(kNetRegisteredMethods));
[5_3. ui::android::RegisterJni(env)
static base::android::RegistrationMethod kUiRegisteredMethods[] = {
{ "Clipboard", ui::RegisterClipboardAndroid },
{ "DeviceDisplayInfo", gfx::DeviceDisplayInfo::RegisterDeviceDisplayInfo },
{ "JavaBitmap", gfx::JavaBitmap::RegisterJavaBitmap },
{ "LocalizationUtils", l10n_util::RegisterLocalizationUtil },
{ "ViewAndroid", ui::ViewAndroid::RegisterViewAndroid },
{ "WindowAndroid", ui::WindowAndroid::RegisterWindowAndroid },
};
RegisterNativeMethods(env, kUiRegisteredMethods,arraysize(kUiRegisteredMethods));
[5_4. ui::gl::android::RegisterJni(env)
static base::android::RegistrationMethod kGLRegisteredMethods[] = {
{ "SurfaceTextureListener", gfx::SurfaceTextureListener::RegisterSurfaceTextureListener },
};
return RegisterNativeMethods(env, kGLRegisteredMethods, arraysize(kGLRegisteredMethods));
[5_5. ui::shell_dialogs::RegisterJni(env)
static base::android::RegistrationMethod kUiRegisteredMethods[] = {
{ "SelectFileDialog", ui::SelectFileDialogImpl::RegisterSelectFileDialog },
};
return RegisterNativeMethods(env, kUiRegisteredMethods, arraysize(kUiRegisteredMethods));
[5_6. content::android::RegisterCommonJni(env)
base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "CommandLine", RegisterCommandLine },
{ "DeviceTelephonyInfo", content::DeviceTelephonyInfo::RegisterDeviceTelephonyInfo },
{ "FlingAnimator", webkit_glue::FlingAnimatorImpl::RegisterJni },
{ "HashSet", content::RegisterHashSet },
{ "TraceEvent", RegisterTraceEvent },
};
RegisterNativeMethods(env, kContentRegisteredMethods, arraysize(kContentRegisteredMethods));
[5_7. content::android::RegisterBrowserJni(env)
base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "AndroidLocationApiAdapter", content::AndroidLocationApiAdapter::RegisterGeolocationService },
{ "AndroidBrowserProcess", content::RegisterAndroidBrowserProcess },
{ "ChildProcessLauncher", content::RegisterChildProcessLauncher },
{ "ContentSettings", content::ContentSettings::RegisterContentSettings },
{ "ContentViewRenderView", content::ContentViewRenderView::RegisterContentViewRenderView },
{ "ContentVideoView", content::ContentVideoView::RegisterContentVideoView },
{ "ContentViewCore", content::RegisterContentViewCore },
{ "DateTimePickerAndroid", content::RegisterDateTimeChooserAndroid},
{ "DownloadControllerAndroidImpl", content::DownloadControllerAndroidImpl::RegisterDownloadController },
{ "InterstitialPageDelegateAndroid", content::InterstitialPageDelegateAndroid::RegisterInterstitialPageDelegateAndroid },
{ "MediaResourceGetterImpl", content::MediaResourceGetterImpl::RegisterMediaResourceGetter },
{ "LoadUrlParams", content::RegisterLoadUrlParams },
{ "RegisterImeAdapter", content::RegisterImeAdapter },
{ "TouchPoint", content::RegisterTouchPoint },
{ "TracingIntentHandler", content::RegisterTracingIntentHandler },
{ "WebContentsObserverAndroid", content::RegisterWebContentsObserverAndroid },
{ "WebViewStatics", content::RegisterWebViewStatics },
};
RegisterNativeMethods(env, kContentRegisteredMethods, arraysize(kContentRegisteredMethods));
[5_8. content::android::RegisterAppJni(env)
base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "ContentMain", content::RegisterContentMain },
{ "ChildProcessService", content::RegisterChildProcessService },
};
RegisterNativeMethods(env, kContentRegisteredMethods, arraysize(kContentRegisteredMethods));
[5_9. media::RegisterJni(env)
static base::android::RegistrationMethod kMediaRegisteredMethods[] = {
{ "AudioManagerAndroid", AudioManagerAndroid::RegisterAudioManager },
{ "MediaPlayerBridge", MediaPlayerBridge::RegisterMediaPlayerBridge },
{ "MediaPlayerListener", MediaPlayerListener::RegisterMediaPlayerListener },
{ "VideoCaptureDevice", VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice },
{ "WebAudioMediaCodecBridge", WebAudioMediaCodecBridge::RegisterWebAudioMediaCodecBridge },
};
RegisterNativeMethods(env, kMediaRegisteredMethods, arraysize(kMediaRegisteredMethods));
6. ContentMain
开始 content 的初始化工作。