
チャックのフォーク

Chuckerは、Androidアプリによって発射されたHTTPリクエスト/応答の検査を簡素化します。 Chuckerは、アプリケーション内のすべてのイベントを持続するOKHTTPインターセプターとして機能し、コンテンツを検査および共有するためのUIを提供します。
Chuckerを使用するアプリは、進行中のHTTPアクティビティの要約を示す通知を表示します。通知をタップすると、完全なチャッカーUIが起動します。アプリはオプションで通知を抑制し、独自のインターフェイス内からChucker UIを直接起動できます。

チャッカーはMaven Centralを通じて配布されています。それを使用するには、次のGradle依存関係をbuild.gradleファイルに追加する必要があります。Androidアプリモジュール(ルートファイルではなく)。
次のように、リリースビルドからチャッカーを分離するには、 libraryとlibrary-no-opバリアントの両方を追加する必要があります。
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()それでおしまい! ?チャッカーは、OKHTTPクライアントが作成したすべてのHTTPインタラクションを記録します。
歴史的に、チャッカーはJitpackを通して配布されていました。ここでは、古いバージョンのチャッカーを見つけることができます。
Chackerの最新バージョンのすべての変更を確認するために、Changelogをチェックすることを忘れないでください。
implementationライン)。メインチャッカーアクティビティは独自のタスクで開始され、Android 7.xマルチウィンドウサポートを使用してホストアプリUIと一緒に表示できます。

チャッカーをカスタマイズして、 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 " );チャッカーはデフォルトでは、プレーンテキストのみ、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はネットワークアクティビティを追跡しますが、Android 13以下のデバイスに関する通知はありません。
可能な2つのケースがあります:
android.permission.POST_NOTIFICATIONS許可がアプリに付与されるとすぐに通知を表示するため、何もする必要はありません。Allowます)。この許可を許可しない場合、またはそのダイアログを誤って却下しない場合、チャッカーの起動のたびに、許可設定を変更できるアプリ設定を開くボタンを備えたスナックバーがあります。注意するには、 android.permission.POST_NOTIFICATIONS設定でアプリに付与する必要があります。 チャックからチャッカーに移住している場合は、この移行ガイドを参照してください。
チャッカーv2.0からv3.0に移動している場合は、複数の壊れた変更を期待してください。この他の移行ガイドでコードを更新する方法に関するドキュメントを見つけることができます。
チャッカーの開発は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ドキュメントのこのセクションを参照してください。要件に応じて、チャッカーをアプリケーションまたはネットワークインターセプターのいずれかとして使用することを選択できます。
okhttpの変更に対応するために、 4.xリリースでバージョンをバンプすることにしました。 Chucker 3.5.x Android 16+をサポートしていますが、そのアクティブな開発は停止し、バグの修正とマイナーな改善のみが2021年3月まで3.xブランチに到着します。
チャッカーは、夜、週末、チームに自由時間があるときはいつでも維持および改善されます。プロジェクトでチャッカーを使用する場合は、スポンサーを務めることを検討してください。これは、私たちがすぐに持っているウェブサイトのドメインを購入し、慈善団体にお金を使うのに役立ちます。さらに、スポンサーシップは、チャッカーが人々の日常の仕事にとってどれほど価値があるかをよりよく理解するのにも役立ちます。
Sponsorボタンをクリックすると、スポンサーになります。
kotlinlang.slack.comの#chuckerチャンネルでチャッカーのサポートを提供しています。あそこの会話に参加してください。
貢献者を探しています!恥ずかしがらないで。 ?このプロジェクトの改善に役立つ問題/プルリクエストを自由に開いてください。
新しい貢献者向けの短いTODOリスト:
Help wantedとしてマークされた問題チャッカーの作業を開始するには、プロジェクトをフォークし、Android Studio/Intellijのアイデアで開く必要があります。
コミットする前に、次のコマンドで事前コミットフックをインストールすることをお勧めします。
./gradlew installGitHook
これにより、コミットごとにコードがKTLINTとDETEKTに対して検証されていることを確認します。コマンドはcleanタスクの前に自動的に実行されるため、それまでに事前コミットフックをインストールする必要があります。
PRを提出する前に実行してください:
./gradlew build
これにより、ライブラリが構築され、すべての検証タスク(KTLINT、DETEKT、LINT、ユニットテスト)をローカルに実行します。これにより、CIチェックが通過することを確認します。
Chuckerは現在、Chuckerteamによって開発および維持されています。新しいPRを提出するときは、次の1つをpingしてください
貢献者に感謝します❤️
チャッカーは次のオープンソースライブラリを使用しています。
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.