在维护一些原生+H5
的Android
项目的时候,我们会发现项目是接入了X5内核
的WebView
来提高H5
的用户体验感。这篇博客我知道的X5内核WebView
相关的知识,希望对看文章的小伙伴有所帮助。
X5内核的WebView
项目集成
项目的build.gradle
中加入:
repositories {
google()
// 增加这行
mavenCentral()
}
在app的build.gradle
加入:
dependencies {
...
// 增加这行
api 'com.tencent.tbs:tbssdk:44216'
}
权限设置:
<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.** {
*;
}
预加载
这个是我比较喜欢的点,SDK
有给我们做好预加载的方法:
QbSdk.initX5Environment(appContext, new new PreInitCallback() {
@Override
public void onCoreInitFinished() {
// 内核初始化完成,可能为系统内核,也可能为系统内核
}
/**
* 预初始化结束
* 由于X5内核体积较大,需要依赖网络动态下发,所以当内核不存在的时候,默认会回调false,此时将会使用系统内核代替
* @param isX5 是否使用X5内核
*/
@Override
public void onViewInitFinished(boolean isX5) {
}
});
首次冷启动优化方案
-
设置开启优化方案
// 在调用TBS初始化、创建WebView之前进行如下配置 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中增加内核首次加载时优化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.所有系统内核的包名更换成com.tencent.smtt
。
3.需要注意的是,代码不要出现以下的写法:
import android.*;
import android.webkit.*;
import android.webkit.WebStorage.*;
import android.net.*;
import android.net.http.*;
上面是简单的使用方法,更具体的用法请看官方wiki