分模板网站和定制网站,wordpress页面调用分类文章的方法,网站建设vs网络推广,微信 文章 wordpress目录
一、项目背景
1.1 需求
1.2 设备
1.3 解决方案
二、WebViewUpgrade 接入
2.1 支持版本
2.2 接入
2.2.1 导入项目(我使用的是这个)
2.2.2 implementation
2.3 使用
2.4 WebView
相关推荐 一、项目背景
1.1 需求 项目需要使用WebView加载合作方公司的Url(里面功…目录
一、项目背景
1.1 需求
1.2 设备
1.3 解决方案
二、WebViewUpgrade 接入
2.1 支持版本
2.2 接入
2.2.1 导入项目(我使用的是这个)
2.2.2 implementation
2.3 使用
2.4 WebView
相关推荐 一、项目背景
1.1 需求 项目需要使用WebView加载合作方公司的Url(里面功能比较多) 使用了ES6(ECMAScript 6.0以下简称 ES6是 JavaScript 语言的下一代标准已经在 2015 年 6 月正式发布了所以也被叫作ES2015) JavaScript 使用的函数要求 chrome 最低版本是85。 一系列原因导致WebView加载该链接报错合作方那边因为某些原因不想改变现有的代码实现等。需要我们自行解决那就开整呗。
1.2 设备 Android 8.1 WebView 版本 60.xxxx.xxxx.xx好吧忘记版本了页面打不开) Android 8.1 WebView 版本 61.0.3163.98(页面打不开) Android 11 WebView 版本 83.0.4103.120视频无法播放厂商给的答复是不支持具体原因没说
查看版本号 可以进入设置-开发者模式-Webview实现可以看到 Webview 内核版本号。 adb 命令 adb shell pm dump com.android.webview|grep version
adb shell pm dump com.android.webview|grep versionversionCode410412053 minSdk21 targetSdk30versionName83.0.4103.120signaturesPackageSignatures{48d4530 version:3, signatures:[63b96fc5], past signatures:[]}
1.3 解决方案
1.腾讯X5内核还是加载失败以为是集成错误。特意使用微信打开该链接也是加载失败。
2.更新安装包因为内嵌WebView的是com.android.webview。 2.1 下载了包名为 95.0.4638.50-463805003_minAPI21版本的包进行覆盖安装-报错提示签名文件不一致。 2.2 下载com.android.google.weview_95.0.4638.74_APKPure安装成功了加载还是报错。而且在WebView实现-不可选择com.android.google.webview。
3.修改framework-res.apk中配置允许WebView实现选择com.android.google.webview。这种操作不太合适2C需要root权限修改系统文件一不留神就可能产生其他问题。
4.使用 WebViewUpgrade这个还是比较强大的对WebView内核进行升级。已解决低版本无法加载url、视频无法播放的问题。
二、WebViewUpgrade 接入 WebViewUpgrade的创建者遇到的问题华为机上因为WebView内核的Chromium版本低于107无法播放H265视频的情况为了解决上述问题可以用JS实现H265播放但是会比较卡就想不能让WebView用应用内的APK作为内核。
2.1 支持版本 com.google.android.webview122.0.6261.64 com.android.webview113.0.5672.136 com.huawei.webview14.0.0.331 com.android.chrome122.0.6261.43 com.amazon.webview.chromium118-5993-tv.5993.155.51 当然你也可以找到其他版本下载安装即可。例如 com.android.webview我觉得113版本太高那么你可以下载一个95版本的。或者你不想使用com.android.webview 改用com.google.android.webview也是可以的。
2.2 接入
2.2.1 导入项目(我使用的是这个) 将Demo的core和download-source模块直接导入到自己项目修改core中 implementation androidx.appcompat:appcompat:1.6.1的版本。
2.2.2 implementation
implementation io.github.jonanorman.android.webviewup:core:0.1.0// 不需要下载APK时使用
implementation io.github.jonanorman.android.webviewup:download-source:0.1.0// 需要下载APK使用如果是低版本可能会报错。core中 implementation androidx.appcompat:appcompat:1.6.1的版本比较高需要兼容的SDK版本也比较高。
解决方案 1.提高项目 SDK 版本。 2.使用exclude。
以上两种方式都可以。
2.3 使用 设置 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,网络);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();}
}
这里我使用的是网络下载: 包名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 //更新状态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, );}Nullablepublic UpgradeSource toUpgradeSource(Context context) {UpgradeSource upgradeSource null;if (this.extraInfo.equals(网络)) {upgradeSource new UpgradeDownloadSource(context,this.url,new File(context.getFilesDir(), this.packageName / this.versionName .apk));} else if (this.extraInfo.equals(内置)) {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 {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setWebView();}private void setWebView(){......}//更新中Overridepublic void onUpgradeProcess(float percent) {updateUpgradeWebViewStatus();}//更新完成Overridepublic void onUpgradeComplete() {updateUpgradeWebViewStatus();}//更新失败Overridepublic void onUpgradeError(Throwable throwable) {updateUpgradeWebViewStatus();}
} 注意这个代码尽量前置如果无法前置需要保证其他地方先不要对WebView进行操作。如果操作了会导致初始化失败。 可以先试用Demo尝试功能是否可用再集成到自己的项目中。
2.4 WebView 执行完上面的操作后你就正常操作WebView即可。上面我只是列举了网上下载的例子(第一次下载只要文件存在无需重复下载)还支持内置/安装包的形式我这是应用包体太大不适合内置。 这种方式是可行的但是也有一些小的前置条件需要注意如果无法前置会导致使用失败。怎么前置才能做到万无一失就需要根据实际情况来判断了。 相关推荐
Android System WebView 各版本下载地址(翻)https://www.apkmirror.com/apk/google-inc/android-system-webview/WebView java.lang.NoSuchMethodException:callDrawGLFunction-CSDN博客文章浏览阅读5.7k次。5.1系统上WebView初始化报错Caused by: java.lang.NoSuchMethodException: callDrawGLFunction [long]at java.lang.Class.getMethod(Class.java:664)at java.lang.Class.getMethod(Class.java:643)at com.android.webview.chromium.WebViewDelegateFactory$Api21CompatibilityDele_java.lang.nosuchmethodexception: android.view.displaylistcanvas.calldrawglfuhttps://shuaici.blog.csdn.net/article/details/78459486