Perpustakaan menu debug yang cerdas, andal, dan sangat dapat disesuaikan untuk aplikasi Android yang mendukung perekaman layar, pencatatan aktivitas jaringan, menghasilkan laporan bug, dan banyak fitur berguna lainnya.
Kloning repositori ini, pilih varian build dan jalankan konfigurasi aplikasi . Seharusnya terlihat seperti ini:
Aplikasi demo ini juga berisi instruksi tentang cara mengatur Beagle dan bagaimana menerapkan berbagai fitur yang sedang dipamerkan. Anda harus mempertimbangkan untuk mencobanya jika Anda tertarik untuk menggunakan perpustakaan di proyek Anda. Jika Anda tidak ingin membangunnya sendiri, Anda juga dapat mengunduhnya dari Play Store:
Tutorial dalam aplikasi mencakup segala sesuatu dari readme ini, tetapi lebih detail. Cara lain untuk mendapatkan gambaran tentang apa yang bisa dicapai dengan perpustakaan adalah artikel ini, yang menghadirkan berbagai masalah yang dapat diselesaikan dengan Beagle.
Jika dinding teks di bawah ini terlalu panjang untuk selera Anda, lihat inti ini yang berisi semua kode yang Anda butuhkan untuk konfigurasi yang bagus. Jika tidak, mari kita lakukan langkah demi langkah:
Pastikan bahwa berikut ini adalah bagian dari file build.gradle tingkat proyek Anda:
allprojects {
repositories {
…
mavenCentral()
}
}
UI aktual dari menu debug dapat ditampilkan dalam berbagai cara, yang ditentukan oleh akhiran ketergantungan. Versi berikut ada:
DebugMenuView
adalah tanggung jawab Anda (tidak disarankan: Shake To Open, Beagle.show()
, Beagle.hide()
, VisibilityListener
terkait serta logika penanganan inset tidak akan berhasil di luar kotak).Jadi, misalnya, jika Anda lebih suka laci UI, sesuatu seperti berikut ini perlu ditambahkan ke file build.gradle tingkat aplikasi Anda (periksa widget di bawah cuplikan kode untuk versi terbaru):
dependencies {
…
def beagleVersion = " 2.9.8 "
debugImplementation " io.github.pandulapeter.beagle:ui-drawer: $b eagleVersion "
releaseImplementation " io.github.pandulapeter.beagle:noop: $b eagleVersion "
}
Versi terbaru adalah:
Catatan : Dalam hal Laci UI, jika Anda telah menimpa metode onBackPressed()
Activity
, Anda mungkin melihat bahwa penanganan navigasi punggung default tidak selalu berfungsi seperti yang diharapkan. Untuk memperbaikinya, dalam setiap Activity
onBackPressed()
Anda harus memeriksa bahwa Beagle.hide()
mengembalikan false sebelum melakukan cek lain atau memanggil implementasi super.
Hanya satu baris kode, lebih disukai dalam metode onCreate()
Application
:
Beagle .initialize( this )
Secara opsional Anda dapat menambahkan parameter berikut ke fungsi ini:
themeResourceId
, jika yang digunakan oleh Application
/ Activity
tidak cocok. Catatan: Disarankan untuk memperluas tema materi .NoActionBar
.Secara default Anda dapat menjemput Beagle dengan mengguncang perangkat.
Setelah ini sejumlah modul harus disediakan, tetapi konfigurasi ini dapat diubah kapan saja (dari utas apa pun) dan UI akan secara otomatis diperbarui. Cara paling sederhana untuk melakukan ini adalah dengan menelepon:
Beagle .set(module1, module2, …)
Pada titik ini Anda harus mengetahui dua opsi:
Lihatlah aplikasi showcase untuk beberapa ide tentang apa yang mungkin dengan modul bawaan atau untuk alat interaktif yang dapat digunakan untuk mempratinjau konfigurasi modul apa pun dan menghasilkan kode untuk itu. Panduan yang lebih visual untuk beberapa kemungkinan adalah artikel ini.
Berikut adalah contoh minimal yang harus berfungsi untuk sebagian besar proyek:
Beagle .set(
HeaderModule (
title = getString( R .string.app_name),
subtitle = BuildConfig . APPLICATION_ID ,
text = " ${ BuildConfig . BUILD_TYPE } v ${ BuildConfig . VERSION_NAME } ( ${ BuildConfig . VERSION_CODE } ) "
),
AppInfoButtonModule (),
DeveloperOptionsButtonModule (),
PaddingModule (),
TextModule ( " General " , TextModule . Type . SECTION_HEADER ),
KeylineOverlaySwitchModule (),
AnimationDurationSwitchModule (),
ScreenCaptureToolboxModule (),
DividerModule (),
TextModule ( " Logs " , TextModule . Type . SECTION_HEADER ),
NetworkLogListModule (), // Might require additional setup, see below
LogListModule (), // Might require additional setup, see below
LifecycleLogListModule (),
DividerModule (),
TextModule ( " Other " , TextModule . Type . SECTION_HEADER ),
DeviceInfoModule (),
BugReportButtonModule ()
)
Jika Anda perlu menambahkan modul sementara, Beagle.add()
memiliki parameter lifecycleOwner
opsional yang secara otomatis menghapus modul yang ditentukan setelah siklus hidup yang disediakan selesai. Menelepon Beagle.remove()
dengan modul ID-S juga merupakan opsi.
Saat memanggil Beagle.log()
adalah cara paling sederhana untuk menambahkan item ke LoglistModule, solusi khusus diperlukan untuk mengakses fungsi ini dari modul Kotlin murni. Kasus penggunaan yang sering sering digunakan adalah integrasi dengan kayu.
Untuk mengakses fungsi yang sama dengan yang disediakan Beagle.log()
dari modul Kotlin / Java murni, pertama Anda perlu menambahkan yang berikut ini ke modul yang dimaksud:
dependencies {
…
api " io.github.pandulapeter.beagle:log: $b eagleVersion "
// Alternative for Android modules:
// debugApi "io.github.pandulapeter.beagle:log:$beagleVersion"
// releaseApi "io.github.pandulapeter.beagle:log-noop:$beagleVersion"
}
Perpustakaan ini menyediakan objek BeagleLogger
yang perlu dihubungkan ke perpustakaan utama ketika diinisialisasi dalam kelas Application
:
Beagle .initialize(
…
behavior = Behavior (
…
logBehavior = Behavior . LogBehavior (
loggers = listOf ( BeagleLogger ),
…
)
)
)
Untuk menambahkan pesan log, sekarang Anda dapat menghubungi yang berikut:
BeagleLogger .log(…)
Daftar pesan akan digabungkan dengan yang dicatat menggunakan fungsi Beagle.log()
biasa (kecuali jika disaring oleh tag mereka) dan dapat ditampilkan menggunakan LoglistModule. Anda juga dapat menggunakan BeagleLogger.clearLogEntries()
jika Anda tidak dapat mengakses Beagle.clearLogEntries()
.
Untuk secara otomatis menambahkan acara yang dicatat dengan kayu ke menu debug, menanam pohon khusus adalah solusi paling sederhana:
Timber .plant(
object : Timber . Tree () {
override fun log ( priority : Int , tag : String? , message : String , t : Throwable ? ) =
Beagle .log( " [ $tag ] $message " , " Timber " , t?.stackTraceToString())
}
)
Untuk membuat LoglistModule khusus yang hanya menampilkan log ini, cukup atur parameter konstruktor label modul ke "kayu".
Tidak menggabungkan pencegat jaringan dengan perpustakaan utama terutama dilakukan untuk memberikan ketergantungan Kotlin murni yang tidak menggunakan Android SDK, mirip dengan solusi logger yang dijelaskan di atas. Saat ini Beagle hanya dapat menghubungkan ke perpustakaan jaringan OKHTTP untuk menyediakan konten untuk NetworkLogListModule, tetapi secara manual memanggil Beagle.logNetworkEvent()
selalu menjadi pilihan.
Tambahkan yang berikut ke modul di mana logika jaringan Anda diimplementasikan:
dependencies {
…
api " io.github.pandulapeter.beagle:log-okhttp: $b eagleVersion "
// Alternative for Android modules:
// debugApi "io.github.pandulapeter.beagle:log-okhttp:$beagleVersion"
// releaseApi "io.github.pandulapeter.beagle:log-okhttp-noop:$beagleVersion"
}
Ini akan memperkenalkan objek BeagleOkHttpLogger
yang pertama -tama perlu terhubung ke perpustakaan utama, saat diinisialisasi:
Beagle .initialize(
…
behavior = Behavior (
…
networkLogBehavior = Behavior . NetworkLogBehavior (
networkLoggers = listOf ( BeagleOkHttpLogger ),
…
)
)
)
Langkah terakhir adalah menyiapkan Interceptor
(casting canggung ada untuk memastikan implementasi NOOP tidak melakukan apa pun saat masih memiliki API publik yang sama):
val client = OkHttpClient . Builder ()
…
. apply { ( BeagleOkHttpLogger .logger as ? Interceptor ? )?. let { addInterceptor(it) } }
.build()
Perpustakaan dapat mencegat pengecualian yang tidak tertutup dan menampilkan jejak tumpukan mereka dalam dialog. Pengguna akan dapat berbagi laporan crash menggunakan layar pelaporan bug yang dibuka secara otomatis. Fungsionalitas ini dicapai melalui ketergantungan terpisah yang harus ditambahkan ke modul utama (di mana Beagle diinisialisasi):
dependencies {
…
debugImplementation " io.github.pandulapeter.beagle:log-crash: $b eagleVersion "
releaseImplementation " io.github.pandulapeter.beagle:log-crash-noop: $b eagleVersion "
}
Setelah dependensi ditambahkan, objek BeagleCrashLogger
yang baru diperkenalkan harus dihubungkan ke perpustakaan utama:
Beagle .initialize(
…
behavior = Behavior (
…
bugReportingBehavior = Behavior . BugReportingBehavior (
crashLoggers = listOf ( BeagleCrashLogger ),
…
)
)
)
Menggunakan fitur ini secara bersamaan dengan solusi pelaporan crash lainnya bisa tidak dapat diandalkan.
Juga, harap dicatat bahwa dengan memperkenalkan ketergantungan log-crash
, aktivitas pelaporan bug Beagle sekarang akan berjalan dalam proses yang terpisah (Firebase misalnya membutuhkan panggilan inisialisasi khusus untuk aplikasi multi-proses).
Implementasi noop
dari setiap artefak publik adalah cara default untuk tidak termasuk logika terkait beagle dalam rilis produksi Anda. Meskipun ini harus cukup baik untuk sebagian besar proyek, ini dapat ditingkatkan dengan membuat modul pembungkus terpisah untuk menu debug. Ini berarti menyembunyikan setiap panggilan ke Beagle di belakang antarmuka yang memiliki implementasi kosong dalam pembuatan rilis. Pendekatan ini memiliki manfaat dan kelemahannya sendiri:
noop
dalam konfigurasi Anda saat iniinitialize()
di kelas Application
khusus Anda, dan kelas itu terdaftar dengan benar dalam manifesFragmentActivity
(misalnya, AppCompatActivity
adalah pilihan yang baik). Watch out, jika Anda menggunakan template Empty Compose Activity
dari Android Studio, Anda harus mengubah kelas induk default! Secara default Beagle menggunakan tema Activity
saat ini. Namun, itu membutuhkan tema material untuk bekerja, jadi jika Anda memiliki kecelakaan yang disebabkan oleh berbagai atribut tema yang tidak ditemukan, mengganti tema menu debug dengan properti themeResourceId
dari instance penampilan yang disediakan selama inisialisasi dengan tema material.
Beagle bekerja dengan menambahkan Fragment
di atas tata letak setiap Activity
. Terkadang ini tidak perlu atau tidak mungkin. Sementara perpustakaan dilengkapi dengan daftar nama paket Activity
yang dikecualikan, Anda dapat memberikan penyaringan tambahan jika diperlukan, dengan menggunakan properti Lambda shouldAddDebugMenu
oleh inisialisasi yang disediakan selama inisialisasi.
Tetapkan tema materi .NoActionBar
untuk properti themeResourceId
dari contoh penampilan yang disediakan selama inisialisasi.
Semua fungsi publik didokumentasikan dengan KDOC. File Beaglecontract adalah awal yang baik untuk mempelajari semua kemampuan bawaan. Untuk informasi tentang modul individual, lihat header kelas yang relevan.
Jika Anda tertarik dengan apa yang ada di bawah tenda, dokumen ini dapat membantu saat menavigasi kode sumber.
Lihat halaman rilis untuk perubahan di setiap versi.
Perpustakaan menggunakan versi semantik: Major.minor.patch di mana perubahan patch hanya berisi perbaikan bug, perubahan kecil menambahkan fitur baru dan perubahan besar memperkenalkan modifikasi pemecahan ke API.
Lihat halaman masalah untuk daftar masalah yang diketahui dan untuk peningkatan yang direncanakan perpustakaan.
Jangan ragu untuk membuka masalah baru jika Anda menemukan bug atau jika Anda memiliki pertanyaan / permintaan fitur!
Jika Anda menemukan pekerjaan saya berguna dan sedang mempertimbangkan sumbangan kecil, bagian tentang aplikasi showcase memiliki opsi untuk Anda lakukan. Terima kasih sebelumnya!
Copyright 2022 Pandula Péter
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.