chromium_testshell 的初始化工作

本文详细介绍了Chrome浏览器启动过程中的关键步骤,包括从命令行文件读取配置、资源文件解压、共享库加载及JNI接口注册等。通过这些步骤,读者可以了解到Chrome如何初始化并准备运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的初始化工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值