Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行

本文详细介绍了如何在Cocos2d-x 3.17.2项目中集成X5WebView内核,以解决Android WebView的问题。通过步骤包括下载X5 SDK,添加jar包,设置权限,创建自定义WebView类,初始化内核,调整AndroidManifest.xml,并解决模拟器中闪退的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集成X5WebView内核主要是为了解决Android自带的WebView各种报错问题
研究了好几天,尝试过网上静态集成等等方法,没有一个正常的
后来在腾讯官方下载X5WebView最新SDK 2021-02-25的版本,但是官方Demo项目太老了,编译各种错误,无奈研究好久总算有点眉目,先说明下环境:
Android Studio 4.1.3
Visual studio 2019
Java 1.8
SDK Android API 28
NDK android-ndk-r21e
Cocos2d-x 3.17.2

腾讯浏览服务SDK,官方下载地址:https://x5.tencent.com/tbs/sdk.html
Cocos2d-x集成X5WebView分为两种
先说第一种:类集成,使用Activity来启动X5WebView

步骤1:
创建cocos2d-x项目
先创建一个cocos2d-x 3.17.2项目
使用Android studio 打开项目,同步可能报错,先把项目的插件版本和Gradle版本改为
3.5.3 对应Gradle版本 5.4.1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再设置NDK
在这里插入图片描述
设置完成以后项目会自动重新同步,若没有自动同步,请点击界面右上角的同步按钮同步项目
如图:在这里插入图片描述
当项目显示可运行的时候,表示同步完成,项目可进行编译了
在这里插入图片描述

步骤2:
下载X5 SDK 引入jar包
https://x5.tencent.com/tbs/sdk.html
下载好后解压如图:
在这里插入图片描述
将tbs_sdk_thirdapp_v4.3.0.93_43993_sharewithdownloadwithfile_withoutGame_obfs_20210220_114728.jar复制到项目proj.android\app\libs目录下,没有libs文件夹自己创建
在这里插入图片描述
再打开Android studio界面,切换到Project样式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择SDK文件右键Add As Library
在这里插入图片描述
直接确定,项目会自动同步完成

步骤3:
添加权限
在这里插入图片描述

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Application节点添加 android:usesCleartextTraffic=“true”
解决高版本不能访问http问题,添加完成后如下:
在这里插入图片描述

步骤4:
参照官方Demo写一个继承WebView的类
在这里插入图片描述
创建名为X5WebView的类,代码如下:

package org.cocos2dx.cpp;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;

import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;

public class X5WebView extends WebView
{
   
   
    //防止加载网页时调起系统浏览器
    private WebViewClient client = new WebViewClient() {
   
   
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
   
   
            view.loadUrl(url);
            return true;
        }
    };

    //重写构造函数
    @SuppressLint("SetJavaScriptEnabled")
    public X5WebView(Context context, AttributeSet attributeSet) {
   
   
        super(context, attributeSet);
        this.setWebViewClient(client);
        WebSettings webSetting = this.getSettings();
        webSetting.setJavaScriptEnabled(true);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setBuiltInZoomControls(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setSupportMultipleWindows(false);
        webSetting.setAppCacheEnabled(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
        this.getView().setClickable(true);
    }

    //重写构造函数
    public X5WebView(Context context) {
   
   
        super(context);
        this.setBackgroundColor(85621);
    }
}

实现WebViewJavaScriptFunction接口,好像调用JS要
在这里插入图片描述
在这里插入图片描述
代码如下:

package org.cocos2dx.cpp;

public interface WebViewJavaScriptFunction {
   
   
    void onJsFunctionCalled(String tag);
}

步骤5:
在 AppActivity 类中添加一个全局变量,用来记录内核初始化状态
再添加X5内核初始化代码

public static boolean mX5WebViewInitState = false;  //用于记录内核是否初始化完成
package org.cocos2dx.cpp;

import android.os.Bundle;
import org.cocos2dx.lib.Cocos2dxActivity;
import android.os.Build;
import android.util.Log;
import android.view.WindowManager;

import com.tencent.smtt.sdk.QbSdk;

public class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值