Browse Source

更新抓包拦截器

drake 3 years ago
parent
commit
32a0ccee8c

+ 36 - 0
docs/log-notice.md

@@ -0,0 +1,36 @@
+前面介绍过如何使用AndroidStudio来抓取网络日志. 但是我们可能需要在App使用过程或者让测试人员查看日志
+
+这里介绍一个第三方日志拦截器[chucker](https://github.com/ChuckerTeam/chucker), 他会在Net发起请求后自动在设备通知栏显示网络请求记录, 点击通知可以跳转详情
+
+<img src="https://github.com/ChuckerTeam/chucker/raw/develop/assets/chucker-http.gif" width="250"/>
+
+添加依赖
+
+```groovy
+debugImplementation "com.github.chuckerteam.chucker:library:3.5.2"
+releaseImplementation "com.github.chuckerteam.chucker:library-no-op:3.5.2" // release安装包自动会无效
+```
+
+添加拦截器
+
+```kotlin
+class App : Application() {
+
+override fun onCreate() {
+    super.onCreate()
+
+    NetConfig.initialize("https://github.com/liangjingkanji/", this) {
+        // ...
+        addInterceptor(
+            ChuckerInterceptor.Builder(this@App)
+                .collector(ChuckerCollector(this@App))
+                .maxContentLength(250000L)
+                .redactHeaders(emptySet())
+                .alwaysReadResponseBody(false)
+                .build()
+        )
+    }
+}
+```
+
+更多自定义功能请查看[chucker](https://github.com/ChuckerTeam/chucker)主页

+ 3 - 3
docs/log-recorder.md

@@ -1,6 +1,6 @@
-一般网络请求都会选择在LogCat打印网络日志信息, 但LogCat日志可读性差, 且不完整
+由于LogCat日志可读性差, 所以Net支持以下两种方案
+
 
-Net以下两种方案, 各有优劣
 
 1. 使用AndroidStudio的[Profiler](https://developer.android.com/studio/profile/network-profiler?hl=zh-cn)监听网络
     - 可以查看项目所有OkHttp框架发起的网络请求
@@ -86,7 +86,7 @@ NetConfig.initialize("http://github.com/") {
 
 ## 其他网络框架
 
-可能你项目中还残留其他网络框架, 也可以使用Net的日志记录器`LogRecorder`来为其他框架打印日志信息
+可能你项目中还残留其他网络框架, 也可以使用Net的日志记录器`LogRecorder`来为其他框架打印日志信息. 如果是基于OkHttp的框架那可以直接使用LogRecordInterceptor
 
 | 函数 | 描述 |
 |-|-|

+ 2 - 1
mkdocs.yml

@@ -71,7 +71,8 @@ nav:
   - 缓存: cache.md
   - 自动搜索/筛选: debounce.md
   - 最快请求结果: fastest.md
-  - 日志拦截器: log-recorder.md
+  - 日志插件: log-recorder.md
+  - 通知栏日志: log-notice.md
   - 轮询器/倒计时: interval.md
   - Callback: callback.md
   - 常见问题: https://github.com/liangjingkanji/Net/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

+ 1 - 0
sample/build.gradle

@@ -83,6 +83,7 @@ dependencies {
     implementation "com.github.liangjingkanji:BRV:$brv_version" // 提供自动分页/缺省页/自动下拉刷新功能
     implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutine_version" // 协程基础库
     implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"
+    implementation "com.github.chuckerteam.chucker:library:3.5.2" // 通知栏监听网络日志
 
 
     // ------------------------------JSON解析-------------------------------------

BIN
sample/release/sample-release.apk


+ 28 - 10
sample/src/main/java/com/drake/net/sample/base/App.kt

@@ -17,7 +17,8 @@
 package com.drake.net.sample.base
 
 import android.app.Application
-import android.app.ProgressDialog
+import com.chuckerteam.chucker.api.ChuckerCollector
+import com.chuckerteam.chucker.api.ChuckerInterceptor
 import com.drake.brv.BindingAdapter
 import com.drake.net.NetConfig
 import com.drake.net.interceptor.LogRecordInterceptor
@@ -28,9 +29,10 @@ import com.drake.net.okhttp.setRequestInterceptor
 import com.drake.net.sample.BR
 import com.drake.net.sample.BuildConfig
 import com.drake.net.sample.R
-import com.drake.net.sample.converter.GsonConverter
+import com.drake.net.sample.converter.SerializationConverter
 import com.drake.net.sample.interfaces.MyRequestInterceptor
 import com.drake.statelayout.StateConfig
+import com.drake.tooltip.dialog.BubbleDialog
 import com.scwang.smart.refresh.footer.ClassicsFooter
 import com.scwang.smart.refresh.header.MaterialHeader
 import com.scwang.smart.refresh.layout.SmartRefreshLayout
@@ -52,15 +54,31 @@ class App : Application() {
             // 本框架支持Http缓存协议和强制缓存模式
             cache(Cache(cacheDir, 1024 * 1024 * 128)) // 缓存设置, 当超过maxSize最大值会根据最近最少使用算法清除缓存来限制缓存大小
 
-            setDebug(BuildConfig.DEBUG) // LogCat是否输出异常日志, 异常日志可以快速定位网络请求错误
+            // LogCat是否输出异常日志, 异常日志可以快速定位网络请求错误
+            setDebug(BuildConfig.DEBUG)
 
-            addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG)) // 添加日志记录拦截器
-            setRequestInterceptor(MyRequestInterceptor()) // 添加请求拦截器, 可配置全局/动态参数
-            setConverter(GsonConverter()) // 数据转换器
-            setDialogFactory { // 全局加载对话框
-                ProgressDialog(it).apply {
-                    setMessage("我是全局自定义的加载对话框...")
-                }
+            // AndroidStudio OkHttp Profiler 插件输出网络日志
+            addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
+
+            // 通知栏监听网络日志
+            addInterceptor(
+                ChuckerInterceptor.Builder(this@App)
+                    .collector(ChuckerCollector(this@App))
+                    .maxContentLength(250000L)
+                    .redactHeaders(emptySet())
+                    .alwaysReadResponseBody(false)
+                    .build()
+            )
+
+            // 添加请求拦截器, 可配置全局/动态参数
+            setRequestInterceptor(MyRequestInterceptor())
+
+            // 数据转换器
+            setConverter(SerializationConverter())
+
+            // 自定义全局加载对话框
+            setDialogFactory {
+                BubbleDialog(it, "加载中....")
             }
         }