[chromium][browser][idea][closed] Part1 : 把AwContent和Chrome_shell編譯成一個so
因為AwContent和ChromeShell各有一套ContentMainDelegate,所以要選擇以誰為基礎,
這裡為確保ChromeShell端的完整性,以ChromeShell為主編譯物件,然後把AwContent的東西加進去
以Android4.4.2的Chromium_org為例,所以編譯命令是ninja -C out/Release chromium_testshell
主動修改
1、先解決gyp編譯指令碼問題:
chrome\chrome_android.gypi中新增上Awcontent的編譯target
'../android_webview/android_webview.gyp:android_webview_common',
2、加上JNI註冊部分
chrome\browser\android\chrome_jni_registrar.cc中新增
android_webview\native\android_webview_jni_registrar.h
{ "AndroidWebview",
android_webview::RegisterJni },
3、ChromeMainDelegateTestShellAndroid和aw_main_delegate的結合,把aw_main_delegate的內容合入ChromeMainDelegateTestShellAndroid中
從CreateContentBrowserClient到CreateWebPreferencesPopulater
5、android_webview\renderer\aw_content_renderer_client.h aw_content_renderer_client public from chrome_content_renderer_client.h
1)visited_link_slave_定義重複,去掉aw_content_renderer_client的visited_link_slave_
2)刪除重複實現GetDefaultEncoding到IsLinkVisited 3)RenderThreadStarted加上chrome域的執行,刪除visited_link_slave_執行 4)RenderViewCreated加上chrome域的執行,並去掉print部分
編譯錯誤
1、去掉android_webview.gyp:android_webview_common中下面重複編譯程式碼
Printing部分、content_app_both和aw_main_delegate
2、android_webview\common\android_webview_message_generator.h中把重複的print message也去掉
3、android_webview\native\aw_form_database.cc中刪除重複定義
AutofillWebDataService::FromBrowserContext
4、android_webview\native\aw_pdf_exporter.cc中的編譯錯誤,先刪除ExportToPdf的實現
5、native\aw_web_contents_delegate 從chrome_web_contents_delegate_android去繼承
刪除:GetJavaScriptDialogManager 和 FindReply
CloseContents的時候加上Chrome域的CloseContents
FilesSelectedInChooser中間部分編譯錯誤,先註釋掉實現程式碼
cc檔案中刪除:LazyInstance<AwJavaScriptDialogManager>::Leaky兩行
啟動錯誤
1、BrowserContext建立問題
因為chome-shell建立的是ProfileImpl,所以要把AwBrowserContext部分合入
(應該是AwBrowserContext public from ProfileImpl)
2、存在一個建立時機問題
要在Profile CreateProfile的時候改為AwBrowserContext,但是這樣程式碼結構就變得非常差勁
3、AwBrowserContext構造最後加上
InitializeBeforeThreadCreation();
PreMainMessageLoopRun();
4、還存在JniDependencyFactory* native_factory取不到的問題,用chrome_content_browser_client增加的static方法
5、刪除從GetRequestContext到GetResourceContext的重複實現部分
經過上面的整合,編譯出來的so運行於android_webview_apk是ok的,能否再用於chromium_testshell還沒驗證。
接下來就是通過更改渲染機制,把SurfaceView用起來,以提高效能。