【Android】WebView 开发遇到的问题小结

简介: 【Android】WebView 开发遇到的问题小结

这几天在AndroidStudio上利用WebView进行应用打包,期间遇到的几点问题有必要进行总结,在AS3.x上还是有一些不同,写Android SDK版本的更新带来的问题。在每个问题下可能会有相应的参考链接,这是在探索webView过程中起到帮助作用的帖子,谢谢他们!

1、网络问题

下载包问题

下载AndroidSDK 相关文件的很耗时,网络状况不好的情况下很可能出现问题。最好就是能找有相关包的能直接拷贝过来。

Settings中配置HTTP代理

镜像服务器地址&更改hosts文件:参考:https://blog.csdn.net/cswoniu111/article/details/52187840

设置build.gradle(Project):

修改allprojects并添加:

allprojects {
    repositories {
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
        maven { url 'http://maven.oschina.net/content/groups/public/' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
        maven { url "http://maven.springframework.org/release" }
        maven { url "http://maven.restlet.org" }
        maven { url "http://mirrors.ibiblio.org/maven2" }
        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/"
        }
        maven { url 'https://maven.fabric.io/public' }
        jcenter()
        google()
    }
}

从上述的库中选择其中一个即可,推荐aliyun的。例如:

allprojects {
    repositories {
        maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
        mavenCentral()
        jcenter()
        google()
    }
}

参考:https://blog.csdn.net/u011216417/article/details/73480899

2、全屏显示

设置全屏的时候,会发生闪退,原因在于你的Activity是否继承自AppCompatActivity,如果是的把AppCompatActivity改成Activity

public class MainActivity extends Activity

参考:https://blog.csdn.net/key_mql/article/details/70163426

3、 Webview加载url空白,但浏览器能打开

你可能会遇到这种情况,有的url能打开,有的不能。这主要和webview的缓存问题有关。

在你的代码中添加这句:

WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled(true);//主要是这句
webSettings.setJavaScriptEnabled(true);//启用js
webSettings.setBlockNetworkImage(false);//解决图片不显示
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setLoadsImagesAutomatically(true);
webView.setWebChromeClient(new WebChromeClient());//这行最好不要丢掉
//该方法解决的问题是打开浏览器不调用系统浏览器,直接用webview打开
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
});
webView.loadUrl("http://xxx.cn");

参考:https://blog.csdn.net/u011124212/article/details/82118073?tdsourcetag=s_pctim_aiomsg

4、启动模拟器失败,缺少模拟器加速器问题

android studio 启动模拟器报错The emulator process for AVD Nexus_5X_API_22 was killed

这个问题可能是HAXM没有安装,你可以先去Android SDKManager 中进行安装:

参考:https://bbs.csdn.net/topics/392424550?page=1

5、gradle sync failed 问题

安装AS过程中常会碰到这类问题,你可以先到settings中设置你的gradle绝对路径:

参考:https://blog.csdn.net/m0_37292262/article/details/81395369

6、签名打包

在机子上安装APK时,可能会提示你安装失败,不是验证过的应用。这个时候可能是你打包时出现的问题。

通常,用签名打包是比较严格的方式:

签名:就代表着自己的版权,以后要进行升级,也必须要使用相同的签名才行。签名就代表着自己的身份(即keystore),多个app可以使用同一个签名。

我们可以通过AS进行签名打包:

参考:https://www.cnblogs.com/gao-chun/p/4891275.html

7、修改项目包名

为了方便,你可能想拷贝上一个项目,但是打包的时候却发现覆盖了上一个项目的应用。这里的问题就是在使用这个拷贝的项目时,你没有修改相应的包名。

通常分为4个步骤:

  1. 修改项目中build.gradle文件中的 “applicationId”;
  2. 修改AndroidManifest.xml文件中的 “package”,和 build.gradle 文件中的 "applicationId"保持一致;
  3. 重命名工程目录中的对应的 Directory;
  4. Sync Now一下。

参考:https://baijiahao.baidu.com/s?id=1578514127792124806&wfr=spider&for=pc

8、Android WebView加载网页失败异常处理

不同Android版本下处理不同,这里给出Android6.0+的处理方法,网上有很多处理方法,但是试过之后发现并不奏效!

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
    super.onReceivedError(webView, webResourceRequest, webResourceError);
    if (webResourceRequest.isForMainFrame()) {//是否是为 main frame创建
        view.loadUrl("about:blank");// 避免出现默认的错误界面
        view.loadUrl(mErrorUrl);// 加载自定义错误页面
    }
}

参考:https://www.jianshu.com/p/12a011af51c4

9、原生按钮点击事件

网上的例子都不太奏效,有的说要在AndroidMainfest.xml中注册,有的使用Button定义的点击方法。

我的方式是:

  • 在xml中写好Button的ID,如
    <Button
            android:id="@+id/btnReturnMenu" //命名一个id为btnReturnMenu的Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_x="970dp"
            android:layout_y="1470px"
            android:background="?android:attr/colorActivatedHighlight"
            android:text="@string/menu_btn"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:textColor="?android:attr/colorBackground"
            android:visibility="visible"
            android:onClick="onReturnMenu"
            tools:layout_editor_absoluteX="100dp"
            tools:layout_editor_absoluteY="164dp" />
  • java文件中,定义这个Button:
 private Button btnReturnMenu;
 btnReturnMenu = (Button)findViewById(R.id.btnReturnMenu);//找到这个ID
 //注册点击监听事件
 btnReturnMenu.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                {
                    webView.loadUrl("http://118.122.250.177:18888/Commandnav/index.html");
                }
            }
});

10、判断网络是否可用

public static boolean isNetworkAvailable(Context context) {
        if(context!=null){
            ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = connectivity.getActiveNetworkInfo();
            if(mNetworkInfo!=null){
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

11、思考:打包一个chrome内核,优化H5的流畅度

我们经常看到微信的浏览器内核使用的时X5内核,那能不能尝试在APP中包裹一个Chrome内核呢?

这个我还没尝试过。

但是发现,X5内核在渲染图形方面,表现不佳,如canvas,极易造成卡顿,相比Chrome内核还是有差距。

参考:https://www.oschina.net/question/1176258_241816

12、Android WebView 详细

分享几篇WebView开发的文档:

WebView-WebViewClient详解

WebViewClient与常用事件监听

Android之Android WebView常见问题及解决方案汇总

Android WebView 总结 —— 使用HTML5播放视频及全屏方案

最后分享一句在挖坑过程中遇到的一句话吧:

通往成功的路上忍得了寂寞和孤独

已经有段时间没写Blog,这一段都比较忙,下期见!



相关文章
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic=&quot;true&quot;`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
872 1
|
10月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1754 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1125 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1202 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
935 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
10月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
443 0
|
11月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1391 6
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5952 77
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
717 11
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
562 0

热门文章

最新文章