android 集成x5內核時 本地沒有,騰訊瀏覽服務-接入文檔

三、SDK集成步驟

1. 第一步

下載 SDK jar 包放到工程的libs目錄下,將源碼和XML里的系統包和類替換為SDK里的包和類,具體對應如下:

系統內核

SDK內核

android.webkit.ConsoleMessage

com.tencent.smtt.export.external.interfaces.ConsoleMessage

android.webkit.CacheManager

com.tencent.smtt.sdk.CacheManager(deprecated)

android.webkit.CookieManager

com.tencent.smtt.sdk.CookieManager

android.webkit.CookieSyncManager

com.tencent.smtt.sdk.CookieSyncManager

android.webkit.CustomViewCallback

com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback

android.webkit.DownloadListener

com.tencent.smtt.sdk.DownloadListener

android.webkit.GeolocationPermissions

com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback

android.webkit.HttpAuthHandler

com.tencent.smtt.export.external.interfaces.HttpAuthHandler

android.webkit.JsPromptResult

com.tencent.smtt.export.external.interfaces.JsPromptResult

android.webkit.JsResult

com.tencent.smtt.export.external.interfaces.JsResult

android.webkit.SslErrorHandler

com.tencent.smtt.export.external.interfaces.SslErrorHandler

android.webkit.ValueCallback

com.tencent.smtt.sdk.ValueCallback

android.webkit.WebBackForwardList

com.tencent.smtt.sdk.WebBackForwardList

android.webkit.WebChromeClient

com.tencent.smtt.sdk.WebChromeClient

android.webkit.WebHistoryItem

com.tencent.smtt.sdk.WebHistoryItem

android.webkit.WebIconDatabase

com.tencent.smtt.sdk.WebIconDatabase

android.webkit.WebResourceResponse

com.tencent.smtt.export.external.interfaces.WebResourceResponse

android.webkit.WebSettings

com.tencent.smtt.sdk.WebSettings

android.webkit.WebSettings.LayoutAlgorithm

com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm

android.webkit.WebStorage

com.tencent.smtt.sdk.WebStorage

android.webkit.WebView

com.tencent.smtt.sdk.WebView

android.webkit.WebViewClient

com.tencent.smtt.sdk.WebViewClient

需要注意的是:

1)請不要在代碼里使用下述寫法:

import android.*;

import android.webkit.*;

import android.webkit.WebStorage.*;

import android.net.*;

import android.net.http.*;

2)除了源碼里需要把相關的包名和類名進行替換,布局xml里的聲明也需要替換,例如:

android:id="@+id/forum_context"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="5dp"

android:paddingRight="5dp" />

為了確保替換的完整,可以使用腳本checkqbsdk.sh 點擊下載 進行掃描,windows 上使用TBSSdk接入掃描工具.exe 點擊下載 進行掃描。腳本放在所有源碼的頂級目錄下運行即可。后續的版本發布前盡量都運行一遍掃描,以免上次掃描后新提交的代碼有未替換的情況發生。替換不完全時,可能發生的問題是關于cookie的身份錯誤、類轉換時的crash等。cookie問題產生的原理是:一段代碼把cookie塞給了系統內核,另外一段代碼嘗試從x5的內核里讀取cookie就失敗了。類轉換的錯誤產生的原理是:比如xml里指定的是系統的webview,java的代碼里把它當作x5的webview使用。

2. 第二步

3. 第三步

AndroidManifest.xml里加入權限聲明:

4. 第四步

優化異常上報:

為了提高合作方的webview場景穩定性,及時發現并解決x5相關問題,當客戶端發生crash等異常情況并上報給服務器時請務必帶上x5內核相關信息。x5內核異常信息獲取接口為:com.tencent.smtt.sdk.WebView.getCrashExtraMessage(context)。以bugly日志上報為例:

UserStrategy strategy = new UserStrategy(appContext);

strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {

public Map onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {

LinkedHashMap map = new LinkedHashMap();

String x5CrashInfo = com.tencent.smtt.sdk.WebView.getCrashExtraMessage(appContext);

map.put("x5crashInfo", x5CrashInfo);

return map;

}

@Override

public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType, String errorMessage, String errorStack) {

try {

return "Extra data.".getBytes("UTF-8");

} catch (Exception e) {

return null;

}

}

});

CrashReport.initCrashReport(appContext, APPID, true, strategy);

5. 第五步

適配修改:

1) App 首次就可以加載 x5 內核

App 在啟動后(例如在 Application 的 onCreate 中)立刻調用 QbSdk 的預加載接口 initX5Environment ,可參考接入示例,第一個參數傳入 context,第二個參數傳入 callback,不需要 callback 的可以傳入 null,initX5Environment 內部會創建一個線程向后臺查詢當前可用內核版本號,這個函數內是異步執行所以不會阻塞 App 主線程,這個函數內是輕量級執行所以對 App 啟動性能沒有影響,當

App 后續創建 webview 時就可以首次加載 x5 內核了

2) 目前,由于SDK WebView所提供的WebView類,是對系統WebView的聚合包裝,所以:獲取系統內核的WebView或者 x5內核的WebView的寬高

android.webkit.WebView webView = new android.webkit.WebView(this);

int width = webView.getWidth();

需要采用下面的方式進行

com.tencent.smtt.sdk.WebView webView = new com.tencent.smtt.sdk.WebView(this);

int width = webView.getView().getWidth();

6. 第六步

調整cookie的使用:

com.tencent.smtt.sdk.CookieManager和com.tencent.smtt.sdk.CookieSyncManager的相關接口的調用,在接入SDK后,需要放到創建X5的WebView之后(也就是X5內核加載完成)進行;否則,cookie的相關操作只能影響系統內核。

7. 第七步

兼容視頻播放:

1)享受頁面視頻的完整播放體驗需要做如下聲明:

頁面的Activity需要聲明android:configChanges="orientation|screenSize|keyboardHidden"

2)視頻為了避免閃屏和透明問題,需要如下設置

a)網頁中的視頻,上屏幕的時候,可能出現閃爍的情況,需要如下設置:Activity在onCreate時需要設置:

getWindow().setFormat(PixelFormat.TRANSLUCENT);(這個對宿主沒什么影響,建議聲明)

b)在非硬繪手機和聲明需要controller的網頁上,視頻切換全屏和全屏切換回頁面內會出現視頻窗口透明問題,需要如下設置

聲明當前false為不透明。

特別說明:這個視各app情況所需,不強制需求,如果聲明了,對體驗更有利

c)以下接口禁止(直接或反射)調用,避免視頻畫面無法顯示:

webview.setLayerType()

webview.setDrawingCacheEnabled(true);

8. 第八步

輸入法設置

避免輸入法界面彈出后遮擋輸入光標的問題

方法一:在AndroidManifest.xml中設置

android:windowSoftInputMode="stateHidden|adjustResize"

方法二:在代碼中動態設置:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

9. 第九步

app 自定義 UA 的說明

如果 app 需要自定義 UA,建議采取在 SDK 默認UA 后追加 app UA 的方式示例:

webSetting.setUserAgentString(webSetting.getUserAgentString() + APP_NAME_UA);

其中 APP_NAME_UA 是 app 自定義 UA

10. 第十步

app混淆時的處理

由于我們提供的 TBS jar 已經混淆過,所以 App 混淆時可以不再混淆我們的 TBS jar,或者也可以把我們的混淆策略 proguard 點擊下載 加入 App 的混淆策略里注意:如果 App沒有按照該規則混淆了 TBS jar,可能導致無法使用 x5內核

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541669.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java vector_Java Vector sureCapacity()方法與示例

java vector向量類別sureCapacity()方法 (Vector Class ensureCapacity() method) ensureCapacity() method is available in java.util package. sureCapacity()方法在java.util包中可用。 ensureCapacity() method is used to ensure the capacity of this Vector when requi…

Tcl與Design Compiler (十二)——綜合后處理

本文如果有錯,歡迎留言更正;此外,轉載請標明出處 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也講了一些綜合后的需要進行的一些工作,這里就集中講一下DC完成綜合了,產生了…

Java短類的compareTo()方法和示例

簡短的類compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Short object against the given Short obj…

四則運算網頁版

一.設計思想: 1)寫出一個菜單界面,有兩個選項一個是分數,一個是整數。 2)而這兩個標簽后面則是轉向其更詳細的菜單,題目數量,有無括號,運算的項數等等詳細功能,再點擊這兩…

Java RandomAccessFile seek()方法與示例

RandomAccessFile類seek()方法 (RandomAccessFile Class seek() method) seek() method is available in java.io package. seek()方法在java.io包中可用。 seek() method is used to sets the file pointer position calculated from the starting of this file at which the …

Javascript開發技巧(JS中的變量、運算符、分支結構、循環結構)

一、Js簡介和入門 繼續跟進JS開發的相關教程。 <!-- [使用JS的三種方式] 1、HTML標簽中內嵌JS&#xff08;不提倡使用&#xff09;&#xff1a; 示例&#xff1a;<button οnclick"javascript:alert(你真點啊&#xff01;)">有本事點我呀&#xff01;&#…

android 顏色范圍,Android系統顏色的適用范圍

###All Clickable Views:ripple effect (Lollipop only) — “colorControlHighlight”###Status Bar:background (Lollipop only) – “colorPrimaryDark”###Navigation Bar:background (Lollipop only) – “android:navigationBarColor”###EditText:underline (unfocused)…

bytevalue_Java Short類byteValue()方法及示例

bytevalue短類byteValue()方法 (Short class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Short object converted to type byte (by …

分布式交換機配置備份和還原

1.備份和還原vSphere Distributed Switch配置 1.1導出 vSphere Distributed Switch 配置 可以將 vSphere Distributed Switch 和分布式端口組配置導出到某一文件。該文件保留有效的網絡配置&#xff0c;使這些配置能夠傳輸至其他環境。 步驟&#xff1a; 1) 在 vSphere Web Cli…

html自動執行函數,JS 自執行函數原理及用法

js自執行函數&#xff0c;聽到這個名字&#xff0c;首先會聯想到函數。接下來&#xff0c;我來定義一個函數&#xff1a;function aaa(a,b){return sum a b}定義了一個名為aaa的函數&#xff0c;在里面可以計算兩個數的和。如果想執行它&#xff0c;就必須得調用它&#xff0…

java reverse_Java Integer類reverse()方法與示例

java reverse整數類reverse()方法 (Integer class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to returns the value generated by reversing the order of bits in binary 2s comp…

華為鴻蒙系統好在哪,華為鴻蒙2.0可以替代安卓嗎,華為鴻蒙2.0優勢在哪

在華為開發者大會上&#xff0c;華為消費業務CEO 余承東&#xff0c;正式發布鴻蒙OS2.0&#xff0c;并宣布華為鴻蒙OS將全面啟用全場景生態&#xff0c;并將于2020年12月發布手機版。余承東還表示&#xff0c;明年&#xff0c;華為的智能手機將全面升級&#xff0c;以支持鴻蒙操…

Java GregorianCalendar add()方法與示例

GregorianCalendar類的add()方法 (GregorianCalendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to add the given quantity to the specified GregorianCalendar field (fi). add()方法用于…

JVM(三)——對象的訪問定位

JVM&#xff08;三&#xff09;——對象的訪問定位創建完對象&#xff0c;到了使用對象的時候&#xff0c;通常聲明一個同類型的引用指向該類型的對象&#xff0c;由這個引用來操作對象的字段、方法等。 Object obj new Object();復制代碼我們的Java程序需要通過棧上的 refere…

html5滑動刪除置頂,html5向左滑動刪除特效

html5向左滑動刪除特效* {padding: 0;margin: 0;list-style: none;}header {background: #f7483b;border-bottom: 1px solid #ccc}header h2 {text-align: center;line-height: 54px;font-size: 16px;color: #fff}.list-ul {overflow: hidden}.list-li {line-height: 60px;bord…

Java Double類hashCode()方法及示例

雙類hashCode()方法 (Double class hashCode() method) hashCode() method is available in java.lang package. hashCode()方法在java.lang包中可用。 hashCode() method is used to return hashcode of the Double-object. hashCode()方法用于返回Double對象的哈希碼。 hashC…

Java DataOutputStream size()方法及示例

DataOutputStream類的size()方法 (DataOutputStream Class size() method) size() method is available in java.io package. size()方法在java.io包中可用。 size() method is used to return the size of this stream or in other words, we can say it returns the value of…

html怎樣讓列表向下移動,Html無序列表ul控件實現行上下移動.

new document // 創建一個ulvar ul document.createElement("ul");ul.id "oList";// 創建divvar div document.getElementById(mergeCase);// 把ul放置到div中div.appendChild(ul);// 遍歷所有的li條目function trace(){var strTest "";for …

創建laravel項目

下載項目到本地 git clone https://github.com/251068550/LaraBlog.gitcompoer安裝 cd LaraBlog composer install如果composer install安裝很慢&#xff0c;推薦安裝國內鏡像 執行 composer config -g repo.packagist composer https://packagist.phpcomposer.com 配置.env文件…

Java ArrayList removeRange()方法與示例

ArrayList類removeRange()方法 (ArrayList Class removeRange() method) removeRange() method is available in java.util package. removeRange()方法在java.util包中可用。 removeRange() method is used to remove the elements whose range is between st_in(start index)…