在维护一些项目的时候,你可以会见到H5
页面是使用AgentWeb
来加载的。这篇博客来分享一下AgentWeb
相关的知识,希望对你有所帮助。
AgentWeb
AgentWeb
是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活。
特性
- 支持进度条以及自定义进度条
- 支持文件下载
- 支持文件下载断点续传
- 支持下载通知形式提示进度
- 简化 Javascript 通信
- 支持 Android 4.4 Kitkat 以及其他版本文件上传
- 支持注入 Cookies
- 加强 Web 安全
- 支持全屏播放视频
- 兼容低版本 Js 安全通信
- 更省电 。
- 支持调起微信支付
- 支持调起支付宝(请参照sample)
- 默认支持定位
- 支持传入 WebLayout(下拉回弹效果)
- 支持自定义 WebView
- 支持 JsBridge。
导入项目
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
非AndroidX
项目:
implementation 'com.github.Justson.AgentWeb:agentweb-core:v5.0.0-alpha' // (必选)
implementation 'com.github.Justson.AgentWeb:agentweb-filechooser:v5.0.0-alpha' // (可选)
implementation 'com.github.Justson:Downloader:v5.0.0' // (可选)
AndroidX
项目:
implementation 'com.github.Justson.AgentWeb:agentweb-core:v5.0.0-alpha.1-androidx' // (必选)
implementation 'com.github.Justson.AgentWeb:agentweb-filechooser:v5.0.0-alpha.1-androidx' // (可选)
implementation 'com.github.Justson:Downloader:v5.0.0-androidx' // (可选)
我项目使用的是5.0.0
版本,如果想看有没有更新可以看开源库的wiki
使用示例
基础用法:
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent((LinearLayout) view, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator()
.createAgentWeb()
.ready()
.go("http://www.jd.com");
事件处理:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (mAgentWeb.handleKeyEvent(keyCode, event)) {
return true;
}
return super.onKeyDown(keyCode, event);
}
WebChromeClient 与 WebViewClient:
AgentWeb.with(this)
.setAgentWebParent(mLinearLayout,new LinearLayout.LayoutParams(-1,-1) )
.useDefaultIndicator()
.setReceivedTitleCallback(mCallback)
.setWebChromeClient(mWebChromeClient)
.setWebViewClient(mWebViewClient)
.setSecutityType(AgentWeb.SecurityType.strict)
.createAgentWeb()
.ready()
.go(getUrl());
private WebViewClient mWebViewClient=new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//do you work
}
};
private WebChromeClient mWebChromeClient=new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//do you work
}
};
清空缓存(这是很多App都会用到的):
AgentWebConfig.clearDiskCache(this.getContext());
混淆代码
-keep class com.just.agentweb.** {
*;
}
-dontwarn com.just.agentweb.**
注意事项
开源的大佬提示需要注意以下情况:
- 支付宝使用需要引入支付宝SDK ,并在项目中依赖 , 微信支付不需要做任何操作。
-
AgentWeb
内部使用了AlertDialog
需要依赖AppCompat
主题 。 -
setAgentWebParent
不支持ConstraintLayout
。 -
mAgentWeb.getWebLifeCycle().onPause();
会暂停应用内所有WebView
。 -
minSdkVersion
低于等于16
以下自定义WebView
请注意与JS
之间通信安全。