
شوكة تشاك

يقوم Chucker بتبسيط فحص طلبات/ردود HTTP (S) التي يتم إطلاقها بواسطة تطبيق Android الخاص بك. يعمل Chucker كقاطع OKHTTP يستمر في كل هذه الأحداث داخل التطبيق الخاص بك ، وتوفير واجهة مستخدم لتفتيش محتوىها ومشاركتها.
ستعرض التطبيقات التي تستخدم Chucker إشعارًا يوضح ملخصًا لنشاط HTTP المستمر. النقر على الإشعار يطلق واجهة المستخدم Chucker الكاملة. يمكن للتطبيقات قمع الإشعار اختياريًا ، وإطلاق واجهة المستخدم Chucker مباشرة من داخل الواجهة الخاصة بها.

يتم توزيع 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 الخاص بك.
تاريخيا ، تم توزيع تشاكر من خلال jitpack. يمكنك العثور على نسخة أقدم من Chucker هنا :.
لا تنس التحقق من changelog لإلقاء نظرة على جميع التغييرات في أحدث إصدار من Chucker.
implementation Gradle).يتم إطلاق نشاط Chucker الرئيسي في مهمته الخاصة ، مما يسمح بعرضه إلى جانب تطبيق App 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 قد تحتوي على معلومات حساسة مثل التفويض أو رؤوس ملفات تعريف الارتباط ، ومحتويات هيئات الطلب والاستجابة.
إنه مخصص للاستخدام أثناء التطوير ، وليس في بنيات الإصدار أو عمليات نشر الإنتاج الأخرى.
يمكنك تنقيح الرؤوس التي تحتوي على معلومات حساسة عن طريق استدعاء redactHeader(String) على ChuckerInterceptor .
interceptor.redactHeader( " Auth-Token " , " User-Session " );تشاكر بشكل افتراضي يتولى فقط نصًا عاديًا ، مضغوطًا GZIP أو Brotli مضغوط. إذا كنت تستخدم تنسيقًا ثنائيًا مثل ، على سبيل المثال ، لن يتم التعامل مع Protobuf أو التوفير تلقائيًا بواسطة 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 وأحدث.
هناك حالتان محتملتان:
android.permission.POST_NOTIFICATIONS لتطبيقك.Allow في مربع الحوار مع طلب الإذن. في حالة عدم السماح لهذا الإذن أو رفض مربع الحوار عن طريق الخطأ ، في كل إطلاق Chucker ، سيكون هناك تناول وجبة خفيفة مع زر لفتح إعدادات التطبيق الخاصة بك حيث يمكنك تغيير إعدادات الأذونات. ملاحظة ، تحتاج إلى منح android.permission.POST_NOTIFICATIONS إلى تطبيقك في الإعدادات حيث لن يكون هناك تطبيق منفصل في قائمة التطبيقات في الإعدادات. إذا كنت تهاجر من Chuck إلى Chucker ، فيرجى الرجوع إلى دليل الترحيل هذا.
إذا كنت تهاجر من Chucker v2.0 إلى V3.0 ، فيرجى توقع تغييرات متعددة. يمكنك العثور على وثائق حول كيفية تحديث الرمز الخاص بك على دليل الترحيل الآخر.
تطوير تشاكر يحدث في الفرع main . كل دفعة إلى main ستؤدي إلى نشر قطعة أثرية SNAPSHOT للنسخة القادمة. يمكنك الحصول على هذه اللقطات القطع الأثرية مباشرة من سوناتس مع:
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.
يتم الحفاظ على Chucker وتحسينه خلال الليالي وعطلات نهاية الأسبوع وكلما كان لدى الفريق وقت فراغ. إذا كنت تستخدم Chucker في مشروعك ، فيرجى التفكير في رعايتنا. سيساعدنا هذا على شراء مجال لموقع ويب سنكون لدينا قريبًا وننفق أيضًا بعض الأموال على الخيرية. بالإضافة إلى ذلك ، ستساعدنا الرعاية أيضًا على فهم مدى أهمية تشاكر للعمل اليومي للناس.
يمكنك رعايتنا بالنقر فوق زر Sponsor .
نحن نقدم دعمًا لـ Chucker على قناة #Chucker على Kotlinlang.slack.com. تعال وانضم إلى المحادثة هناك.
نحن نبحث عن المساهمين! لا تخجل. ؟ لا تتردد في فتح القضايا/طلبات السحب لمساعدتنا على تحسين هذا المشروع.
قائمة 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.