Laporan Kerusakan Android Otomatis dengan ACRA dan Cloudant

Diterbitkan: 2022-03-11

Membuat aplikasi Android dasar itu mudah. Membuat aplikasi Android yang andal, skalabel, dan tangguh, di sisi lain, bisa sangat menantang.

Dengan ribuan perangkat yang tersedia dipompa keluar dari banyak produsen yang berbeda, dengan asumsi bahwa satu bagian kode akan bekerja dengan andal di seluruh ponsel adalah hal yang paling naif.

Segmentasi adalah tradeoff terbesar untuk memiliki platform terbuka, dan kami membayar harga dalam mata uang pemeliharaan kode, yang berlanjut lama setelah aplikasi melewati tahap produksi.

Mengapa pelaporan kesalahan Android penting

Jadi, apa yang terjadi ketika aplikasi Android mogok atau menjadi tidak responsif? Nah, dialog "Tutup Paksa" muncul, memberi tahu pengguna bahwa ada yang tidak beres. Jika aplikasi diunduh melalui Google Play, pengguna akan diminta untuk melaporkan kerusakan dengan mengirimkan laporan kerusakan Android yang terperinci (termasuk waktu, model ponsel, versi Android, pelacakan tumpukan, dll.) yang dapat Anda (pengembang) lihat di Konsol Pengembang, memungkinkan Anda untuk mengatasi bug penyebab.

Ini semua terdengar sangat bagus—tetapi ada masalah besar dengan pelaporan kesalahan default Android: pengguna cenderung tidak menggunakannya, membuat pengembang tidak tahu apa-apa tentang status aplikasi mereka.

Ini semua terdengar sangat bagus—tetapi ada masalah besar dengan menggunakan pelaporan kesalahan default Android: pengguna cenderung tidak mengambil tindakan saat aplikasi mereka mogok; pada kenyataannya, mayoritas memilih untuk tidak mengirimkan laporan kesalahan Android. Lalu, bagaimana Anda, sebagai pengembang yang teliti, dapat memperoleh wawasan yang andal tentang kerusakan dan kegagalan aplikasi Anda?

Log kerusakan Android yang andal sangat penting ketika pengguna tidak mengirim laporan kerusakan.

Memperkenalkan ACRA

ACRA adalah singkatan dari "Pelaporan Kerusakan Otomatis untuk Android". Ini adalah perpustakaan gratis yang memungkinkan Anda memecahkan masalah 'pelaporan kesalahan manual' dengan beberapa baris kode. Setelah Anda mengimplementasikan perpustakaan dan semuanya telah diinisialisasi dengan benar, Anda akan dapat mengekstrak log kesalahan Android yang sama dengan default Google (ditambah banyak opsi penyesuaian tambahan) secara otomatis dan tanpa mengharuskan pengguna untuk mengambil tindakan.

Di luar itu, ACRA memungkinkan Anda memilih bagaimana Anda ingin memberi tahu pengguna tentang kerusakan Android, dengan default pelaporan latar belakang senyap, dan alternatif termasuk dialog yang disesuaikan.

Sampai saat ini, ACRA didukung oleh Google Spreadsheet, yang berarti Anda dapat menerima semua laporan Anda dalam satu file, yang dihosting secara gratis di akun Google Drive Anda. Sayangnya, Google meminta agar kami tidak menggunakan opsi ini di masa mendatang, jadi kami memiliki beberapa alternatif untuk mengirimkan data laporan kerusakan, beberapa di antaranya akan kami bahas dalam tutorial ini:

  • Email standar (masih membutuhkan interaksi pengguna).
  • Klien email/HTTP khusus (memerlukan penyiapan ekstensif).
  • Back-end khusus (dengan opsi mulai dari solusi gratis hingga komersial).

Dalam artikel ini, kami akan menganalisis salah satu solusi berikut: menghosting laporan ACRA Anda di back-end Cloudant dan memvisualisasikan data dengan acralyzer.

Menyiapkan back-end Cloudant

Hal pertama yang perlu kita lakukan adalah mendaftarkan akun Cloudant. Tentu saja, ada masalah: Layanan Cloudant tidak sepenuhnya gratis, tetapi menurut halaman harga mereka, sangat kecil kemungkinannya Anda akan melebihi batas $5 bulanan (kecuali Anda memiliki basis pengguna yang besar dan banyak bug dalam kode Anda).

Setelah kita mendaftar, kita perlu memahami cara kerjanya. Pada tingkat tinggi, back-end kami akan terdiri dari dua komponen:

  1. Database penyimpanan atau, lebih tepatnya, Apache CouchDB. CouchDB menyimpan datanya dalam format JSON, yang berarti bahwa semua laporan yang dikirim dari perangkat Android harus sesuai dengan format agar dapat dimasukkan sebagai entri. Sisipan basis data adalah permintaan HTTP POST atau PUT sederhana.
  2. Aplikasi web (untuk analisis) atau, lebih tepatnya, CouchApp. Ini adalah aplikasi JavaScript sederhana yang memungkinkan Anda menjalankan kueri dan menampilkan data yang disimpan dalam instans CouchDB.

Agar back-end kami berfungsi dengan baik, kami perlu menyiapkan dua komponen ini. Secara teori, kita bisa membangun database dan aplikasi dari sumber, dan kemudian menggunakan alat untuk menyebarkannya ke back-end kita—tetapi orang-orang baik di ACRA telah melakukannya untuk kita. Jadi pendekatan termudah adalah mereplikasi database jarak jauh dan aplikasi jarak jauh.

Mari kita lanjutkan dan mereplikasi CouchDB ACRA kosong:

  • Pilih bagian 'Replikasi' di dasbor Cloudant Anda.
  • Sebagai database sumber, pilih 'Remote database' dengan http://get.acralyzer.com/distrib-acra-storage sebagai URL.
  • Sebagai database target, pilih 'New database' dan beri nama “acra-{myapp}” (tanpa tanda kutip). Perhatikan bahwa parameter {myapp} harus unik untuk aplikasi Anda, dan nama database harus dimulai dengan “acra-“.
  • Klik 'Replikasi'.

Ini menggambarkan cara menyiapkan back-end Cloudant untuk mengelola pelaporan kerusakan Android.

Dengan demikian, kami telah berhasil mereplikasi database untuk penyimpanan laporan. Selanjutnya, kita perlu mereplikasi CouchApp acralyzer sehingga kita dapat memvisualisasikan data:

  • Pilih bagian 'Replikasi' di dasbor Cloudant Anda.
  • Sebagai database sumber, pilih 'Remote database' dengan http://get.acralyzer.com/distrib-acralyzer sebagai URL.
  • Sebagai database target, pilih 'Database baru' dan beri nama "acralyzer".
  • Klik 'Replikasi'.

Langkah ini terdiri dari mereplikasi aplikasi acra untuk memvisualisasikan data log kerusakan Android.

Catatan : mereplikasi aplikasi acralyzer adalah opsional. Anda tidak akan membutuhkannya jika Anda hanya tertarik untuk menyimpan laporan kerusakan Android Anda, daripada memvisualisasikan datanya (kita akan melihat lebih dekat acralyzer di bagian selanjutnya dari tutorial Android ini). Jika Anda merasa cukup percaya diri dengan keterampilan JavaScript Anda, Anda bahkan dapat menulis aplikasi analitik Anda sendiri! Tapi itu di luar cakupan posting blog ini.

Langkah terakhir dari proses pengaturan awal adalah menambahkan izin keamanan. Cloudant menyediakan lapisan keamanannya sendiri di atas CouchDB dengan kontrol yang lebih baik pada hak individu, jadi untuk menulis laporan ke database kami, kami perlu membuat akun pengguna dengan izin menulis:

  • Pilih bagian 'Database' di dasbor Cloudant Anda.
  • Klik bagian izin (ikon kunci) untuk database acra-{myapp}.
  • Klik 'Buat kunci API'.
  • Tuliskan nama pengguna dan kata sandi yang dihasilkan (kami akan menggunakannya nanti).
  • Tambahkan izin menulis untuk nama pengguna yang dihasilkan.

Tambahkan izin keamanan sehingga log dan laporan kerusakan Android Anda dapat diakses nanti.

Memvisualisasikan laporan kerusakan Android dengan acralyzer

Setelah direplikasi, dasbor acralyzer dapat diakses dengan mudah dengan mengikuti https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard . Saya akui: ini bukan alat analitik tercantik di luar sana, tetapi ini memenuhi tujuannya.

Dari menu atas, Anda dapat memilih database mana yang ingin Anda visualisasikan (dimungkinkan untuk meng-host beberapa database untuk aplikasi yang berbeda dalam satu proyek; ini akan memengaruhi kuota penggunaan Anda) dan melihat pratinjau data di dasbor utama. Misalnya, Anda dapat:

  • Plot jumlah laporan berdasarkan satuan waktu (jam, hari, bulan, dll.).
  • Lihat distribusi laporan menurut metrik khusus Android (versi Android, versi SDK, versi aplikasi, perangkat, dll.).
  • Buat daftar semua laporan kerusakan (dengan jejak tumpukan terperinci) atau lihat semua bug (di sini, "bug" adalah sekelompok laporan identik yang bersumber dari pengguna berbeda).
  • Pratinjau detail untuk satu bug dan atur statusnya sebagai terselesaikan (jika diperbaiki).
  • Bersihkan entri lama atau usang.

Memvisualisasikan data log kerusakan Android bisa sangat membantu untuk meningkatkan aplikasi Anda secara lebih strategis.

Perhatikan bahwa metrik kerusakan Android yang tersedia untuk visualisasi akan bergantung pada laporan yang kami pilih untuk dikirim dari aplikasi kami. ACRA menawarkan berbagai bidang laporan, beberapa di antaranya bisa berukuran cukup besar atau tidak sepenuhnya relevan dengan perbaikan bug. Untuk sebagian besar proyek, bidang laporan yang diperlukan sudah cukup. Ini termasuk:

  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • ANDROID_VERSION
  • NAMA PAKET
  • REPORT_ID
  • MEMBANGUN
  • STACK_TRACE

Menerapkan ACRA di proyek Android Anda

Seperti yang disebutkan sebelumnya dalam tutorial ini, menerapkan ACRA sangat mudah dan hanya membutuhkan beberapa langkah cepat.

Tambahkan ketergantungan

Pertama, kita perlu menyertakan perpustakaan sebagai dependensi dalam salah satu cara berikut:

  • Sebagai file .jar di folder /libs Anda.
  • Sebagai ketergantungan pakar:

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • Sebagai ketergantungan bertahap:

     compile 'ch.acra:acra:XYZ'

Tambahkan kelas Aplikasi

Selanjutnya, kita perlu menambahkan kelas Aplikasi Android ke proyek kita (atau memperbarui kelas yang ada, karena hanya ada satu instance) dan mendeklarasikannya di AndroidManifest.xml:

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

Dan atur ACRA di sana:

 @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); } }

Itu dia! Tentu saja, Anda harus mengganti semua placeholder {myapp} dengan nilai aktual, serta nilai untuk formUriBasicAuthLogin dan formUriBasicAuthPassword .

Seperti yang Anda lihat dari cuplikan kode di atas, kami hanya menggunakan bidang laporan wajib. Jangan ragu untuk menambahkan bidang lain yang mungkin relevan dengan aplikasi Anda.

Anda juga dapat memilih untuk menggunakan PUT daripada POST. Dalam hal ini, REPORT_ID akan ditambahkan ke akhir yang former sebagai parameter.

Terakhir, Anda juga dapat memilih bagaimana pengguna diberi tahu tentang kerusakan aplikasi Android, defaultnya adalah laporan latar belakang senyap. Dalam kasus kami, kami memilih untuk menampilkan pesan Toast yang memberi tahu pengguna bahwa kerusakan telah dilaporkan dan perbaikan bug akan segera tersedia.

Butuh bantuan? Berikut adalah contoh proyek

Untuk melihat ACRA beraksi, saya telah menyiapkan repo acra_example di GitHub. Ini fitur aplikasi sederhana yang menginisialisasi ACRA saat start up dan membiarkan Anda crash dengan menekan tombol (yang kemudian memicu pengecualian pointer nol). Data kerusakan dikirim ke contoh database Cloudant yang dapat divisualisasikan di sini.

Untuk melihat data, masuk dengan kredensial berikut:

  • Nama pengguna: medo
  • Kata sandi: acraexample

Alternatif untuk ACRA

ACRA bukan satu-satunya pilihan untuk pelaporan kesalahan Android otomatis. Karena crash pasti akan terjadi, ada pasar business-to-developer (B2D) besar di luar sana yang mencoba memonetisasi resolusi mereka.

Crittercism, misalnya, adalah platform yang sangat matang untuk pelaporan kerusakan. Itu tampak hebat, menawarkan banyak pilihan untuk analisis data, dan sangat mudah untuk diintegrasikan. Satu-satunya downside: harga, dan uji coba gratis cukup terbatas dalam hal jumlah pengguna aktif, hari penyimpanan data, dan dukungan). BugSense adalah layanan serupa.

Menurut pendapat saya, bagaimanapun, Crashlytics adalah solusi yang unggul. Sampai saat ini, Crashlytics memiliki model freemium (dengan tingkat premium berbayar); tetapi sekarang (setelah diakuisisi oleh Twitter), semua fitur yang sebelumnya premium tersedia secara gratis. Tidak ada biaya penggunaan, biaya, atau batasan. Ini adalah cara pelaporan kesalahan yang disukai untuk banyak perusahaan dan pengembang profil tinggi dan peringkat tinggi, karena sangat mudah digunakan dan menawarkan alat analitik dan visualisasi yang kuat. Ia bahkan terintegrasi dengan IDE paling populer sebagai plugin (misalnya, Eclipse, Android Studio), jadi menambahkan Crashlytics ke aplikasi Anda semudah memilih proyek dan menekan tombol. Plugin ini juga memungkinkan Anda untuk melacak laporan kerusakan dari IDE Anda tanpa harus membuka browser.

Jadi, mengapa menggunakan ACRA ketika ada alternatif lain di luar sana yang terlihat jauh lebih baik dan menawarkan lebih banyak fitur untuk upaya implementasi yang sama? Saya akan memberi Anda dua alasan.

  1. Semua opsi lain ini adalah sumber tertutup, perangkat lunak berpemilik . Bahkan dengan sekeranjang penuh EULA, Anda tidak dapat memastikan dengan tepat bagaimana data Anda dikumpulkan dan ditangani. Di sisi lain, ACRA dan acralyzer adalah proyek sumber terbuka yang dihosting di GitHub yang dapat dengan mudah Anda bagi dan sesuaikan dengan kebutuhan Anda.

  2. Mobilitas data . Katakanlah Anda tidak puas dengan Cloudant. Sangat mudah untuk mereplikasi dan memigrasikan data Anda ke back-end lain. Anda dijamin bahwa data tetap milik Anda .

Seperti banyak pilihan, yang satu ini bermuara pada preferensi dan keakraban pribadi. Lihat utas Google+ ini untuk diskusi lebih lanjut tentang berbagai alternatif yang tersedia untuk membuat aplikasi Anda lebih andal.

Kesimpulannya

ACRA adalah pustaka yang sangat kuat dan sangat dapat disesuaikan yang dapat digunakan bersama Cloudant dan acralyzer untuk mencapai pelaporan kerusakan otomatis dan analitik dasar gratis untuk aplikasi Anda, semuanya untuk upaya implementasi minimal.

Menulis kode Android yang andal membutuhkan banyak pengalaman dan tinjauan ke masa depan, tetapi tidak satu pun dari kita yang benar-benar mahatahu. Bersiaplah untuk crash dan kesalahan yang tidak terduga, dan bersiaplah untuk memperbaiki yang tidak terduga sesegera mungkin. Itulah jenis pekerjaan yang menghasilkan produk hebat dan pengalaman pengguna yang luar biasa.

Terkait: Jadikan Aplikasi Anda Menguntungkan—Manfaatkan Analisis Seluler