最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?WebView升級(jí)詳細(xì)操作指南

 更新時(shí)間:2024年07月25日 09:09:56   作者:帥次  
Android的WebView差異化很嚴(yán)重,下面這篇文章主要給大家介紹了關(guān)于Android?WebView升級(jí)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、項(xiàng)目背景

1.1 需求

項(xiàng)目需要使用WebView加載合作方公司的Url(里面功能比較多):

  • 使用了ES6(ECMAScript 6.0(以下簡(jiǎn)稱 ES6)是 JavaScript 語(yǔ)言的下一代標(biāo)準(zhǔn),已經(jīng)在 2015 年 6 月正式發(fā)布了(所以也被叫作ES2015))

  • JavaScript 使用的函數(shù),要求 chrome 最低版本是85。

一系列原因?qū)е耊ebView加載該鏈接報(bào)錯(cuò),合作方那邊因?yàn)槟承┰?,不想改變現(xiàn)有的代碼實(shí)現(xiàn)等。需要我們自行解決,那就開整唄。

1.2 設(shè)備

  • Android 8.1, WebView 版本 60.xxxx.xxxx.xx(好吧,忘記版本了,頁(yè)面打不開))

  • Android 8.1, WebView 版本 61.0.3163.98(頁(yè)面打不開)

  • Android 11,  WebView 版本 83.0.4103.120(視頻無(wú)法播放,廠商給的答復(fù)是不支持,具體原因沒說)

查看版本號(hào):

  • 可以進(jìn)入設(shè)置-開發(fā)者模式-Webview實(shí)現(xiàn)可以看到 Webview 內(nèi)核版本號(hào)。

  • adb 命令: adb shell pm dump com.android.webview|grep version

adb shell pm dump com.android.webview|grep version
    versionCode=410412053 minSdk=21 targetSdk=30
    versionName=83.0.4103.120
    signatures=PackageSignatures{48d4530 version:3, signatures:[63b96fc5], past signatures:[]}

1.3 解決方案

1.騰訊X5內(nèi)核,還是加載失敗,以為是集成錯(cuò)誤。特意使用微信打開該鏈接,也是加載失敗。

2.更新安裝包,因?yàn)閮?nèi)嵌WebView的是com.android.webview。

  • 2.1 下載了包名為 95.0.4638.50-463805003_minAPI21版本的包,進(jìn)行覆蓋安裝->報(bào)錯(cuò),提示簽名文件不一致。

  • 2.2 下載com.android.google.weview_95.0.4638.74_APKPure,安裝成功了,加載還是報(bào)錯(cuò)。而且在WebView實(shí)現(xiàn)->不可選擇com.android.google.webview。

3.修改framework-res.apk中配置,允許WebView實(shí)現(xiàn)選擇com.android.google.webview。這種操作不太合適2C,需要root權(quán)限,修改系統(tǒng)文件,一不留神就可能產(chǎn)生其他問題。

4.使用 WebViewUpgrade,這個(gè)還是比較強(qiáng)大的,對(duì)WebView內(nèi)核進(jìn)行升級(jí)。已解決低版本無(wú)法加載url、視頻無(wú)法播放的問題。

二、WebViewUpgrade 接入

WebViewUpgrade的創(chuàng)建者遇到的問題:華為機(jī)上因?yàn)閃ebView內(nèi)核的Chromium版本低于107無(wú)法播放H265視頻的情況,為了解決上述問題可以用JS實(shí)現(xiàn)H265播放,但是會(huì)比較卡,就想不能讓W(xué)ebView用應(yīng)用內(nèi)的APK作為內(nèi)核。

2.1 支持版本

  • com.google.android.webview:122.0.6261.64

  • com.android.webview:113.0.5672.136

  • com.huawei.webview:14.0.0.331

  • com.android.chrome:122.0.6261.43

  • com.amazon.webview.chromium:118-5993-tv.5993.155.51

當(dāng)然,你也可以找到其他版本下載安裝即可。例如 com.android.webview,我覺得113版本太高,那么你可以下載一個(gè)95版本的。或者你不想使用com.android.webview 改用 com.google.android.webview也是可以的。

2.2 接入

2.2.1 導(dǎo)入項(xiàng)目(我使用的是這個(gè))

將Demo的core和download-source模塊直接導(dǎo)入到自己項(xiàng)目,修改core中 implementation 'androidx.appcompat:appcompat:1.6.1'的版本。

2.2.2 implementation

implementation 'io.github.jonanorman.android.webviewup:core:0.1.0'// 不需要下載APK時(shí)使用
implementation 'io.github.jonanorman.android.webviewup:download-source:0.1.0'// 需要下載APK使用

如果是低版本,可能會(huì)報(bào)錯(cuò)。core中 implementation 'androidx.appcompat:appcompat:1.6.1'的版本比較高,需要兼容的SDK版本也比較高。

解決方案:

  • 1.提高項(xiàng)目 SDK 版本。

  • 2.使用exclude。

以上兩種方式都可以。

2.3 使用

設(shè)置

    private void setWebView(){
        UpgradeInfo upgradeInfo = new UpgradeInfo(
                "com.android.webview",
                "113.0.5672.136",
                "https://mirror.ghproxy.com/https://raw.githubusercontent.com/JonaNorman/ShareFile/main/com.android.webview_113.0.5672.13_armeabi-v7a.zip",
                "網(wǎng)絡(luò)");
        String  systemWebViewPackageName = WebViewUpgrade.getSystemWebViewPackageName();
        if (systemWebViewPackageName != null &&systemWebViewPackageName.equals(upgradeInfo.packageName)
                && VersionUtils.compareVersion( WebViewUpgrade.getSystemWebViewPackageVersion(),upgradeInfo.versionName) >= 0) {
            //Toast.makeText(getApplicationContext(), "system webView is larger than the one to be upgraded, so there is no need to upgrade", Toast.LENGTH_LONG).show();
            return;
        }
        UpgradeSource upgradeSource = upgradeInfo.toUpgradeSource(RobotApplication.getInstance());
        if (upgradeSource == null) {
            return;
        }
        WebViewUpgrade.upgrade(upgradeSource);
        updateUpgradeWebViewStatus();
    }
}

這里我使用的是網(wǎng)絡(luò)下載:

  • 包名:com.android.webview;

  • 版本號(hào):113.0.5672.136

  • 下載內(nèi)核地址:https://mirror.ghproxy.com/https://raw.githubusercontent.com/JonaNorman/ShareFile/main/com.android.webview_113.0.5672.13_armeabi-v7a.zip

    //更新狀態(tài)
    private void updateUpgradeWebViewStatus() {
        if (WebViewUpgrade.isProcessing()) {
            LogUtils.e("WebVIewUpgrade","Upgrading...");
        } else if (WebViewUpgrade.isFailed()) {
            LogUtils.e("WebVIewUpgrade","Fail...");
        } else if (WebViewUpgrade.isCompleted()) {
            LogUtils.e("WebVIewUpgrade","complete...");
        }
        int process = (int) (WebViewUpgrade.getUpgradeProcess() * 100);
        LogUtils.e("WebVIewUpgrade","Processing:-----"+process + "%");
        Throwable throwable = WebViewUpgrade.getUpgradeError();
        if (throwable != null) {
            LogUtils.e("WebVIewUpgrade","Throwable.message:" + throwable.getMessage() + "\nstackTrace:" + Log.getStackTraceString(throwable));
        }
    }
public class UpgradeInfo {
    public String title;
    public String url;
    public String packageName;

    public String versionName;
    public String extraInfo;
    public UpgradeInfo(String packageName, String versionName, String url, String extraInfo) {
        this.title = packageName + "\n" + versionName;
        this.extraInfo = !TextUtils.isEmpty(extraInfo) ? extraInfo : "";
        if (!extraInfo.isEmpty()) {
            this.title = this.title + "\n" + extraInfo;
        }
        this.url = url;
        this.packageName = packageName;
        this.versionName = versionName;
    }

    public UpgradeInfo(String packageName, String versionName, String url) {

        this(packageName, versionName, url, "");
    }
    @Nullable
    public UpgradeSource toUpgradeSource(Context context) {
        UpgradeSource upgradeSource = null;
        if (this.extraInfo.equals("網(wǎng)絡(luò)")) {
            upgradeSource = new UpgradeDownloadSource(
                    context,
                    this.url,
                    new File(context.getFilesDir(), this.packageName + "/" + this.versionName + ".apk")
            );
        } else if (this.extraInfo.equals("內(nèi)置")) {
            upgradeSource = new UpgradeAssetSource(
                    context,
                    this.url,
                    new File(context.getFilesDir(), this.packageName + "/" + this.versionName + ".apk")
            );
        } else if (this.extraInfo.equals("安裝包")) {
            upgradeSource = new UpgradePackageSource(
                    context,
                    this.packageName
            );
        }
        return upgradeSource;
    }
    
public class MainActivity extends BaseActivity implements , UpgradeCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setWebView();
    }
    private void setWebView(){
        ......
    }
    //更新中
    @Override
    public void onUpgradeProcess(float percent) {
        updateUpgradeWebViewStatus();
    }
    //更新完成
    @Override
    public void onUpgradeComplete() {
        updateUpgradeWebViewStatus();
    }
    //更新失敗
    @Override
    public void onUpgradeError(Throwable throwable) {
        updateUpgradeWebViewStatus();
    }
}

注意:這個(gè)代碼盡量前置,如果無(wú)法前置,需要保證,其他地方先不要對(duì)WebView進(jìn)行操作。如果操作了,會(huì)導(dǎo)致初始化失敗。

可以先試用Demo嘗試功能是否可用,再集成到自己的項(xiàng)目中。

2.4 WebView

執(zhí)行完上面的操作后,你就正常操作WebView即可。上面我只是列舉了網(wǎng)上下載的例子(第一次下載,只要文件存在,無(wú)需重復(fù)下載),還支持內(nèi)置/安裝包的形式,我這是應(yīng)用包體太大,不適合內(nèi)置。

這種方式是可行的,但是也有一些小的前置條件需要注意,如果無(wú)法前置會(huì)導(dǎo)致使用失敗。怎么前置才能做到萬(wàn)無(wú)一失,就需要根據(jù)實(shí)際情況來判斷了。

總結(jié)

到此這篇關(guān)于Android WebView升級(jí)的文章就介紹到這了,更多相關(guān)Android WebView升級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RxJava 2.x新特性總結(jié)整理

    RxJava 2.x新特性總結(jié)整理

    這篇文章主要介紹了RxJava 2.x新特性的相關(guān)資料,文中通過圖文及示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Android獲取WebView加載url的請(qǐng)求錯(cuò)誤碼 【推薦】

    Android獲取WebView加載url的請(qǐng)求錯(cuò)誤碼 【推薦】

    這篇文章主要介紹了Android獲取WebView加載url的請(qǐng)求錯(cuò)誤碼 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Android studio button 按鈕 四種綁定事件的方法【實(shí)例代碼】

    Android studio button 按鈕 四種綁定事件的方法【實(shí)例代碼】

    這篇文章主要介紹了Android studio button 按鈕 四種綁定事件的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Android自定義密碼輸入框和數(shù)字鍵盤

    Android自定義密碼輸入框和數(shù)字鍵盤

    這篇文章主要為大家詳細(xì)介紹了Android自定義密碼輸入框和數(shù)字鍵盤的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android自定義滾動(dòng)選擇器實(shí)例代碼

    Android自定義滾動(dòng)選擇器實(shí)例代碼

    本篇文章主要介紹了Android自定義滾動(dòng)選擇器實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • Kotlin如何捕獲上下文中的變量與常量詳解

    Kotlin如何捕獲上下文中的變量與常量詳解

    這篇文章主要給大家介紹了關(guān)于Kotlin如何捕獲上下文中的變量與常量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Kotlin具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 使用RoundedBitmapDrawable生成圓角圖片的方法

    使用RoundedBitmapDrawable生成圓角圖片的方法

    由于RoundedBitmapDrawable類沒有直接提供生成圓形圖片的方法,所以生成圓形圖片首先需要對(duì)原始圖片進(jìn)行裁剪,將圖片裁剪成正方形,最后再生成圓形圖片,具體實(shí)現(xiàn)方法,可以參考下本文
    2016-09-09
  • Android Studio下無(wú)線調(diào)試的方法

    Android Studio下無(wú)線調(diào)試的方法

    這篇文章主要為大家詳細(xì)介紹了Android Studio平臺(tái)下無(wú)線調(diào)試的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • html5在android中的使用問題及技巧解讀

    html5在android中的使用問題及技巧解讀

    本文將詳細(xì)介紹下html5在android中的使用:特效按鈕的進(jìn)展/在html5中有關(guān)于觸摸屏的事件,感興趣的你可以參考下,或許對(duì)你有所幫助
    2013-03-03
  • Android硬件解碼組件MediaCodec使用教程

    Android硬件解碼組件MediaCodec使用教程

    在Android開發(fā)中提供了實(shí)現(xiàn)音視頻編解碼工具M(jìn)ediaCodec,針對(duì)對(duì)應(yīng)音視頻解碼類型通過該類創(chuàng)建對(duì)應(yīng)解碼器就能實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行解碼操作。本文通過示例詳細(xì)講解了MediaCodec的使用,需要的可以參考一下
    2022-11-11

最新評(píng)論

增城市| 乌审旗| 英德市| 博白县| 石家庄市| 富平县| 克山县| 专栏| 钟山县| 锡林郭勒盟| 沅陵县| 盐池县| 临武县| 五常市| 札达县| 安陆市| 汕头市| 呼玛县| 洞头县| 泰来县| 江达县| 威远县| 灵武市| 绍兴市| 尉氏县| 宣化县| 日喀则市| 安图县| 乌兰察布市| 财经| 青海省| 射洪县| 包头市| 横山县| 莲花县| 庆云县| 南昌县| 永丰县| 秦皇岛市| 邮箱| 北碚区|