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

أحدث الإضافات:
- مكون إضافي تم ترقيته Android Gradle إلى v3.0.1
- وأضاف الدعم للملعقة. انظر https://github.com/square/spoon لمزيد من التفاصيل. وأضاف أيضا البرنامج المساعد Gradle لذلك. يمكن للمرء إجراء الاختبارات باستخدام "Gradlew Spoon" ثم فتح التقارير التي تم إنشاؤها في دليل "Build/Spoon".
- تمت إضافة لقطة الشاشة أثناء إجراء اختبارات الإسبريسو في Firebase
- تغطية اختبار إضافية لاختبارات الوحدة في خادم Teamcity CI
- تمت إضافة مثال على إذن وقت التشغيل. يستخدم مكتبة الأذونات. انظر فئة RunTimePerMissionActivity. (https://github.com/permissions-dispatcher/permissionsdispatcher)
- تبعيات إعادة هيكلة قليلا ، والتحقق من ملف build.gradle وملف تبعية
- دعم إضافي لروابط Android Dagger (Dagger v2.11)
- تمت إضافة مكتبة تلقائية عن العمل التلقائي ، ابن عم القليل من القيمة التلقائية (https://github.com/google/auto/tree/master/factory) في المشروع للمساعدة في الحقن بمساعدة الخنجر (هذا المنشور يفسر ذلك جيدًا: https://stackoverflow.com/questions
- تمت إضافة اختبار Espresso باستخدام مكتبة OkReplay (https://github.com/airbnb/okreplay) التي تسجل وإعادة استجابات الخادم. انظر com.example.features.dashboard.view.mainActivityOkReplayEspressOtest لمزيد من التفاصيل.
- وأضاف الدعم للاختبار السحابي Firebase (Firebase.google.com/docs/test-lab/) من خلال TeamCity! الآن يستخدم كل طلب سحب/ بناء ليلي/ إصدار الخدمة الخدمة لتشغيل اختبارات الإسبريسو. انظر justanothantandrowApp_RunespressOtStSinFireBase.xml لمزيد من التفاصيل.
- دعم إضافي لمكتبة BURST (https://github.com/square/burst) للاختبارات المعتمدة للوحدة (انظر com.example.util.stringutilstest لمزيد من التفاصيل).
- أضيفت اختصارات التطبيق! ثابت ، ديناميكي ، وديناميكي يستخدم عبر https://github.com/matthiasrobbers/shortbread مكتبة! للحصول على التفاصيل ، يرجى التحقق من أسفل فئة التطبيق ، وإعلان shortcut MainActivity و Filects.xml.
- تمت إضافة 2 من عمليات فحص الوبر المخصصة حول الألوان (تحقق من فئة غير ومية غير مميتة ومياهية palettecolorusagedetector).
- وأضاف فحص الوبر مخصص للألوان المتشددين. (تحقق من فئة HardcodedColorsDetector)
- Gradle Plugin للتحقق من حجم APK وفشل تلقائيًا في البناء إذا كان حجم APK أكثر من قيمة محددة (تحقق من ملف Build.gradle و gradle.properties للتكوين و https://github.com/vanniktech/gradle-droid-apk-pk-plugin للمكون الإضافي الفعلي).
- وأضاف الدعم لنصوص CI Teamcity المرتكبة في VCS! يتم كتابتها في Kotlin/XML (تحقق من مجلد .TeamCity أو اقرأ المزيد في أسفل هذا الملف)
- تمت إضافة Sherlock إلى المشروع بحيث يمكن للمطورين (و QA) الوصول بسهولة إلى استثناءات تحدث (ومشاركتها) من خلال التطبيق (انظر فئة التطبيق وملف Build.gradle و https://github.com/ajitsing/sherlock للمشروع).
- تمت إضافة Traceur إلى المشروع الذي يسمح بعرض المزيد من stacktraces مع Rxjava 2 (تحقق من فئة TraceurTool والفئات الأخرى ذات الصلة أو https://github.com/t-spoon/traceur للمكتبة).
- تمت إضافة مكتبة تشاك لرؤية مكالمات الشبكة مباشرة على الهاتف. راجع https://github.com/jgilfelt/chuck للمكتبة وفئة NetworkModule للاعتراض المضافة.
- تعطيل الرسوم المتحركة قبل اختبارات الإسبريسو وإعادة توجيهها بعد ذلك! (انظر Grant_animation_permission.gradle و Espressotesthelper Class)
- إجراءات ButterKnife المضافة (انظر فئة butterknifications)
- دعم لأجزاء السخرية من الرسم البياني للخنجر عبر مكتبة Daggermock (انظر فئة MainActivityTest)
- أضيفت تخطيط القيد! (انظر Activity_main.xml)
- تمت إضافة جدولة Rxjava التي تُعلم Espresso عبر countingidlingResource عند إيقاف تنفيذ الاختبار وانتظار المهام غير المتزامنة (تحقق من com.example.util.rx.rxidlingscheduler)
- مشروع ترقية لاستخدام Mosby MVP V3 الجديد !! تحقق من https://github.com/sockeqwe/mosby لمزيد من التفاصيل.
- دعم إضافي لفئة Rxjavaplugins ، والتي تتيح سهولة التجاوز من جدولين Rxjava 2 في الاختبارات. انظر طريقة الإعداد لفئة MainPresenterTest.
- وأضاف بعض الاختلافات من البلاط الإعدادات السريعة. راجع https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8 للحصول على معلومات حول الميزة و com.example.features.tiles.passivetileServiceonlytoggle للتنفيذ (بالإضافة إلى وجود المزيد من الأشياء الجيدة في نفس الحزمة)
محتويات:
المكتبات:
- Rxjava
- Dagger 2 مع أمثلة من الحقن بمساعدة ووحدات مختلفة اعتمادًا على نوع البناء. دعم أيضًا لنظام Android Dagger v2.11
- التعديل التحديثي 2 ووضع الصراع التعديل التحديثي لإنشاء تصحيح الأخطاء
- MOSBY MVP مع عرض حالة العرض (V3!)
- الأخشاب
- قيمة السيارات ومصنع السيارات
- انزلاق مع غلاف
- زبدة
- التأكيد على التأكيدات بطلاقة
- النسيج (الاكتئاب والإجابات)
- Retrolambda
- Stetho
- تشاك
- Shortbread (https://github.com/matthiasrobbers/shortbread)
- أذونات dispatcher لأذونات وقت التشغيل (https://github.com/permissions-dispatcher/permissionsdispatcher)
تحليل ثابت:
- PMD (https://pmd.github.io/ -
- CheckStyle (تحقق من ملف static_analysis_java.gradle)
- LINT (تحقق من ملف lint.gradle)
- FindBugs (تحقق من ملف static_analysis_java.gradle)
- تغطية رمز Jacoco التي يمكنها إنشاء تقارير لاختبارات الوحدة أو اختبارات الإسبريسو أو مزيج من الاثنين
- مجموعة من قواعد فحص IDE المخصصة
- وحدة ذات قواعد واختبارات مخصصة الوبر لها
الاختبار:
- وأضاف الدعم للملعقة. انظر https://github.com/square/spoon لمزيد من التفاصيل. وأضاف أيضا البرنامج المساعد Gradle للملعقة. يمكن للمرء إجراء الاختبارات باستخدام "Gradlew Spoon" ثم فتح التقارير التي تم إنشاؤها في دليل "Build/Spoon".
- اختبار التغطية التي تعمل في Teamcity CI Server
- اختبارات إسبرسو مع وبدون خادم ويب وهمية
- اختبارات خادم الويب الوهمية التي تقوم بتحميل الاستجابات من ملفات JSON
- اختبارات robolectric
- اختبارات الوحدة العادية
- OK HTTP Interceptor لتغيير عنوان URL الأساسي في الاختبارات
- موارد الخمول
- شاشة فتح لاختبارات الإسبريسو (تحقق من clas com.example.util.espressotestestrunner)
- دعم فئة Rxjavaplugins ، والتي تتيح سهولة تجاوز جدولة Rxjava 2 في الاختبارات (تحقق من فئة MainPresentertest)
- دعم لجدولة Rxjava التي تساعد في اختبارات الإسبريسو وتنفيذ الكود غير المتزامن. (تحقق من com.example.util.rx.rxidlingscheduler)
- دعم لأجزاء السخرية من الرسم البياني للخنجر عبر مكتبة Daggermock (انظر فئة MainActivityTest)
- تعطيل الرسوم المتحركة قبل اختبارات الإسبريسو وإعادة توجيهها بعد ذلك! (انظر Grant_animation_permission.gradle و Espressotesthelper Class)
- تمت إضافة Sherlock إلى المشروع بحيث يمكن للمطورين (و QA) الوصول بسهولة إلى استثناءات تحدث (ومشاركتها) من خلال التطبيق (انظر فئة التطبيق وملف Build.gradle و https://github.com/ajitsing/sherlock للمشروع).
- BURST Library (https://github.com/square/burst) لاختبارات الوحدة المعلمة (انظر com.example.util.stringutilstest لمزيد من التفاصيل).
- وأضاف الدعم للاختبار السحابي Firebase (Firebase.google.com/docs/test-lab/) من خلال TeamCity! الآن يستخدم كل طلب سحب/ بناء ليلي/ إصدار الخدمة الخدمة لتشغيل اختبارات الإسبريسو. انظر justanothantandrowApp_RunespressOtStSinFireBase.xml لمزيد من التفاصيل.
- تمت إضافة اختبار Espresso باستخدام مكتبة OkReplay (https://github.com/airbnb/okreplay) التي تسجل وإعادة استجابات الخادم. انظر com.example.features.dashboard.view.mainActivityOkReplayEspressOtest لمزيد من التفاصيل.
عرض مرتبط:
- أضيفت تخطيط القيد! (انظر Activity_main.xml)
- إجراءات ButterKnife المضافة (انظر فئة butterknifications)
آخر:
- Gradle Plugin للتحقق من حجم APK وفشل تلقائيًا في البناء إذا كان حجم APK أكثر من قيمة محددة (تحقق من ملف Build.gradle و gradle.properties للتكوين و https://github.com/vanniktech/gradle-droid-apk-pk-plugin للمكون الإضافي الفعلي).
- افصل أيقونات التطبيق وفقًا لنوع البناء
- بعض مجموعات المصادر المتقدمة تكوين لتقسيم الاختبارات
- قم بتحميل بعض تكوين المشروع من ملفات الخصائص في Android ManySest و Build.gradle
- المجلدات المشتركة لبعض أنواع البناء أو الاختبارات
- عمل التكوين البروغ
- التعليقات التوضيحية الخارجية Android Studio (https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- التعليقات التوضيحية لمستوى الحزمة لـ nullable و @nonnull
- اعتراض OKHTTP لإضافة رمز المصادقة إلى الرؤوس بسهولة
- وضع صارم
- البرنامج المساعد لنشر التطبيق على PlayStore
- المكون الإضافي DEX Count لحساب عدد الأساليب في APK
- منفصل شجرة تسجيل الأخشاب ل crashlytics. انظر com.example.tools.timber.crashlyticsstree
- إعدادات إعدادات سريعة (انظر com.example.features.tiles.passiveTileServiceOnlyToggle)
- تمت إضافة Traceur إلى المشروع الذي يسمح بعرض المزيد من stacktraces مع Rxjava 2 (تحقق من فئة TraceurTool والفئات الأخرى ذات الصلة أو https://github.com/t-spoon/traceur للمكتبة).
- اختصارات التطبيق! ثابت ، ديناميكي ، وديناميكي يستخدم عبر https://github.com/matthiasrobbers/shortbread مكتبة! للحصول على التفاصيل ، يرجى التحقق من أسفل فئة التطبيق ، وإعلان shortcut MainActivity و Filects.xml.
.. وجميع أنواع الأشياء الجيدة الأخرى!
TeamCity - التكامل المستمر
يستفيد المشروع من ميزة TeamCity لتخزين تكوين خادم CI في Kotlin في نظام التحكم في الإصدار. راجع https://confluence.jetbrains.com/display/tcd10/kotlin+dsl لمزيد من التفاصيل. يمكن العثور على الإعدادات تحت مجلد .TeamCity في المشروع.
بناء التكوينات:
هناك 3 تكوينات بناء:
- تكوين "طلبات السحب" ، تم تشغيله على كل طلب سحب. يتحقق من صحة طلب السحب (عادة لفرع "تطوير"). ستجلب QA APK ذات الصلة من HockeyApp التي تم إنشاؤها بواسطة تكوين الإنشاء هذا من أجل اختبار الميزة/الإصلاح يدويًا الذي يقدمه طلب السحب. هذا البناء:
- يدير جميع أدوات التحليل الثابت.
- يدير جميع اختبارات الوحدة لجميع أنواع البناء.
- أداء طريقة حساب لجميع أنواع البناء.
- يتحقق من التكرارات.
- يبني مؤلفات التطبيقات.
- يدير جميع اختبارات الإسبريسو على سحابة اختبار Firebase.
- تحميل APKS إلى Hockeyapp.
- تحديث github مع حالة الوظيفة (النجاح/الفشل).
- تكوين "البناء الليلي " ، يتم تشغيله كل ليلة في منتصف الليل على فرع "تطوير". ستجلب QA APK ذات الصلة من HockeyApp التي تم إنشاؤها بواسطة تكوين البناء هذا من أجل اختبار تكامل ميزات التطبيق. يتم نشر هذا البناء أيضًا في مجموعة Alpha Playstore مغلقة للناس لاختبارهم. هذا البناء:
- يدير جميع اختبارات الوحدة لجميع أنواع البناء.
- أداء طريقة حساب لجميع أنواع البناء.
- يتحقق من التكرارات.
- يبني مؤلفات التطبيقات.
- يدير جميع اختبارات الإسبريسو على سحابة اختبار Firebase.
- تحميل APKS إلى Hockeyapp.
- تحميل apk apk إلى قناة ألفا الخاصة في بلايستور.
- تكوين "الإصدارات" ، يتم تشغيله على كل فرع يطابق اسم الفرع المنطقي "الإصدار/*". ستجلب QA APK ذات الصلة من HockeyApp لإجراء الاختبار النهائي قبل الإصدار. يتم نشر هذا البناء أيضًا في مجموعة Open Beta Playstore للأشخاص لاختبارهم. هذا البناء:
- يدير جميع أدوات التحليل الثابت.
- يدير جميع اختبارات الوحدة لجميع أنواع البناء.
- أداء طريقة حساب لجميع أنواع البناء.
- يتحقق من التكرارات.
- يبني مؤلفات التطبيقات.
- يدير جميع اختبارات الإسبريسو على سحابة اختبار Firebase.
- تحميل APKS إلى Hockeyapp.
- تحميل إصدار APK إلى قناة BETA العامة في Playstore.
التقارير:
هناك أيضًا جميع أنواع التقارير المتاحة:
- يوضح تقرير التحليل الثابت CheckStyle جميع تحذيرات CheckStyle في المشروع. عادةً ما تقارن مرة أخرى فارغة لأن هناك سياسة تسامح صفرية في المشروع. على بنيتها الفاشلة تحدد المشكلات التي تحتاج إلى إصلاح.

- تُظهر تقارير اختبار الوحدة لجميع أنواع البناء جميع الاختبارات التي تم إجراءها مع تفاصيل إضافية و stacktraces في حالة حدوث خطأ. 2 لوحات المعلومات ، إحداها هي تقرير اختبار Teamcity الذي تم إنشاؤه ، والآخر هو تقرير Junit4 HTML الأصلي.


- تُظهر تقارير Dex Method Counter لجميع أنواع البناء عدد الأسلوب لكل APK ، إلى جانب تصور مثيرة للاهتمام لأسفل يجعل من السهل جدًا تحديد المكتبات التي تحتوي على العديد من الطرق. كملاحظة ، عادةً ما يكون لإطلاق APKs و QA APKs تعدادات أصغر في هذه التقارير حيث يتم تشغيل Proguard في أنواع البناء هذه ، مما يجريد طرقًا غير مستخدمة.

- يوضح تقرير التحليل الثابت FindBugs جميع تحذيرات FindBugs في المشروع. عادةً ما تقارن مرة أخرى فارغة لأن هناك سياسة تسامح صفرية في المشروع. على بنيتها الفاشلة تحدد المشكلات التي تحتاج إلى إصلاح.

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

- يوضح تقرير التحليل الثابت PMD جميع تحذيرات PMD في المشروع. عادةً ما تقارن مرة أخرى فارغة لأن هناك سياسة تسامح صفرية في المشروع. على بنيتها الفاشلة تحدد المشكلات التي تحتاج إلى إصلاح.

- لا يوجد تقرير في الوقت الحالي لاختبار السحابة Firebase. ستحتاج إلى الذهاب إلى سجل الإنشاء وتحديد موقع عنوان URL الذي يشير إلى دلو تخزين Google Cloud الذي يتم حفظ النتائج فيه. مع بعض التغييرات ، يمكن للمرء استخدام دلو تخزين شخصي (مدفوع) ثم سحب نتائج الاختبار مرة أخرى إلى TeamCity. هذه المقالة تلامس باختصار حول الموضوع: http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device-cloud/

ملحقات TeamCity:
تم استخدام اثنين من الإضافات Teamcity لجعل حياتي أسهل:
- "رقم الإنشاء المشترك المتقدم": انظر https://java.nicholaswilliams.net/teamcityplugins/download مكون إضافي يتيح لك مشاركة عدادات البناء عبر البناء. نظرًا لأن هذا العداد جزء من رمز الإصدار الخاص بـ APK ، فمن الجيد إبقائها متزامنة.
- "Clack Notifications Plugin": انظر https://github.com/petegoo/tcslackbuildnotifier مكون إضافي يتيح لك نشر حالات البناء إلى الركود.
- "Chuck Norris Teamity Plugin": انظر https://github.com/dbf256/teamcity-chuck-plugin ليس الكثير ليقوله عن هذا ؛-)
ملحوظات:
- يمكن توزيع قناة بيتا العامة (https://play.google.com/apps/testing/com.justanotherandroidapp) (من الناحية النظرية) في جميع أنحاء الشركة. أحد الأشياء التي جربتها هو إضافة الرابط إلى علامة NFC وتعليق ذلك على الحائط ، بحيث يمكن للجميع جلب تطبيق بيتا بسرعة!
الهوكي
أنا أستخدم HockeyApp لحفظ و (من الناحية النظرية) توزيع APKs على ضمان الجودة أو أصحاب المصلحة. انظر https://hockeyapp.net لمزيد من التفاصيل حول المنتج. هذا ما يبدو عليه في لوحة معلومات الهوكي:

كما ترون ، هناك تصميمات مختلفة لتكوينات بناء CI المختلفة وجميع أنواع البناء. كان Hockeyapp Lears لطيفًا بما يكفي لتزويدني بحساب مجاني لإظهار استخدام أدائهم.
مراجعات بلايستور في سلاك
باستخدام مراجعة BOT لهذا (https://reviewbot.io/؟utm_source=github&utm_medium=athkalia- فقط an-Another-Android-app) ، لا يوجد الكثير ليقوله ، مجرد أداة بسيطة للغاية تنجز المهمة. عندما تأتي المراجعة ، يبدو الأمر كذلك:

خريطة الطريق
- الترقية إلى أحدث إصدار من Gradle
- مصادقة البصمة
- مكتبة الموصل
تقديم PRS
يرجى التأكد من اكتمال gradlew check بنجاح قبل إنشاء العلاقات العامة. يقوم هذا الأمر بتشغيل جميع الاختبارات لجميع المتغيرات ، بالإضافة إلى أدوات التحليل الثابت 4: الوبر ، checsktyle ، PMD ، FindBugs.
قائمة بالأشياء التي لن أضيفها ، لا تتردد في المساهمة إذا كنت تحب أيًا من هذه!
- قم بتشغيل تغطية الاختبار في اختبار Firebase Cloud ، وجلب التقارير ، (ربما دمجها مع تقارير تغطية اختبارات الوحدة) ، وقدم التقارير مرة أخرى إلى خادم CI. سيتطلب ذلك دفع ثمن دلو S3 ، وأنا غير متأكد من فائدة تتبع هذا لأكون صادقًا.
- إن أتمتة الإصدارات أكثر ، مثل إصدارات وضع العلامات ، والاندماج مرة أخرى لتطوير وما إلى ذلك ، فإن المتطلبات حول هذا الأمر محدد للغاية للمشروع ، وبالنظر إلى أنه قد يكون هناك تعارض وما إلى ذلك ، لا يستحق الأتمتة في الوقت الحالي.
- لقطات شاشة أوتوماتيكية من خلال أداة "fastlane - screengrab" (https://github.com/fastlane/fastlane/tree/master/screengrab) لا يدعمون Windows وليس لدي جهاز Mac :(
أي ردود فعل/طلب سحب مرحب به!
يمكنك اللحاق بي على www.sakiskaliakoudas.com