Android WebView 开发指南:AgentWeb 完整使用
痛点场景:为什么需要 AgentWeb?
传统 WebView 开发中的常见问题:
- 进度监控难:WebView 的 onProgressChanged 回调不稳定,进度条显示异常
AgentWeb 是基于 Android WebView 的增强库,解决了传统 WebView 开发中进度监控难、权限管理乱、文件选择器失效、JavaScript 对话框样式不统一及第三方跳转混乱等问题。文章介绍了 AgentWeb 的快速集成方法,包括依赖配置和核心初始化代码。详细阐述了智能进度条控制、统一权限管理、文件选择器适配等核心功能,并解析了其模块化架构设计。此外,还涵盖了下载功能集成、页面跳转控制、性能优化方案(如 Sonic 框架集成)以及内存泄漏防护和安全配置等最佳实践,帮助开发者构建更优秀的混合应用体验。
传统 WebView 开发中的常见问题:
在项目的 build.gradle 中添加依赖:
dependencies {
implementation 'io.github.justson:agentweb-core:v5.1.1-androidx'
implementation 'io.github.justson:agentweb-filechooser:v5.1.1-androidx' // 文件选择功能
}
在 Activity 中初始化 AgentWeb:
public class MainActivity extends AppCompatActivity {
private AgentWeb mAgentWeb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout container = findViewById(R.id.container);
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(container, new ViewGroup.LayoutParams(-1, -1))
.useDefaultIndicator() // 使用默认进度条
.createAgentWeb()
.ready()
.go("https://www.example.com");
}
}
AgentWeb 通过 IndicatorController 实现精确的进度监控:
// 自动处理进度条显示逻辑
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(container, layoutParams)
.useDefaultIndicator() // 内置进度条
.setWebChromeClient(mWebChromeClient) // 自定义 ChromeClient
.setWebViewClient(mWebViewClient) // 自定义 ViewClient
.createAgentWeb()
.ready()
.go("https://www.baidu.com");
处理 WebView 中的权限请求:
// 权限拦截器配置
mAgentWeb.getWebCreator().getWebView()
.setWebChromeClient(new DefaultChromeClient(this) {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
// 自定义权限处理逻辑
handleLocationPermission(origin, callback);
}
});
AgentWeb 解决了 Android 各版本文件选择 API 的兼容性问题:
// 自动适配不同版本的文件选择 API
mAgentWeb.getWebCreator().get()
.setWebChromeClient(new DefaultChromeClient(this) {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
// 处理文件选择
return openFileChooserAboveL(webView, filePathCallback, fileChooserParams);
}
});
AgentWeb 采用模块化设计,核心组件包括:
AgentWeb 通过中间件模式实现功能扩展:
// 自定义 WebChromeClient 中间件
public class CustomChromeMiddleware extends MiddlewareWebChromeBase {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
// 添加自定义逻辑
updateCustomProgress(newProgress);
}
}
AgentWeb 内置了强大的下载管理功能:
// 启用下载功能
mAgentWeb.getWebCreator().get()
.setWebViewClient(new DefaultWebClient(this) {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".apk") || url.endsWith(".zip")) {
// 处理下载链接
handleDownload(url);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
处理第三方 App 跳转:
mAgentWeb.getWebCreator().get()
.setWebViewClient(new DefaultWebClient(this) {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 处理 intent scheme
if (url.startsWith("intent://")) {
showJumpConfirmDialog(url);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
与 Sonic 框架集成提升页面加载速度:
// Sonic 框架配置
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(container, layoutParams)
.useDefaultIndicator()
.setWebViewClient(new SonicWebViewClient()) // Sonic 客户端
.createAgentWeb()
.ready()
.go("https://www.example.com");
@Override
protected void onPause() {
mAgentWeb.getWebLifeCycle().onPause();
super.onPause();
}
@Override
protected void onResume() {
mAgentWeb.getWebLifeCycle().onResume();
super.onResume();
}
@Override
protected void onDestroy() {
mAgentWeb.getWebLifeCycle().onDestroy();
super.onDestroy();
}
// WebView 安全设置
WebSettings settings = mAgentWeb.getWebCreator().getWebView().getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(false); // 禁止文件访问
settings.setAllowContentAccess(false);
mAgentWeb.getWebCreator().get()
.setWebViewClient(new DefaultWebClient(this) {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// 自定义错误页面处理
showErrorPage(errorCode, description);
}
});
AgentWeb 通过精心设计的架构和丰富的功能特性,为 Android WebView 开发提供了完整的解决方案:
✅ 开箱即用:简单配置即可获得完整的 WebView 功能 ✅ 版本兼容:完美适配 Android 各版本 API 差异 ✅ 功能全面:进度控制、权限管理、文件选择一应俱全 ✅ 性能优异:内置多种优化策略提升加载速度 ✅ 扩展灵活:中间件模式支持自定义功能扩展
通过本文的完整指南,你已经掌握了 AgentWeb 的核心使用方法和最佳实践。立即开始使用 AgentWeb,告别 WebView 开发的各种烦恼,打造更优秀的混合应用体验!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online