1. 程式人生 > >[chromium][browser][idea][closed] Part2 : 把渲染模式改成SurfaceView方式 + java端的改動

[chromium][browser][idea][closed] Part2 : 把渲染模式改成SurfaceView方式 + java端的改動

接上文接下來是從aw_content -> chromium_webview ->  webkit -> browser的方向進行更改

1、修改android_webview\native\aw_contents.cc,把InProcessViewRenderer部分去除

1)遮蔽browser_view_renderer_ 

2)ondraw直接return true


2、修改webkit部分

1)需要用的FurfaceView的話,重要的通道需要擁有ContentView的屬性


3、所以也要修改content中需要修改ContenView的構造方法

1)把mContentViewCore開放給外面,等外面建立後設置進來就行,所以這裡構造時不用生成mContentViewCore


4、修改AwContents.java

1)把mContainerView改成ConentView型別

2)setNewAwContents中把mContentViewCore設定給ConentView

3)getContentHeightCss和getContentWidthCss中有點錯誤,先執行一下ContentView的get方法

同時在ContentView中也要加上getContentWidth方法


5、Browser中的修改

1)把so的拉起動作改到BrowserActivity中

2)BaseUI的Attach和Dettach中需要對SuffaceView進行重新對接

mContentViewRenderView參考Chromium_testshell的實現


執行異常

1、WebViewChromiumFactoryProvider進入執行異常

getBrowserContextLocked 中改成PreferenceManager.getDefaultSharedPreferences(ActivityThread.currentApplication());


2、因為surfaceView對接,頁面容易出現黑屏

1)Controller的onPageStarted中最好,retach一下

2)  goBackOnePageOrQuit中把switchToTab和closeTab的順序換一下

3)createScreenshot中直接取contentView.getBitmap


3、Tab.java中也把capture改成contentView.getBitmap


4、因為Webview的變動,發現原來很多用的地方有錯誤,先遮蔽,所以會帶來一些功能確實

如GoogleAccountLogin、Preloader、AccessibilityPreferencesFragment、WebViewPreview、FontSizePreview、


5、上面的getContentHeightCss寫錯了,改為呼叫的mContentViewCore的就行


6、同時忘記改AndroidManifest.xml,加上SandboxedProcessService0等

7、CookieManagerAdapter中也有一個錯誤,先把setAcceptCookie註釋掉


8、assets中需要新增 zh_CN.pak資源


終於跑通了,滑動速度槓槓的:)