
ส้อมชัค

Chucker ช่วยลดความซับซ้อนของการตรวจสอบ คำขอ/คำตอบ HTTP (S) ที่ถูกยิงโดยแอพ Android ของคุณ Chucker ทำงานเป็น ตัวดักจับ OKHTTP ที่ยังคงมีเหตุการณ์เหล่านั้นทั้งหมดในแอปพลิเคชันของคุณและจัดหา UI สำหรับการตรวจสอบและแบ่งปันเนื้อหาของพวกเขา
แอพที่ใช้ Chucker จะแสดง การแจ้งเตือน ที่แสดงสรุปกิจกรรม HTTP อย่างต่อเนื่อง แตะที่การแจ้งเตือนจะเปิดตัว UI ของ Chucker เต็มรูปแบบ แอพสามารถเลือกระงับการแจ้งเตือนและเปิดตัว Chucker UI โดยตรงจากภายในอินเทอร์เฟซของตนเอง

Chucker แจกจ่ายผ่าน Maven Central ในการใช้งานคุณต้องเพิ่ม การพึ่งพา Gradle ต่อไปนี้ในไฟล์ build.gradle ของโมดูลแอพ Android ของคุณ (ไม่ใช่ไฟล์รูท)
โปรดทราบว่าคุณควรเพิ่มทั้ง 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 จะบันทึกการโต้ตอบ HTTP ทั้งหมดที่ทำโดยไคลเอนต์ OKHTTP ของคุณ
ในอดีต Chucker ถูกแจกจ่ายผ่าน Jitpack คุณสามารถค้นหา Chucker รุ่นเก่าได้ที่นี่:
อย่าลืมตรวจสอบ Changelog เพื่อดูการเปลี่ยนแปลงทั้งหมดใน Chucker เวอร์ชันล่าสุด
implementation Gradle)กิจกรรมหลักของ Chucker เปิดตัวในงานของตัวเองช่วยให้สามารถแสดงพร้อมกับแอพโฮสต์ UI โดยใช้การสนับสนุน Android 7.x Multi-Window

คุณสามารถปรับแต่ง 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 อาจมีข้อมูลที่ละเอียดอ่อนเช่นการอนุญาตหรือส่วนหัวคุกกี้และเนื้อหาของการร้องขอและการตอบสนอง
มันมีไว้สำหรับ การใช้งานในระหว่างการพัฒนา และไม่ได้อยู่ในการสร้างรุ่นหรือการปรับใช้การผลิตอื่น ๆ
คุณสามารถ redact ส่วนหัวที่มีข้อมูลที่ละเอียดอ่อนโดยเรียก redactHeader(String) บน ChuckerInterceptor
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 ทุกครั้งจะมีแถบขนมขบเคี้ยวด้วยปุ่มเพื่อเปิดการตั้งค่าแอปของคุณซึ่งคุณสามารถเปลี่ยนการตั้งค่าการอนุญาต หมายเหตุคุณต้องให้ 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 เป็นแอปพลิเคชันหรือ Interceptor เครือข่ายขึ้นอยู่กับความต้องการของคุณ
เพื่อให้ทันกับการเปลี่ยนแปลงใน Okhttp เราตัดสินใจที่จะชนเวอร์ชันในรุ่น 4.x Chucker 3.5.x รองรับ Android 16+ แต่การพัฒนาที่ใช้งานหยุดและการแก้ไขข้อผิดพลาดและการปรับปรุงเล็กน้อยจะลงจอดในสาขา 3.x จนถึงเดือนมีนาคม 2564
Chucker ได้รับการดูแลและปรับปรุงในช่วงกลางคืนวันหยุดสุดสัปดาห์และเมื่อใดก็ตามที่ทีมมีเวลาว่าง หากคุณใช้ Chucker ในโครงการของคุณโปรดพิจารณาสนับสนุนเรา สิ่งนี้จะช่วยให้เราซื้อโดเมนสำหรับเว็บไซต์ที่เราจะมีในไม่ช้าและยังใช้เงินเพื่อการกุศล นอกจากนี้การสนับสนุนจะช่วยให้เราเข้าใจได้ดีขึ้นว่า Chucker มีค่าสำหรับการทำงานประจำวันของผู้คนอย่างไร
คุณสามารถสนับสนุนเราได้โดยคลิกที่ปุ่ม Sponsor
เราให้การสนับสนุน Chucker ใน #Chucker Channel บน kotlinlang.slack.com มาร่วมการสนทนาที่นั่น
เรากำลังมองหาผู้มีส่วนร่วม! อย่าอาย - อย่าลังเลที่จะเปิดปัญหา/ดึงคำขอเพื่อช่วยเราปรับปรุงโครงการนี้
รายการ TODO สั้น ๆ สำหรับผู้มีส่วนร่วมใหม่:
Help wantedในการเริ่มทำงานกับ Chucker คุณต้องแยกโครงการและเปิดในแนวคิด Android Studio/Intellij
ก่อนที่เราจะขอแนะนำให้คุณติดตั้งตะขอล่วงหน้าด้วยคำสั่งต่อไปนี้:
./gradlew installGitHook
สิ่งนี้จะทำให้แน่ใจว่ารหัสของคุณได้รับการตรวจสอบกับ Ktlint และ Detekt ก่อนการกระทำทุกครั้ง คำสั่งจะทำงานโดยอัตโนมัติก่อนงาน clean ดังนั้นคุณควรติดตั้งตะขอล่วงหน้า
ก่อนส่ง PR โปรดเรียกใช้:
./gradlew build
สิ่งนี้จะสร้างห้องสมุดและจะเรียกใช้งานการตรวจสอบทั้งหมด (ktlint, detekt, ผ้าสำลี, การทดสอบหน่วย) ในพื้นที่ สิ่งนี้จะทำให้แน่ใจว่าการตรวจสอบ CI ของคุณจะผ่าน
Chucker ได้รับการพัฒนาและดูแลโดย Chuckerteam เมื่อส่ง PR ใหม่โปรดส่งหนึ่งใน:
ขอบคุณมากสำหรับผู้มีส่วนร่วมของเรา❤
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.