Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mendeteksi dan mendiagnosis error

Aplikasi Android error setiap kali terdapat penutupan tidak terduga yang disebabkan oleh pengecualian atau sinyal yang tidak tertangani. Aplikasi yang ditulis menggunakan Java akan error jika aplikasi tersebut memunculkan pengecualian yang tidak tertangani, ditunjukkan oleh class Throwable. Aplikasi yang ditulis menggunakan bahasa kode native akan mengalami error jika terdapat sinyal yang tidak tertangani, seperti SIGSEGV, selama eksekusinya.

Saat aplikasi error, Android menghentikan proses aplikasi tersebut dan menampilkan dialog yang memberi tahu pengguna bahwa aplikasi telah berhenti, seperti yang ditunjukkan pada gambar 1.

Error aplikasi di perangkat Android

Gambar 1. Error aplikasi di perangkat Android

Suatu aplikasi bisa error meskipun tidak berjalan di latar depan. Komponen aplikasi apa pun, bahkan komponen seperti penerima siaran atau penyedia konten yang berjalan di latar belakang, dapat menyebabkan aplikasi error. Error ini kerap membingungkan pengguna karena mereka tidak berinteraksi secara aktif dengan aplikasi Anda.

Jika aplikasi Anda mengalami error, Anda dapat menggunakan panduan di halaman ini untuk mendiagnosis dan memperbaiki masalah. Untuk panduan tentang cara mendiagnosis error dalam aplikasi yang dibuat menggunakan bahasa kode native, lihat Mendiagnosis masalah pada native code.

Mendeteksi masalah

Anda mungkin tidak selalu tahu bahwa pengguna Anda mengalami banyak sekali error dengan aplikasi Anda. Jika Anda sudah memublikasikan aplikasi Anda, Android vitals dapat membantu Anda mengetahui masalahnya.

Android vitals

Android vitals dapat membantu meningkatkan performa aplikasi dengan memberi tahu Anda, melalui Konsol Play, apabila aplikasi Anda menampilkan error berlebihan. Android vitals menganggap error berlebihan jika aplikasi:

  • Menampilkan minimal satu error dalam setidaknya 1,09% sesi hariannya.
  • Menampilkan dua atau lebih error dalam setidaknya 0,18% sesi hariannya.

Sesi harian mengacu pada tanggal selama aplikasi Anda digunakan. Untuk informasi tentang cara Google Play mengumpulkan data Android vitals data, lihat dokumentasi Konsol Play.

Setelah mengetahui bahwa aplikasi Anda mengalami error yang berlebihan, langkah selanjutnya yang harus dilakukan adalah mendiagnosisnya.

Mendiagnosis error

Mengatasi error tidaklah selalu mudah. Namun, jika Anda dapat mengidentifikasi akar masalah error ini, kemungkinan besar Anda dapat menemukan solusinya.

Ada banyak situasi yang dapat menyebabkan error pada aplikasi Anda. Beberapa alasannya jelas, seperti memeriksa nilai null atau string kosong, tetapi alasan lainnya tidak begitu kentara, seperti meneruskan argumen yang tidak valid ke API atau bahkan interaksi multithread yang kompleks.

Membaca pelacakan tumpukan

Langkah pertama untuk memperbaiki error adalah dengan mengidentifikasi tempat terjadinya error. Anda dapat menggunakan pelacakan tumpukan yang tersedia di detail laporan jika Anda menggunakan Konsol Play atau output fitur logcat. Jika Anda tidak memiliki pelacakan tumpukan yang tersedia, Anda harus mereproduksi error tersebut secara lokal, baik dengan menguji aplikasi secara manual atau dengan menghubungi pengguna yang terkena dampak, serta mereproduksinya sembari menggunakan logcat.

Pelacakan berikut menunjukkan contoh error pada aplikasi sampel:

--------- beginning of crash
    AndroidRuntime: FATAL EXCEPTION: main
    Process: com.android.developer.crashsample, PID: 3686
    java.lang.NullPointerException: crash sample
    at com.android.developer.crashsample.MainActivity$1.onClick(MainActivity.java:27)
    at android.view.View.performClick(View.java:6134)
    at android.view.View$PerformClick.run(View.java:23965)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:156)
    at android.app.ActivityThread.main(ActivityThread.java:6440)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:746)
    --------- beginning of system
    

Pelacakan tumpukan menunjukkan dua jenis informasi kritis untuk men-debug error:

  • Jenis pengecualian yang ditampilkan.
  • Bagian dari kode di mana pengecualian ditampilkan.

Jenis pengecualian yang ditampilkan biasanya merupakan petunjuk yang sangat kuat tentang apa yang salah. Perhatikan apakah petunjuk tersebut adalah IOException, OutOfMemoryError, atau yang lainnya, lalu temukan dokumentasi tentang class pengecualian.

Class, metode, file nomor baris dari file sumber tempat pengecualian muncul ditampilkan di baris kedua pelacakan tumpukan. Untuk setiap fungsi yang telah dipanggil, baris lainnya menunjukkan situs panggilan sebelumnya (bernama frame tumpukan). Dengan menjalankan tumpukan dan memeriksa kode, Anda mungkin menemukan tempat yang meneruskan nilai yang salah. Jika kode Anda tidak muncul di pelacakan tumpukan, yang kemungkinan ada di tempat lain, teruskan parameter yang tidak valid ke operasi asinkron. Anda dapat mencari tahu apa yang terjadi dengan memeriksa setiap baris pelacakan tumpukan, menemukan class API apa pun yang Anda gunakan, dan mengonfirmasi bahwa parameter yang Anda teruskan telah benar, serta bahwa Anda memanggilnya dari tempat yang diizinkan.

Untuk informasi selengkapnya tentang error di aplikasi asli, lihat Mendiagnosis masalah pada native code.

Tips untuk mereproduksi error

Anda mungkin tidak dapat mereproduksi masalah hanya dengan memulai emulator atau menghubungkan perangkat Anda ke komputer. Lingkungan pengembangan cenderung memiliki lebih banyak resource, seperti bandwidth, memori, dan penyimpanan. Gunakan jenis pengecualian untuk menentukan resource yang langka, atau menemukan korelasi antara versi Android, jenis perangkat, atau versi aplikasi Anda.

Error memori

Jika Anda memiliki OutOfMemoryError, Anda dapat membuat emulator dengan kapasitas memori yang rendah. Gambar 2 menunjukkan setelan AVD manager di mana Anda dapat mengontrol jumlah memori pada perangkat.

Setelan memori di AVD manager

Gambar 2. Setelan memori di AVD manager

Pengecualian jaringan

Karena pengguna sering berada di dalam atau di luar jangkauan jaringan seluler atau WiFi, pengecualian jaringan dalam aplikasi biasanya tidak boleh dianggap sebagai error, melainkan sebagai kondisi pengoperasian normal yang terjadi secara tidak terduga.

Jika perlu mereproduksi pengecualian jaringan, seperti UnknownHostException, Anda bisa mencoba mengaktifkan mode pesawat saat aplikasi mencoba menggunakan jaringan.

Opsi lainnya adalah dengan mengurangi kualitas jaringan di emulator dengan memilih emulasi kecepatan jaringan dan/atau penundaan jaringan. Anda dapat menggunakan setelan Speed dan Latency di AVD manager, atau dengan memulai emulator dengan flag -netdelay dan -netspeed, seperti yang ditunjukkan pada contoh command line berikut:

emulator -avd [your-avd-image] -netdelay 20000 -netspeed gsm
    

Contoh ini menetapkan penundaan 20 detik di semua permintaan jaringan dan kecepatan upload dan download 14,4 Kbps. Untuk informasi selengkapnya tentang opsi command line untuk emulator, lihat Memulai Emulator dari Command Line.

Membaca dengan logcat

Setelah selesai melakukan langkah-langkah untuk mereproduksi error, Anda dapat menggunakan fitur seperti logcat untuk mendapatkan informasi lebih lanjut.

Output logcat akan menunjukkan pesan log lain yang telah Anda cetak, beserta pesan log lain dari sistem. Jangan lupa untuk menonaktifkan pernyataan Log tambahan apa pun yang telah Anda tambahkan, karena mencetaknya akan memboroskan CPU dan baterai saat aplikasi Anda sedang berjalan.