【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,这一段都比较忙,下期见!



相关文章
|
2天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
1天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
8 2
|
2天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
9天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
8天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
21 5
|
6天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
8天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
24 3
|
10天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
16天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
45 5
|
15天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!