在維護(hù)一些原生+H5
的Android
項(xiàng)目的時(shí)候狠持,我們會(huì)發(fā)現(xiàn)項(xiàng)目是接入了X5內(nèi)核
的WebView
來提高H5
的用戶體驗(yàn)感叛买。這篇博客我知道的X5內(nèi)核WebView
相關(guān)的知識(shí)椰憋,希望對(duì)看文章的小伙伴有所幫助波势。
X5內(nèi)核的WebView
項(xiàng)目集成
項(xiàng)目的build.gradle
中加入:
repositories {
google()
// 增加這行
mavenCentral()
}
在app的build.gradle
加入:
dependencies {
...
// 增加這行
api 'com.tencent.tbs:tbssdk:44216'
}
權(quán)限設(shè)置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
混淆配置
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
-keep class com.tencent.smtt.** {
*;
}
-keep class com.tencent.tbs.** {
*;
}
預(yù)加載
這個(gè)是我比較喜歡的點(diǎn),SDK
有給我們做好預(yù)加載的方法:
QbSdk.initX5Environment(appContext, new new PreInitCallback() {
@Override
public void onCoreInitFinished() {
// 內(nèi)核初始化完成笆檀,可能為系統(tǒng)內(nèi)核忌堂,也可能為系統(tǒng)內(nèi)核
}
/**
* 預(yù)初始化結(jié)束
* 由于X5內(nèi)核體積較大,需要依賴網(wǎng)絡(luò)動(dòng)態(tài)下發(fā)酗洒,所以當(dāng)內(nèi)核不存在的時(shí)候士修,默認(rèn)會(huì)回調(diào)false,此時(shí)將會(huì)使用系統(tǒng)內(nèi)核代替
* @param isX5 是否使用X5內(nèi)核
*/
@Override
public void onViewInitFinished(boolean isX5) {
}
});
首次冷啟動(dòng)優(yōu)化方案
- 設(shè)置開啟優(yōu)化方案
// 在調(diào)用TBS初始化樱衷、創(chuàng)建WebView之前進(jìn)行如下配置
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);
2.增加Service聲明李命,在AndroidManifest.xml中增加內(nèi)核首次加載時(shí)優(yōu)化Service聲明:
<service
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
android:label="dexopt"
android:process=":dexopt" />
具體的使用
1.XML的使用:
<com.tencent.smtt.sdk.WebView
android:id="@+id/forum_context"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
2.所有系統(tǒng)內(nèi)核的包名更換成com.tencent.smtt
。
3.需要注意的是箫老,代碼不要出現(xiàn)以下的寫法:
import android.*;
import android.webkit.*;
import android.webkit.WebStorage.*;
import android.net.*;
import android.net.http.*;
上面是簡(jiǎn)單的使用方法,更具體的用法請(qǐng)看官方wiki