Harap dicatat bahwa proyek ini tidak lagi dipertahankan
Aplikasi Sampel Android dengan Arsitektur MVP
Contoh proyek yang menampilkan beberapa gambar dari Dribble API. Demonstrasi beberapa hal keren yang dapat Anda lakukan dengan perpustakaan modern dan perkakas di Android akhir -akhir ini.
Seperti yang dikatakan seseorang di Reddit: "Ini tidak direkayasa berlebihan, itu hanya gedung pencakar langit tanpa bagian gedung pencakar langit, hanya fondasinya :)"

Tambahan terbaru:
- Plugin Android Gradle yang ditingkatkan ke v3.0.1
- Menambahkan dukungan untuk sendok. Lihat https://github.com/square/spoon untuk lebih jelasnya. Juga menambahkan plugin Gradle untuk itu. Seseorang dapat menjalankan tes dengan 'Gradlew Spoon' dan kemudian membuka laporan yang dihasilkan di direktori 'Build/Spoon'.
- Menambahkan screenshot meraih saat menjalankan tes espresso di firebase
- Menambahkan cakupan tes untuk tes unit di server CI TeamCity
- Menambahkan contoh izin runtime. Menggunakan Perpustakaan PermissionsDispatcher. Lihat RuntimePermissionSactivity Class. (https://github.com/permissions-dispatcher/permissionsdispatcher)
- Sedikit dependensi yang direstrukturisasi, periksa file build.gradle dan file dependensi.gradle
- Dukungan tambahan untuk binding android belati (belati v2.11)
- Ditambahkan Perpustakaan Faktor-Otomatis Sepupu kecil Auto-Value (https://github.com/google/auto/tree/master/factory) ke dalam proyek untuk membantu dengan injeksi berbantuan belati (posting ini menjelaskan dengan cukup baik: https://stackoverflow.com/questions/22799407/looking-for-an-example-for-dagger-assisted-injection)
- Menambahkan tes espresso menggunakan perpustakaan OkReplay (https://github.com/airbnb/okreplay) yang merekam dan memutar ulang respons server. Lihat com.example.features.dashboard.view.MainActivityOkreplayespressotest untuk lebih jelasnya.
- Menambahkan dukungan untuk pengujian cloud Firebase (firebase.google.com/docs/test-lab/) melalui TeamCity! Sekarang setiap permintaan tarik/ build build/ rilis malam menggunakan layanan untuk menjalankan tes espresso. Lihat JustAnotherandroidapp_RunesPressotestSinfirebase.xml untuk lebih detail.
- Menambahkan dukungan untuk perpustakaan burst (https://github.com/square/burst) untuk tes unit parametrized (lihat com.example.util.stringutilstest untuk lebih jelasnya).
- Menambahkan Pintasan Aplikasi! Statis, dinamis, dan dinamis digunakan melalui https://github.com/matthiasrobbers/shortbread Library! Untuk detailnya silakan periksa bagian bawah kelas aplikasi, MainActivity @Shortcut Deklarasi dan file shortcuts.xml.
- Menambahkan 2 lagi pemeriksaan serat khusus di sekitar warna (periksa kelas nonMaterialColorSdetector dan DirectMaterialPalettecolorusageDetector).
- Menambahkan pemeriksaan serat khusus untuk warna hardcoded. (Periksa kelas hardcodedcolorsdetector)
- Plugin Gradle untuk memeriksa ukuran APK dan secara otomatis gagal build jika ukuran APK lebih dari nilai tertentu (periksa file build.gradle dan gradle.properties untuk konfigurasi dan https://github.com/vanniktech/gradle-droid-aPK-plugin untuk plugin gradle aktual).
- Dukungan tambahan untuk skrip CI TeamCity yang dilakukan di VCS! Mereka ditulis dalam Kotlin/XML (periksa .TeamCity folder atau baca lebih lanjut di bagian bawah file ini)
- Menambahkan Sherlock ke dalam proyek sehingga pengembang (dan QA) dapat memiliki akses mudah ke pengecualian yang terjadi (dan membagikannya) melalui aplikasi (lihat kelas aplikasi dan file build.gradle dan https://github.com/ajitsing/sherlock untuk proyek).
- Menambahkan Traceur ke dalam proyek yang memungkinkan untuk menampilkan stacktraces yang lebih berguna dengan RXJAVA 2 (periksa kelas Traceurtool dan kelas terkait lainnya atau https://github.com/t-spoon/traceur untuk perpustakaan).
- Menambahkan perpustakaan Chuck untuk melihat panggilan jaringan tepat di telepon. Lihat https://github.com/jgilfelt/chuck untuk perpustakaan dan kelas NetworkModule untuk pencegat yang ditambahkan.
- Menonaktifkan animasi sebelum espresso menguji dan mengaktifkannya kembali setelah itu! (Lihat kelas hibah_animation_permission.gradle dan espressotesthelper)
- Menambahkan aksi butterknife (lihat kelas Butterknifeactions)
- Dukungan untuk mengejek bagian grafik belati Anda melalui Daggermock Library (lihat MainActivityTest Class)
- Menambahkan tata letak kendala! (Lihat aktivitas_main.xml)
- Menambahkan penjadwal RXJAVA yang menginformasikan espresso melalui CountidlingResource tentang kapan harus menjeda eksekusi tes dan menunggu tugas asinkron untuk menyelesaikan (periksa com.example.util.rx.rxidlingscheduler)
- Proyek yang ditingkatkan untuk menggunakan MOSBY MVP V3 yang baru !! Periksa https://github.com/sockeqwe/mosby untuk lebih jelasnya.
- Dukungan tambahan untuk kelas RXJAVAPLUGINS, yang memudahkan utama penjadwal RXJAVA 2 dalam pengujian. Lihat Metode Pengaturan Kelas MainPresenterTest.
- Menambahkan beberapa variasi ubin pengaturan cepat. Lihat https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8 untuk informasi tentang fitur dan com.example.features.tiles.passivetileServiceOnlytoggle untuk implementasi (ditambah ada beberapa barang lagi dalam paket yang sama)
Isi:
Perpustakaan:
- Rxjava
- Dagger 2 dengan contoh injeksi yang dibantu dan modul yang berbeda tergantung pada jenis build. Dukungan juga untuk Android Dagger v2.11
- Retrofit 2 dan Mode Mock Retrofit untuk Debug Builds
- MOSBY MVP dengan View State Support (v3!)
- Kayu
- Nilai Otomatis dan Pabrik Otomatis
- Meluncur dengan pembungkus
- Pisau kecil pemotong
- Assertj untuk pernyataan yang lancar
- Fabric (crashlytics dan jawaban)
- Retrolambda
- Stetho
- Membuang
- Shortbread (https://github.com/matthiasrobbers/shortbread)
- Permisionsdispatcher untuk izin runtime (https://github.com/permissions-dispatcher/permissionsdispatcher)
Analisis Statis:
- PMD (https://pmd.github.io/ - periksa file static_analysis_java.gradle)
- Checkstyle (periksa file static_analysis_java.gradle)
- Lint (periksa file lint.gradle)
- Findbugs (periksa file static_analysis_java.gradle)
- Cakupan Kode Jacoco yang dapat menghasilkan laporan untuk tes unit, tes espresso atau kombinasi keduanya
- Satu set aturan inspeksi IDE khusus
- Modul dengan aturan dan tes serat khusus untuk mereka
Pengujian:
- Menambahkan dukungan untuk sendok. Lihat https://github.com/square/spoon untuk lebih jelasnya. Juga menambahkan plugin gradle untuk sendok. Seseorang dapat menjalankan tes dengan 'Gradlew Spoon' dan kemudian membuka laporan yang dihasilkan di direktori 'Build/Spoon'.
- Cakupan uji berjalan di server CI TeamCity
- Tes espresso dengan dan tanpa server web tiruan
- Tes server web tiruan yang memuat respons dari file json
- Tes Robolektrik
- Tes unit normal
- OK HTTP Interceptor untuk mengubah URL dasar dalam tes
- Sumber daya pemalasan
- Layar membuka kunci untuk tes espresso (periksa kelas com.example.util.espressotestrunner)
- Dukungan untuk kelas RXJAVAPLUGINS, yang memungkinkan penimpangan mudah penjadwal RXJAVA 2 dalam pengujian (periksa kelas MainPresenterTest)
- Dukungan untuk penjadwal RXJAVA yang membantu dengan tes espresso dan eksekusi kode asinkron. (periksa com.example.util.rx.rxidlingscheduler)
- Dukungan untuk mengejek bagian grafik belati Anda melalui Daggermock Library (lihat MainActivityTest Class)
- Menonaktifkan animasi sebelum espresso menguji dan mengaktifkannya kembali setelah itu! (Lihat kelas hibah_animation_permission.gradle dan espressotesthelper)
- Menambahkan Sherlock ke dalam proyek sehingga pengembang (dan QA) dapat memiliki akses mudah ke pengecualian yang terjadi (dan membagikannya) melalui aplikasi (lihat kelas aplikasi dan file build.gradle dan https://github.com/ajitsing/sherlock untuk proyek).
- Burst Library (https://github.com/square/burst) untuk tes unit parametrized (lihat com.example.util.stringutilstest untuk lebih jelasnya).
- Menambahkan dukungan untuk pengujian cloud Firebase (firebase.google.com/docs/test-lab/) melalui TeamCity! Sekarang setiap permintaan tarik/ build build/ rilis malam menggunakan layanan untuk menjalankan tes espresso. Lihat JustAnotherandroidapp_RunesPressotestSinfirebase.xml untuk lebih detail.
- Menambahkan tes espresso menggunakan perpustakaan OkReplay (https://github.com/airbnb/okreplay) yang merekam dan memutar ulang respons server. Lihat com.example.features.dashboard.view.MainActivityOkreplayespressotest untuk lebih jelasnya.
Lihat Terkait:
- Menambahkan tata letak kendala! (Lihat aktivitas_main.xml)
- Menambahkan aksi butterknife (lihat kelas Butterknifeactions)
Lainnya:
- Plugin Gradle untuk memeriksa ukuran APK dan secara otomatis gagal build jika ukuran APK lebih dari nilai tertentu (periksa file build.gradle dan gradle.properties untuk konfigurasi dan https://github.com/vanniktech/gradle-droid-aPK-plugin untuk plugin gradle aktual).
- Ikon aplikasi terpisah sesuai dengan jenis build
- Beberapa Sumber Lanjutan Mengatur Konfigurasi untuk Memisahkan Tes
- Memuat beberapa konfigurasi proyek dari file properti di android manifest dan build.gradle
- Folder bersama untuk beberapa jenis bangunan atau tes
- Konfigurasi proguard yang berfungsi
- Anotasi Eksternal Studio Android (https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- Anotasi level paket untuk @nullable dan @nonnull
- OKHTTP Interceptor untuk menambahkan token auth ke header dengan mudah
- Mode ketat
- Plugin untuk menerbitkan aplikasi di PlayStore
- Dex Coun Plugin untuk Menghitung Jumlah Metode di APK
- Pohon logging kayu terpisah untuk crashlytics. Lihat com.example.tools.tiimber.crashlyticstree
- Ubin pengaturan cepat (lihat com.example.features.tiles.passivetileServiceOnlytoggle)
- Menambahkan Traceur ke dalam proyek yang memungkinkan untuk menampilkan stacktraces yang lebih berguna dengan RXJAVA 2 (periksa kelas Traceurtool dan kelas terkait lainnya atau https://github.com/t-spoon/traceur untuk perpustakaan).
- Pintasan aplikasi! Statis, dinamis, dan dinamis digunakan melalui https://github.com/matthiasrobbers/shortbread Library! Untuk detailnya silakan periksa bagian bawah kelas aplikasi, MainActivity @Shortcut Deklarasi dan file shortcuts.xml.
..dan segala macam barang lainnya!
TeamCity - Integrasi Berkelanjutan
Proyek ini mendapat manfaat dari fitur TeamCity dalam menyimpan konfigurasi server CI di Kotlin dalam sistem kontrol versi. Lihat https://confluence.jetbrains.com/display/tcd10/kotlin+dsl untuk detail lebih lanjut. Pengaturan dapat ditemukan di bawah folder .TeamCity dalam proyek.
Bangun konfigurasi:
Ada 3 konfigurasi build:
- Konfigurasi Bangun 'Permintaan Tarik' , dipicu pada setiap permintaan tarik. Memverifikasi kebenaran permintaan tarik (biasanya untuk cabang 'kembangkan'). QA akan mengambil APK yang relevan dari HockeyApp yang dibuat oleh konfigurasi build ini untuk menguji fitur/memperbaiki yang diperkenalkan secara manual yang diperkenalkan. Bangunan ini:
- Menjalankan semua alat analisis statis.
- Menjalankan semua tes unit untuk semua jenis build.
- Lakukan penghitungan metode untuk semua jenis build.
- Memeriksa duplikat.
- Membangun apks.
- Menjalankan semua tes espresso di cloud uji firebase.
- Mengunggah apks ke hockeyapp.
- Memperbarui github dengan status pekerjaan (keberhasilan/kegagalan).
- Konfigurasi Bangun 'Bangun Nightly ', dipicu setiap malam di tengah malam di cabang 'kembangkan'. QA akan mengambil APK yang relevan dari HockeyApp yang dibuat oleh konfigurasi build ini untuk menguji integrasi fitur aplikasi. Bangunan ini juga digunakan ke grup playstore alpha tertutup untuk diuji orang. Bangunan ini:
- Menjalankan semua tes unit untuk semua jenis build.
- Melakukan penghitungan metode untuk semua jenis build.
- Memeriksa duplikat.
- Membangun apks.
- Menjalankan semua tes espresso di cloud uji firebase.
- Mengunggah apks ke hockeyapp.
- Mengunggah rilis apk ke saluran alpha pribadi di playstore.
- Konfigurasi Bangun 'Rilis' , dipicu pada setiap cabang yang cocok dengan nama cabang logis 'Release/*'. QA akan mengambil APK yang relevan dari HockeyApp untuk melakukan pengujian akhir sebelum rilis. Bangunan ini juga dikerahkan ke grup playstore beta terbuka untuk diuji orang. Bangunan ini:
- Menjalankan semua alat analisis statis.
- Menjalankan semua tes unit untuk semua jenis build.
- Melakukan penghitungan metode untuk semua jenis build.
- Memeriksa duplikat.
- Membangun apks.
- Menjalankan semua tes espresso di cloud uji firebase.
- Mengunggah apks ke hockeyapp.
- Mengunggah rilis apk ke saluran beta publik di Playstore.
Laporan:
Ada juga semua jenis laporan yang tersedia:
- Laporan Analisis Statis CheckStyle menunjukkan semua peringatan checkstyle dalam proyek. Biasanya akan melaporkan kembali kosong karena ada kebijakan nol toleransi dalam proyek. Pada pembuatan yang gagal itu menunjukkan masalah yang perlu diperbaiki.

- Laporan Uji Unit untuk semua jenis build menunjukkan semua tes yang dijalankan bersama dengan detail tambahan dan stacktraces jika terjadi kesalahan. 2 Dashboards, satu adalah Laporan Uji TeamCity yang dihasilkan, yang lainnya adalah laporan HTML JUnit4 asli.


- Dex Metode Counter Laporan untuk semua jenis build menunjukkan jumlah metode untuk setiap APK, bersama dengan visualisasi pengeboran yang menarik yang membuatnya sangat mudah untuk melihat perpustakaan yang berisi terlalu banyak metode. Sebagai catatan, biasanya rilis dan APK QA memiliki metode yang lebih kecil dalam laporan ini karena Proguard berjalan dalam jenis pembuatan ini, menelanjangi metode yang tidak digunakan.

- Laporan Analisis Statis FindBugs menunjukkan semua peringatan FindBugs dalam proyek. Biasanya akan melaporkan kembali kosong karena ada kebijakan nol toleransi dalam proyek. Pada pembuatan yang gagal itu menunjukkan masalah yang perlu diperbaiki.

- Laporan Analisis Lint Static menunjukkan semua peringatan serat dalam proyek. Biasanya akan melaporkan kembali kosong karena ada kebijakan nol toleransi dalam proyek. Pada pembuatan yang gagal itu menunjukkan masalah yang perlu diperbaiki.

- Laporan analisis statis PMD menunjukkan semua peringatan PMD dalam proyek. Biasanya akan melaporkan kembali kosong karena ada kebijakan nol toleransi dalam proyek. Pada pembuatan yang gagal itu menunjukkan masalah yang perlu diperbaiki.

- Tidak ada laporan saat ini untuk pengujian cloud Firebase. Anda harus masuk ke Build Log dan menemukan URL yang menunjuk ke Google Cloud Storage Bucket tempat hasilnya disimpan. Dengan beberapa perubahan, seseorang dapat menggunakan ember penyimpanan pribadi (berbayar) dan kemudian menarik hasil tes kembali ke TeamCity. Artikel ini secara singkat menyentuh topik: http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device cloud/

Plugin TeamCity:
Beberapa plugin TeamCity digunakan untuk membuat hidup saya lebih mudah:
- 'Lanjutan Nomor Build Shared': Lihat https://java.nicholaswilliams.net/teamcityplugins/Download plugin yang memungkinkan Anda berbagi penghitung build di seluruh bangunan. Karena penghitung itu adalah bagian dari kode versi APK, ada baiknya agar mereka tetap sinkron.
- 'Slack Notifications Plugin': Lihat https://github.com/petegoo/tcslackBuildnotifier plugin yang memungkinkan Anda memposting status build untuk mengendur.
- 'Chuck Norris Teamcity Plugin': lihat https://github.com/dbf256/teamcity-chuck-plugin tidak banyak yang bisa dikatakan tentang yang satu ini ;-)
Catatan:
- Public Beta Channel (https://play.google.com/apps/testing/com.justanotherandroidapp) kemudian dapat (secara teori) didistribusikan di seluruh perusahaan. Satu hal yang saya coba adalah menambahkan tautan ke tag NFC dan menggantungnya di dinding, sehingga semua orang dapat dengan cepat mengambil aplikasi beta!
HockeyApp
Saya menggunakan HockeyApp untuk menyimpan dan (secara teori) mendistribusikan APK ke QA atau pemangku kepentingan. Lihat https://hockeyapp.net untuk detail lebih lanjut tentang produk. Ini adalah seperti apa di dasbor hockeyapp:

Seperti yang Anda lihat, ada bangunan yang berbeda untuk konfigurasi CI Build yang berbeda dan semua jenis build. Orang -orang hockeyapp cukup baik untuk memberi saya akun gratis untuk menunjukkan penggunaan alat mereka.
Ulasan PlayStore di Slack
Menggunakan Review Bot untuk ini (https://reviewbot.io/?utm_source=github&utm_medium=athkalia-just-another-android-app) Tidak banyak yang bisa dikatakan, hanya alat super sederhana yang menyelesaikan pekerjaan. Ketika sebuah ulasan datang, terlihat seperti ini:

Peta jalan
- Tingkatkan ke Gradle versi terbaru
- Otentikasi sidik jari
- Perpustakaan Konduktor
Mengirimkan PRS
Pastikan gradlew check perintah berhasil selesai sebelum membuat PR. Perintah ini menjalankan semua tes untuk semua varian, ditambah 4 alat analisis statis: lint, checsktyle, pmd, findbugs.
Daftar barang yang tidak akan saya tambahkan, jangan ragu untuk berkontribusi jika Anda suka semua ini!
- Jalankan cakupan uji dalam pengujian cloud firebase, ambil laporan, (mungkin menggabungkannya dengan laporan cakupan tes unit), dan memberikan pelaporan kembali ke server CI. Ini akan membutuhkan membayar untuk ember S3, dan saya tidak yakin tentang kegunaan melacak ini untuk jujur.
- Otomatis lebih banyak rilis, seperti rilis penandaan, menggabungkan kembali untuk mengembangkan dll. Persyaratan di sekitar ini sangat spesifik proyek, dan mengingat bahwa mungkin ada konflik dll, tidak layak diotomatisasi untuk saat ini.
- Tangkapan layar otomatis melalui alat "fastlane - screengrab" (https://github.com/fastlane/fastlane/tree/master/screengrab) Mereka tidak mendukung windows dan saya tidak memiliki mac :(
Setiap permintaan umpan balik/tarik diterima!
Anda dapat menangkap saya di www.sakiskaliakoudas.com