
叉子叉

Chucker簡化了您的Android應用程序發射的HTTP請求/響應的檢查。查克(Chucker)充當OKHTTP攔截器,將您應用程序中的所有這些事件持續存在,並提供了用於檢查和共享其內容的UI。
使用Chucker的應用將顯示一份通知,顯示正在進行的HTTP活動的摘要。敲擊通知將啟動完整的Chucker UI。應用程序可以選擇抑制通知,並直接從其自己的界面中啟動Chucker UI。

Chucker通過Maven Central分發。要使用它,您需要將以下Gradle依賴關係添加到Android應用模塊的build.gradle文件(而不是根文件)。
請注意,您應該同時添加library和library-no-op變體,以將Chucker與發行版隔離如下:
dependencies {
debugImplementation " com.github.chuckerteam.chucker:library:4.1.0 "
releaseImplementation " com.github.chuckerteam.chucker:library-no-op:4.1.0 "
}要開始使用Chucker,只需將新的ChuckerInterceptor插入您的OKHTTP客戶端構建器:
val client = OkHttpClient . Builder ()
.addInterceptor( ChuckerInterceptor (context))
.build()就是這樣! ? Chucker現在將記錄您的OKHTTP客戶端進行的所有HTTP交互。
從歷史上看,查克是通過Jitpack分發的。您可以在此處找到Chucker的舊版本:。
不要忘記檢查ChangElog,以查看Chucker最新版本的所有更改。
implementation線)。主要的Chucker活動是在自己的任務中啟動的,可以使用Android 7.X多窗口支持與主機應用程序一起顯示。

您可以自定義Chucker提供ChuckerCollector的實例:
// Create the Collector
val chuckerCollector = ChuckerCollector (
context = this ,
// Toggles visibility of the notification
showNotification = true ,
// Allows to customize the retention period of collected data
retentionPeriod = RetentionManager . Period . ONE_HOUR
)
// Create the Interceptor
val chuckerInterceptor = ChuckerInterceptor . Builder (context)
// The previously created Collector
.collector(chuckerCollector)
// The max body content length in bytes, after this responses will be truncated.
.maxContentLength( 250_000L )
// List of headers to replace with ** in the Chucker UI
.redactHeaders( " Auth-Token " , " Bearer " )
// Read the whole response body even when the client does not consume the response completely.
// This is useful in case of parsing errors or when the response body
// is closed before being read like in Retrofit with Void and Unit types.
.alwaysReadResponseBody( true )
// Use decoder when processing request and response bodies. When multiple decoders are installed they
// are applied in an order they were added.
.addBodyDecoder(decoder)
// Controls Android shortcut creation.
.createShortcut( true )
.build()
// Don't forget to plug the ChuckerInterceptor inside the OkHttpClient
val client = OkHttpClient . Builder ()
.addInterceptor(chuckerInterceptor)
.build()警告使用Chucker時生成和存儲的數據可能包含敏感信息,例如授權或Cookie標頭,以及請求和響應機構的內容。
它旨在在開發過程中使用,而不是發行版本或其他生產部署。
您可以通過調用ChuckerInterceptor上的redactHeader(String)來編輯包含敏感信息的標頭。
interceptor.redactHeader( " Auth-Token " , " User-Session " );默認情況下,Chucker僅處理純文本,GZIP壓縮或Brotli被壓縮。如果您使用二進制格式,例如Protobuf或Thrift,則不會由Chucker自動處理。但是,您可以安裝能夠從不同編碼讀取數據的自定義解碼器。
object ProtoDecoder : BodyDecoder {
fun decodeRequest ( request : Request , body : ByteString ): String? = if (request.isExpectedProtoRequest) {
decodeProtoBody(body)
} else {
null
}
fun decodeResponse ( request : Response , body : ByteString ): String? = if (request.isExpectedProtoResponse) {
decodeProtoBody(body)
} else {
null
}
}
interceptorBuilder.addBodyDecoder( ProtoDecoder ).build()從Android 13開始,您的應用需要向用戶請求android.permission.POST_NOTIFICATIONS許可以顯示通知。由於查克(Chucker)還顯示了顯示網絡活動的通知,因此您需要根據您的應用程序功能來處理權限請求。沒有此許可,Chucker將跟踪網絡活動,但是Android 13和更新的設備上不會發出通知。
有2種可能的情況:
android.permission.POST_NOTIFICATIONS授予您的應用程序時顯示通知。Allow對話框中的允許。如果您不允許此權限或錯誤地解散該對話框,則在每次Chucker發射時,都會有一個帶有按鈕的Snackbar來打開您的應用程序設置,您可以在其中更改權限設置。請注意,您需要在設置中將android.permission.POST_NOTIFICATIONS授予應用程序,因為設置中的應用列表中不會有單獨的應用程序。 如果您要從查克(Chuck)遷移到查克(Chucker) ,請參閱此遷移指南。
如果您從Chucker v2.0遷移到v3.0 ,請期待多次破壞更改。您可以在此其他遷移指南中找到有關如何更新代碼的文檔。
Chucker的發展發生在main分支。到main的每個推動都會觸發即將推出的版本的SNAPSHOT偽像的出版。您可以直接從Sonatype中獲得這些快照偽像:
repositories {
maven { url " https://oss.sonatype.org/content/repositories/snapshots/ " }
}
dependencies {
debugImplementation " com.github.chuckerteam.chucker:library:4.2.0-SNAPSHOT "
releaseImplementation " com.github.chuckerteam.chucker:library-no-op:4.2.0-SNAPSHOT "
}此外,您仍然可以使用Jitpack建立每個分支。因此, main的頂部可以在此處找到:
repositories {
maven { url " https://jitpack.io " }
}
dependencies {
debugImplementation " com.github.chuckerteam.chucker:library:main-SNAPSHOT "
releaseImplementation " com.github.chuckerteam.chucker:library-no-op:main-SNAPSHOT "
}如果您正在尋找最新的穩定版本,則可以隨時在Releases部分中找到它。
Content-Encoding或Accept-Encoding )丟失了?請參閱OKHTTP文檔的這一部分。您可以選擇使用Chucker作為應用程序或網絡攔截器,具體取決於您的要求。
為了跟上OKHTTP的更改,我們決定在4.x版本中撞擊其版本。 Chucker 3.5.x支持Android 16+,但其積極的開發停止了,只有錯誤修復和較小的改進才能在3.X分支機構上降落,直到2021年3月。
在夜晚,週末和團隊有空閒時間的情況下,查克(Chucker)得到維護和改善。如果您在項目中使用Chucker,請考慮贊助我們。這將有助於我們為我們很快擁有的網站購買一個域名,並在慈善機構上花費一些錢。此外,贊助也將幫助我們更好地了解Chucker對人們日常工作的價值。
您可以通過單擊Sponsor按鈕來贊助我們。
我們在Kotlinlang.slack.com上的#Chucker頻道上為Chucker提供支持。快來加入那邊的對話。
我們正在尋找貢獻者!不要害羞。 ?隨時開放問題/拉動請求,以幫助我們改善該項目。
新貢獻者的簡短TODO :
Help wanted問題為了開始在Chucker上工作,您需要在Android Studio/Intellij Idea中分配該項目並將其打開。
在進行之前,我們建議您使用以下命令安裝預密碼掛鉤:
./gradlew installGitHook
這將確保您的代碼在每次提交之前對KTLINT和DETEKT進行驗證。該命令將在clean任務之前自動運行,因此您應該在那時安裝前簽名。
在提交公關之前,請運行:
./gradlew build
這將構建庫,並將在本地運行所有驗證任務(KTLINT,DETEKT,LINT,單位測試)。這將確保您的CI檢查將通過。
Chucker目前是由Chuckerteam開發和維護的。提交新公關時,請ping之一:
非常感謝我們的貢獻者❤️
Chucker使用以下開源庫:
Copyright (C) 2018-2021 Chucker Team.
Copyright (C) 2017 Jeff Gilfelt.
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.