تقارير أعطال Android الآلية مع ACRA و Cloudant

نشرت: 2022-03-11

من السهل إنشاء تطبيق Android أساسي. من ناحية أخرى ، قد يكون إنشاء تطبيق Android موثوق وقابل للتطوير وقويًا أمرًا صعبًا للغاية.

مع وجود آلاف الأجهزة المتاحة التي يتم ضخها من العديد من الشركات المصنعة المختلفة ، فإن افتراض أن جزءًا واحدًا من الكود سيعمل بشكل موثوق عبر الهواتف يعد أمرًا ساذجًا في أحسن الأحوال.

التجزئة هي أكبر مقايضة لوجود نظام أساسي مفتوح ، ونحن ندفع الثمن بعملة صيانة الكود ، والتي تستمر لفترة طويلة بعد اجتياز التطبيق لمرحلة الإنتاج.

لماذا يهم الإبلاغ عن أخطاء Android

إذن ، ماذا يحدث عندما يتعطل تطبيق Android أو يصبح غير مستجيب؟ حسنًا ، ينبثق مربع حوار "فرض الإغلاق" ، مما يتيح للمستخدم معرفة أن شيئًا ما قد حدث بشكل خاطئ. إذا تم تنزيل التطبيق من خلال Google Play ، فسيُطلب من المستخدم الإبلاغ عن التعطل عن طريق إرسال تقرير تعطل Android مفصل (بما في ذلك الوقت وطراز الهاتف وإصدار Android وتتبع المكدس وما إلى ذلك) والذي يمكنك (المطور) عرضه فيه وحدة تحكم المطور ، مما يسمح لك بمعالجة الخطأ الجاني.

كل هذا يبدو لطيفًا للغاية - ولكن هناك مشكلة كبيرة في الإبلاغ عن الأخطاء الافتراضية في Android: يميل المستخدمون إلى عدم استخدامه ، مما يترك المطورين جاهلين بحالة تطبيقاتهم.

كل هذا يبدو لطيفًا للغاية - ولكن هناك مشكلة كبيرة في استخدام تقارير الأخطاء الافتراضية لنظام Android: يميل المستخدمون إلى عدم اتخاذ أي إجراء عند تعطل تطبيقاتهم ؛ في الواقع ، تختار الغالبية عدم إرسال تقارير أخطاء Android. كيف يمكنك إذن ، بصفتك مطورًا ضميريًا ، الحصول على رؤى موثوقة حول أعطال تطبيقك وإخفاقاته؟

يعد سجل أعطال Android الموثوق به مهمًا بشكل خاص عندما لا يرسل المستخدمون تقارير الأعطال.

إدخال أكرا

يرمز ACRA إلى "تقرير الأعطال الآلي لنظام Android". إنها مكتبة مجانية تتيح لك حل مشكلة "الإبلاغ عن الخطأ اليدوي" ببضعة أسطر من التعليمات البرمجية. بمجرد تنفيذ المكتبة وتهيئة كل شيء بشكل صحيح ، ستتمكن من استخراج نفس سجلات أخطاء Android مثل الإعداد الافتراضي لـ Google (بالإضافة إلى مجموعة من خيارات التخصيص المضافة) تلقائيًا ودون مطالبة المستخدم باتخاذ إجراء.

علاوة على ذلك ، يتيح لك ACRA اختيار الطريقة التي ترغب في إبلاغ المستخدم بها عن تعطل Android ، حيث يكون الإعداد الافتراضي هو الإبلاغ عن الخلفية الصامتة ، والبدائل بما في ذلك الحوارات المخصصة.

حتى وقت قريب ، كان ACRA مدعومًا بجداول بيانات Google ، مما يعني أنه يمكنك تلقي جميع تقاريرك في ملف واحد ، يتم استضافته مجانًا على حساب Google Drive الخاص بك. لسوء الحظ ، طلبت Google عدم استخدام هذا الخيار في المستقبل ، لذلك يتبقى لنا عدة بدائل لإرسال بيانات تقرير الأعطال ، والتي سنغطي بعضها في هذا البرنامج التعليمي:

  • البريد الإلكتروني القياسي (لا يزال يتطلب تفاعل المستخدم).
  • عميل بريد إلكتروني / HTTP مخصص (يتطلب إعدادًا شاملاً).
  • خلفية مخصصة (مع خيارات تتراوح من الحلول المجانية إلى الحلول التجارية).

في هذه المقالة ، سنقوم بتحليل أحد هذه الحلول: استضافة تقارير ACRA الخاصة بك على خلفية Cloudant وتصور البيانات باستخدام acralyzer.

إنشاء واجهة Cloudant الخلفية

أول شيء يتعين علينا القيام به هو تسجيل حساب Cloudant. بالطبع ، هناك مشكلة: خدمات Cloudant ليست مجانية تمامًا ، ولكن وفقًا لصفحة التسعير الخاصة بهم ، من غير المحتمل جدًا أن تتجاوز الحد الشهري البالغ 5 دولارات (ما لم يكن لديك قاعدة مستخدمين ضخمة وعدد كبير من الأخطاء في التعليمات البرمجية الخاصة بك).

بمجرد التسجيل ، نحتاج إلى فهم كيفية عمل الأشياء. على مستوى عالٍ ، ستتألف نهايتنا الخلفية من مكونين:

  1. قاعدة بيانات تخزين أو ، بشكل أكثر دقة ، Apache CouchDB. يخزن CouchDB بياناته بتنسيق JSON ، مما يعني أن جميع التقارير المرسلة من جهاز Android يجب أن تتطابق مع التنسيق ليتم إدراجها كإدخال. إدراج قاعدة البيانات هو طلب HTTP POST أو PUT بسيط.
  2. تطبيق ويب (للتحليل) أو ، بشكل أكثر دقة ، CouchApp. هذا تطبيق JavaScript بسيط يتيح لك تشغيل الاستعلامات وعرض البيانات المخزنة في مثيل CouchDB.

لكي تعمل الواجهة الخلفية لدينا بشكل صحيح ، سنحتاج إلى إعداد هذين المكونين. من الناحية النظرية ، يمكننا بناء قاعدة البيانات والتطبيق من المصدر ، ثم استخدام أداة لنشرها في النهاية الخلفية لدينا - لكن الأشخاص الجيدين في ACRA فعلوا ذلك بالفعل من أجلنا. لذا فإن أسهل طريقة هي نسخ قاعدة بيانات بعيدة وتطبيق بعيد.

دعنا نمضي قدمًا ونكرر نسخة فارغة من ACRA CouchDB:

  • حدد قسم "النسخ المتماثل" في لوحة معلومات Cloudant.
  • كقاعدة بيانات المصدر ، حدد "قاعدة البيانات البعيدة" مع http://get.acralyzer.com/distrib-acra-storage كعنوان URL.
  • كقاعدة بيانات الهدف ، حدد "قاعدة بيانات جديدة" وأطلق عليها اسم "acra- {myapp}" (بدون علامتي الاقتباس). لاحظ أن المعلمة {myapp} يجب أن تكون فريدة لتطبيقك ، وأن اسم قاعدة البيانات يجب أن يبدأ بـ "acra-".
  • انقر فوق "نسخ متماثل".

يوضح هذا كيفية إعداد واجهة Cloudant الخلفية لإدارة تقارير أعطال Android.

وبالتالي ، فقد نجحنا في نسخ قاعدة البيانات لتخزين التقارير. بعد ذلك ، نحتاج إلى تكرار CouchApp acralyzer حتى نتمكن من تصور البيانات:

  • حدد قسم "النسخ المتماثل" في لوحة معلومات Cloudant.
  • كقاعدة بيانات المصدر ، حدد "قاعدة البيانات البعيدة" باستخدام http://get.acralyzer.com/distrib-acralyzer كعنوان URL.
  • كقاعدة بيانات الهدف ، حدد "قاعدة بيانات جديدة" وأطلق عليها اسم "acralyzer".
  • انقر فوق "نسخ متماثل".

تتكون هذه الخطوة من تكرار تطبيق acra لتصور بيانات سجل أعطال Android.

ملاحظة : نسخ تطبيق acralyzer اختياري. لن تحتاج إليها إذا كنت مهتمًا فقط بتخزين تقرير أعطال Android ، بدلاً من تصور البيانات (سنلقي نظرة فاحصة على acralyzer في القسم التالي من هذا البرنامج التعليمي لنظام Android). إذا كنت تشعر بالثقة الكافية في مهاراتك في JavaScript ، يمكنك حتى كتابة تطبيق التحليلات الخاص بك! لكن هذا خارج نطاق منشور المدونة هذا.

الخطوة الأخيرة في عملية الإعداد الأولية هي إضافة أذونات الأمان. توفر Cloudant طبقة الأمان الخاصة بها عبر CouchDB مع تحكم أفضل في الحقوق الفردية ، لذلك من أجل كتابة تقرير إلى قاعدة البيانات الخاصة بنا ، نحتاج إلى إنشاء حساب مستخدم بأذونات الكتابة:

  • حدد قسم "قاعدة البيانات" في لوحة معلومات Cloudant.
  • انقر فوق قسم الأذونات (رمز القفل) لقاعدة بيانات acra- {myapp}.
  • انقر فوق "إنشاء مفاتيح API".
  • اكتب اسم المستخدم وكلمة المرور اللذين تم إنشاؤهما (سنستخدمهما لاحقًا).
  • أضف أذونات الكتابة لاسم المستخدم الذي تم إنشاؤه.

أضف أذونات الأمان حتى يمكن الوصول إلى سجلات وتقارير أعطال Android لاحقًا.

تصور تقارير أعطال Android باستخدام acralyzer

بمجرد النسخ المتماثل ، يمكن الوصول إلى لوحة معلومات acralyzer بسهولة باتباع https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard . سأعترف: إنها ليست أفضل أداة تحليلات موجودة ، لكنها تخدم غرضها.

من القائمة العلوية ، يمكنك تحديد قاعدة البيانات التي تريد تصورها (من الممكن استضافة قواعد بيانات متعددة لتطبيقات مختلفة في مشروع واحد ؛ سيؤثر هذا على حصة الاستخدام الخاصة بك) ومعاينة البيانات في لوحة المعلومات الرئيسية. على سبيل المثال ، يمكنك:

  • ارسم عدد التقارير حسب الوحدة الزمنية (الساعة ، اليوم ، الشهر ، إلخ).
  • عرض توزيع التقارير حسب المقاييس الخاصة بـ Android (إصدار Android ، وإصدار SDK ، وإصدار التطبيق ، والجهاز ، وما إلى ذلك).
  • أدرج جميع تقارير الأعطال (مع تتبع تفصيلي للمكدس) أو اعرض جميع الأخطاء (هنا ، "الخطأ" عبارة عن مجموعة من التقارير المتطابقة تم الحصول عليها من مستخدمين مختلفين).
  • معاينة التفاصيل لخلل واحد وتعيين حالته على أنها تم حلها (إذا تم إصلاحها).
  • تطهير الإدخالات القديمة أو القديمة.

يمكن أن يكون تصور بيانات سجل أعطال Android مفيدًا جدًا في تحسين تطبيقك بشكل أكثر استراتيجية.

لاحظ أن مقاييس أعطال Android المتاحة للتصور ستعتمد على التقارير التي نختار إرسالها من تطبيقنا. تقدم ACRA مجموعة متنوعة من حقول التقارير ، يمكن أن يكون بعضها كبيرًا جدًا من حيث الحجم أو غير مناسب تمامًا لإصلاح الأخطاء. بالنسبة لمعظم المشاريع ، ستكون حقول التقرير المطلوبة كافية. وتشمل هذه:

  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • نسخة أندرويد
  • PACKAGE_NAME
  • REPORT_ID
  • يبني
  • تتبع المكدس

تطبيق ACRA في مشروع Android الخاص بك

كما ذكرنا سابقًا في هذا البرنامج التعليمي ، فإن تطبيق ACRA سهل للغاية ولا يتطلب سوى بضع خطوات سريعة.

أضف التبعية

أولاً ، نحتاج إلى تضمين المكتبة باعتبارها تبعية بإحدى الطرق التالية:

  • كملف jar في مجلد / libs.
  • تبعية مخضرم:

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • كاعتماد متدرج:

     compile 'ch.acra:acra:XYZ'

إضافة فئة التطبيق

بعد ذلك ، نحتاج إلى إضافة فئة تطبيق Android إلى مشروعنا (أو تحديث فئة موجودة ، حيث يمكن أن يكون هناك مثيل واحد فقط) والإعلان عنها في AndroidManifest.xml:

 <application android:name=".MyApp" android:theme="@style/AppTheme"> ...

وإعداد أكرا هناك:

 @ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }

هذا هو! بالطبع ، ستحتاج إلى استبدال جميع العناصر النائبة {myapp} بالقيم الفعلية ، بالإضافة إلى قيم formUriBasicAuthLogin و formUriBasicAuthPassword .

كما ترى من مقتطف الشفرة أعلاه ، نحن نستخدم فقط حقول التقرير المطلوبة. لا تتردد في إضافة أي حقول أخرى قد تكون ذات صلة بتطبيقك.

يمكنك أيضًا اختيار استخدام PUT بدلاً من POST. في هذه الحالة ، سيتم إلحاق REPORT_ID بنهاية former كمعامل.

أخيرًا ، يمكنك أيضًا اختيار كيفية إبلاغ المستخدم بتعطل تطبيق Android ، حيث يكون الإعداد الافتراضي هو تقرير الخلفية الصامت. في حالتنا ، نختار عرض رسالة Toast لإعلام المستخدم بأنه تم الإبلاغ عن العطل وأن إصلاح الأخطاء سيكون متاحًا قريبًا.

تحتاج مساعدة؟ هنا نموذج مشروع

لرؤية ACRA قيد التنفيذ ، قمت بإعداد acra_example repo على GitHub. إنه يتميز بتطبيق بسيط يقوم بتهيئة ACRA عند بدء التشغيل ويتيح لك تعطيله بالضغط على زر (والذي يؤدي بعد ذلك إلى تشغيل استثناء مؤشر فارغ). يتم إرسال بيانات التعطل إلى مثال قاعدة بيانات Cloudant التي يمكن تصورها هنا.

لعرض البيانات ، قم بتسجيل الدخول باستخدام بيانات الاعتماد التالية:

  • اسم المستخدم: medo
  • كلمة المرور: acraexample

بدائل أكرا

ACRA ليس الخيار الوحيد للإبلاغ الآلي عن أخطاء Android. نظرًا لأن الأعطال لا بد أن تحدث ، فهناك سوق كبير من شركة إلى مطور (B2D) يحاول تحقيق الدخل من حلها.

Crittercism ، على سبيل المثال ، هو منصة ناضجة للغاية للإبلاغ عن الأعطال. يبدو رائعًا ، ويقدم مجموعة من الخيارات لتحليل البيانات ، ومن السهل جدًا دمجها. الجانب السلبي الوحيد: السعر والإصدار التجريبي المجاني محدودان إلى حد ما من حيث عدد المستخدمين النشطين وأيام الاحتفاظ بالبيانات والدعم). BugSense هي خدمة مماثلة.

ومع ذلك ، في رأيي ، تعد Crashlytics حلاً ممتازًا. حتى وقت قريب ، كان لدى Crashlytics نموذج مجاني (مع فئة مدفوعة الأجر) ؛ ولكن الآن (بعد الاستحواذ على Twitter) ، أصبحت جميع الميزات المميزة سابقًا متاحة مجانًا. لا توجد تكاليف أو رسوم أو حدود استخدام. هذه هي الوسيلة المفضلة للإبلاغ عن الأخطاء للعديد من الشركات والمطورين البارزين وذوي التصنيف العالي ، حيث إنها سهلة الاستخدام للغاية وتوفر أدوات تحليلات وتصور قوية. حتى أنه يتكامل مع IDEs الأكثر شيوعًا كمكوِّن إضافي (مثل Eclipse و Android Studio) ، لذا فإن إضافة Crashlytics إلى تطبيقك أمر بسيط مثل اختيار مشروع والضغط على زر. تتيح لك هذه المكونات الإضافية أيضًا تتبع تقارير الأعطال من IDE الخاص بك دون الحاجة إلى فتح متصفح.

إذن ، لماذا تستخدم ACRA إذن عندما تكون هناك بدائل أخرى تبدو أفضل وتقدم المزيد من الميزات لنفس جهود التنفيذ؟ سأعطيك سببين.

  1. كل هذه الخيارات الأخرى هي برامج مغلقة المصدر ، مملوكة . حتى مع وجود سلة مليئة باتفاقيات ترخيص المستخدم النهائي ، لا يمكنك التأكد بالضبط من كيفية جمع بياناتك ومعالجتها. من ناحية أخرى ، فإن ACRA و acralyzer عبارة عن مشروعات مفتوحة المصدر مستضافة على GitHub والتي يمكنك بسهولة تفرعها وتخصيصها وفقًا لاحتياجاتك.

  2. تنقل البيانات . لنفترض أنك غير راضٍ عن Cloudant. إنه لمن السهل نسخ بياناتك وترحيلها إلى نهاية خلفية أخرى. أنت تضمن بقاء البيانات ملكك .

كما هو الحال مع العديد من الخيارات ، يتلخص هذا الخيار في التفضيل الشخصي والألفة. تحقق من سلسلة محادثات Google+ لمزيد من المناقشة حول البدائل المتنوعة المتاحة لجعل تطبيقك أكثر موثوقية.

ختاما

ACRA هي مكتبة قوية للغاية وقابلة للتخصيص بدرجة كبيرة ويمكن استخدامها جنبًا إلى جنب مع Cloudant و acralyzer لتحقيق تقارير الأعطال التلقائية والتحليلات الأساسية لتطبيقك ، وكل ذلك من أجل الحد الأدنى من جهود التنفيذ.

تتطلب كتابة كود Android الموثوق به الكثير من الخبرة والبصيرة ، ولكن لا أحد منا كلي العلم حقًا. كن مستعدًا للأعطال والأخطاء غير المتوقعة ، وكن مستعدًا لإصلاح ما هو غير متوقع في أسرع وقت ممكن. هذا هو نوع العمل الذي يدخل في منتجات رائعة وتجارب مستخدم رائعة.

ذات صلة: اجعل تطبيقك مربحًا - استفد من تحليلات الجوّال