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

版权声明:转载请注明出处!喜欢就 关注一下 or 右上角点赞 鼓励一下呗^_^ https://blog.csdn.net/ImagineCode/article/details/86160601

这几天在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()
    }
}

参考: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常见问题及解决方案汇总

最后分享一句在挖坑过程中遇到的一句话吧:
通往成功的路上忍得了寂寞和孤独

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

猜你喜欢

转载自blog.csdn.net/ImagineCode/article/details/86160601