Need help with AgentWeb?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Justson
7.7K Stars 1.4K Forks Apache License 2.0 687 Commits 118 Opened issues

Description

AgentWeb is a powerful library based on Android WebView.

Services available

!
?

Need anything else?

Contributors list

No Data

AgentWeb 介绍

AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活,体验请下载的 agentweb.apk, 或者你也可以到 Google Play 里面下载 AgentWeb , 详细使用请参照上面的 Sample 。

引入

  • Gradle
   implementation 'com.just.agentweb:agentweb:4.1.4' // (必选)
   implementation 'com.just.agentweb:filechooser:4.1.4'// (可选)
   implementation 'com.download.library:Downloader:4.1.4'// (可选)
  • androidx
   implementation 'com.just.agentweb:agentweb-androidx:4.1.4' // (必选)
   implementation 'com.just.agentweb:filechooser-androidx:4.1.4'// (可选)
   implementation 'com.download.library:downloader-androidx:4.1.4'// (可选)

相关

使用

基础用法

mAgentWeb = AgentWeb.with(this)
                .setAgentWebParent((LinearLayout) view, new LinearLayout.LayoutParams(-1, -1))                
                .useDefaultIndicator()
                .createAgentWeb()
                .ready()
                .go("http://www.jd.com");

效果图

  • 调用 Javascript 方法拼接太麻烦 ? 请看 。

    function callByAndroid(){
      console.log("callByAndroid")
    }
    mAgentWeb.getJsAccessEntrace().quickCallJs("callByAndroid");
    
  • Javascript 调 Java ?

    mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(mAgentWeb,this));
    window.android.callAndroid();
    
  • 事件处理

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
    
    if (mAgentWeb.handleKeyEvent(keyCode, event)) {
        return true;
    }
    return super.onKeyDown(keyCode, event);

    }

  • 跟随 Activity Or Fragment 生命周期 , 释放 CPU 更省电 。

    @Override
    protected void onPause() {
        mAgentWeb.getWebLifeCycle().onPause(); 
        super.onPause();
    
    

    }

    @Override protected void onResume() { mAgentWeb.getWebLifeCycle().onResume(); super.onResume(); } @Override public void onDestroyView() { mAgentWeb.getWebLifeCycle().onDestroy(); super.onDestroyView(); }

  • 全屏视频播放

    android:hardwareAccelerated="true"
    android:configChanges="orientation|screenSize"
    
  • 定位

    
    
  • 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
        }
    };                
    
  • 返回上一页

    if (!mAgentWeb.back()){
       AgentWebFragment.this.getActivity().finish();
    }
    
  • 获取 WebView

    mAgentWeb.getWebCreator().getWebView();
    
  • 查看 Cookies

    String cookies=AgentWebConfig.getCookiesByUrl(targetUrl);
    
  • 同步 Cookie

    AgentWebConfig.syncCookie("http://www.jd.com","ID=XXXX");
    
  • MiddlewareWebChromeBase 支持多个 WebChromeClient

    //略,请查看 Sample
    
  • MiddlewareWebClientBase 支持多个 WebViewClient

    //略,请查看 Sample
    
  • 清空缓存

    AgentWebConfig.clearDiskCache(this.getContext());
    
  • 权限拦截

    protected PermissionInterceptor mPermissionInterceptor = new PermissionInterceptor() {
    
    
    @Override
    public boolean intercept(String url, String[] permissions, String action) {
        Log.i(TAG, "url:" + url + "  permission:" + permissions + " action:" + action);
        return false;
    }

    };

  • AgentWeb 完整用法

    //略,请查看 Sample
    
  • AgentWeb 所需要的权限(在你工程中根据需求选择加入权限)

    
    
    
    
    
    
    
    
  • AgentWeb 所依赖的库

    compile "com.android.support:design:${SUPPORT_LIB_VERSION}" // (3.0.0开始该库可选)
    compile "com.android.support:support-v4:${SUPPORT_LIB_VERSION}"
    SUPPORT_LIB_VERSION=27.0.2(该值会更新)
    

混淆

如果你的项目需要加入混淆 , 请加入如下配置

-keep class com.just.agentweb.** {
    *;
}
-dontwarn com.just.agentweb.**

Java 注入类不要混淆 , 例如 sample 里面的 AndroidInterface 类 , 需要 Keep 。

-keepclassmembers class com.just.agentweb.sample.common.AndroidInterface{ *; }

注意事项

  • 支付宝使用需要引入支付宝SDK ,并在项目中依赖 , 微信支付不需要做任何操作。
  • AgentWeb 内部使用了
    AlertDialog
    需要依赖
    AppCompat
    主题 。
  • setAgentWebParent
    不支持
    ConstraintLayout
  • mAgentWeb.getWebLifeCycle().onPause();
    会暂停应用内所有
    WebView
  • minSdkVersion
    低于等于16以下自定义
    WebView
    请注意与
    JS
    之间通信安全。
  • AgentWeb v3.0.0以上版本更新了包名,混淆的朋友们,请更新你的混淆配置。
  • 多进程无法取消下载,解决方案

常见问题

修改 AgentWeb 默认的背景色

        FrameLayout frameLayout = mAgentWeb.getWebCreator().getWebParentLayout();
        frameLayout.setBackgroundColor(Color.BLACK);

文档帮助

  • Wiki(不全)
  • Sample
    (推荐,详细)

更新日志

致谢

有问题或者有更好的建议

关于我

一个位于深圳的 Android 开发者 , 如果你有问题 , 请联系 Email : [email protected]

赞赏

如果你喜欢了

AgentWeb
的设计 , 你也可以请作者喝一杯咖啡。

AgentWeb

License

License

Copyright (C)  Justson(https://github.com/Justson/AgentWeb)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.