de Ayusch Jain

Cum să vă conectați mai eficient cu Timber

Cum sa va conectati mai eficient cu Timber

Înregistrarea este unul dintre cele mai utilizate utilitare din Android cadru. Este foarte util în depanarea codului atunci când depanarea prin punct de întrerupere nu va funcționa.

În general, este o bună practică să plasați instrucțiunile Jurnal în codul dvs. Aceste declarații vă ajută să țineți o evidență a controlului fluxului în aplicația dvs. În mod similar, nu este recomandat să aveți declarații jurnal în codul dvs. de lansare, deoarece aceste declarații jurnal pot fi citite de oricine își conectează telefonul la un computer. Deci, atunci când lansați aplicația în magazinul de jocuri, este recomandat să eliminați toate declarațiile jurnal din codul dvs.

Dar aceasta poate fi o adevărată durere. Există atât de multe instrucțiuni de jurnal peste tot codul dvs. Acum trebuie să le găsiți pe fiecare și să o eliminați din codul dvs. pentru versiunea de lansare.

O altă problemă cu mecanismul de înregistrare implicit este că trebuie să treceți TAG de fiecare dată când scrieți o instrucțiune de jurnal.

ad-banner

Nu ar fi minunat dacă declarațiile jurnal s-ar dezactiva automat atunci când sunt în producție? Nu ar fi grozav dacă declarațiile jurnal preluează automat fișierul ETICHETĂ/ classname în timp ce vă conectați și v-ați putea concentra pe scrierea unui cod mai bun?

Ei bine, probleme precum acestea și multe altele sunt rezolvate printr-o bibliotecă de înregistrare mai bună în Android, numită Cherestea (de Jake Wharton).

Este o bibliotecă ușoară, ușor de utilizat. Se ocupă de cea mai mare parte a întreținerii pe care trebuie să o faceți în timp ce vă jucați, astfel încât să vă puteți concentra mai mult pe scrierea unui cod excelent și mai puțin pe lucrurile de întreținere.

Să mergem mai departe și să creăm un exemplu de aplicație pentru a vedea cum puteți include Cherestea în dumneavoastră aplicație Android și vă ușurează viața de exploatare.

Noțiuni de bază

Vom crea o aplicație Android simplă cu 4 butoane. Fiecare buton ar imprima instrucțiuni de jurnal de prioritate diferite pe consolă.

Creați un nou proiect în Android și adăugați o dependență pentru Timber în fișierul build.gradle la nivel de aplicație. La momentul scrierii acestui articol, aceasta este cea mai recentă versiune de dependență pentru lemn:

implementation 'com.jakewharton.timber:timber:4.7.1'

Inițializarea lemnului

Odată cu descărcarea dependenței, acum este timpul să inițializăm biblioteca de lemn. Cel mai bun loc pentru inițializarea lemnului este în clasa de aplicații, care va fi activă pe toată durata de viață a aplicației. Deci, haideți să creăm o clasă de aplicație personalizată și să o inițializăm Biblioteca de cherestea în ea:

class MainApplication : Application() {    override fun onCreate() {        super.onCreate()        if(BuildConfig.DEBUG){            Timber.plant(Timber.DebugTree())        }    }}

Crearea MainActivity

Să creăm acum MainActivity adăugând 4 butoane și setând pe ascultători de clic pe fiecare dintre ele. Iată fișierul meu activity_main.xml. Folosesc ConstraintLayout ca aspect rădăcină și includ 4 butoane fiecare pentru diferite niveluri de înregistrare.

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout        xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        xmlns:app="http://schemas.android.com/apk/res-auto"        android:layout_width="match_parent"        android:layout_height="match_parent"        tools:context=".MainActivity">
    <Button            android:text="Error Log"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/btn_error" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp"            app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="108dp"            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.498"/>    <Button            android:text="Info Log"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/btn_info" android:layout_marginTop="64dp"            app:layout_constraintTop_toBottomOf="@+id/btn_error" app:layout_constraintStart_toStartOf="parent"            android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"            app:layout_constraintHorizontal_bias="0.498"/>    <Button            android:text="Debug Log"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/btn_debug" android:layout_marginTop="72dp"            app:layout_constraintTop_toBottomOf="@+id/btn_info" app:layout_constraintStart_toStartOf="parent"            android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"    />    <Button            android:text="Verbose Log"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/btn_verbose" android:layout_marginTop="68dp"            app:layout_constraintTop_toBottomOf="@+id/btn_debug" app:layout_constraintStart_toStartOf="parent"            android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"            android:layout_marginBottom="8dp"            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.061"/></android.support.constraint.ConstraintLayout>

Acum este timpul să setați ascultătorii de clicuri pe aceste butoane și să imprimați o declarație de jurnal de fiecare dată când se face clic pe un buton. Folosesc legăturile sintetice ale kotlin în loc de apeluri findViewById obișnuite sau Butterknife. Aici e al meu MainActivity.kt fişier:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)
        btn_error.setOnClickListener {            onClickedError()        }
        btn_info.setOnClickListener {            onInfoClicked()        }
        btn_debug.setOnClickListener {            onDebugClicked()        }
        btn_verbose.setOnClickListener {            onVerboseClicked()        }    }
    private fun onVerboseClicked() {        Timber.v("On Verbose Clicked")    }
    private fun onDebugClicked() {        Timber.d("On Debug Clicked.")    }
    private fun onInfoClicked() {        Timber.i("On Info clicked.")    }
    private fun onClickedError() {        Timber.e("On Error Clicked.")    }
}

Observați cum nu a trebuit să inițializăm nicio variabilă TAG din clasa noastră, Timber o face automat pentru dvs.

Personalizarea lemnului pentru depanare și lansare

Acum, aici este strălucirea Lemnuluis. Ceea ce am făcut până acum nu a fost nimic grozav, doar imprimând declarațiile jurnalului pe clicurile de buton. Dar, după cum știți, conectarea la producție nu este o idee bună. Vom scrie cod pentru a dezactiva jurnalele pentru producție, menținându-le activate în timpul modului de depanare.

Vom scrie un bloc if pentru a verifica dacă aplicația noastră este în modul de depanare și pentru a activa înregistrarea pentru aceasta. Dacă nu, atunci vrem să inițializăm Timber folosind un copac personalizat.

Iată modificările MainApplication.kt clasă:

class MainApplication : Application() {    override fun onCreate() {        super.onCreate()        if (BuildConfig.DEBUG) {            Timber.plant(object : Timber.DebugTree() {                override fun createStackElementTag(element: StackTraceElement): String? {                    return String.format(                        "Class:%s: Line: %s, Method: %s",                        super.createStackElementTag(element),                        element.lineNumber,                        element.methodName                    )                }            })        } else {            Timber.plant(ReleaseTree())        }    }}

După cum puteți vedea, am inițializat cherestea folosind un produs personalizat ReleaseTree când este în modul de eliberare. Acum să mergem mai departe și să creăm propriul nostru arbore de lansare.

Crearea unui arbore personalizat

Crearea unui arbore de lansare este destul de simplă. Creați o nouă clasă Kotlin și extindeți-o din Timber.Tree. Implementați toate funcțiile abstracte și sunteți bine să mergeți.

Iată a mea ReleaseTree.kt:

class ReleaseTree : @NotNull Timber.Tree() {    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {        if (priority == Log.ERROR || priority == Log.WARN){            //SEND ERROR REPORTS TO YOUR Crashlytics.        }    }
}

După cum puteți vedea, ori de câte ori există o eroare, putem trimite Buturuga la un serviciu online precum Firebase CrashAnalytics sau Crashlytics și să nu vă deconectați de la producție.

Rezultat

1611917587 699 Cum sa va conectati mai eficient cu Timber
sursa: https://ayusch.com

Avantajele utilizării Lemnului versus jurnalizarea Android

Să ne uităm la unele dintre avantajele utilizării bibliotecii Timber în locul utilitarului implicit Log de Android sdk.

  • Nu este nevoie să vă faceți griji cu privire la TAGS: Lemnul generează TAG-uri automat pentru dvs., astfel încât să nu vă faceți griji cu privire la includerea unui TAG global în fiecare clasă.
  • Nu este nevoie să eliminați manual instrucțiunile jurnal: După cum s-a arătat deja, este foarte ușor să dezactivați jurnalizarea pentru aplicațiile de lansare. Prin urmare, nu mai trebuie să parcurgeți întregul cod și să eliminați manual toate jurnalele.
  • Comportament personalizat la producție: În versiunile de producție, nu doriți să vă conectați, deși cu siguranță doriți să înregistrați orice blocări care ar putea apărea. Puteți implementa acest lucru utilizând un arbore de depanare personalizat (așa cum se arată mai sus) care, în loc să se conecteze la logcat, trimite jurnalele către serviciul dvs. crashlytics.
  • Meta-date personalizate: Puteți include metadate personalizate cu declarațiile dvs. de jurnal. De exemplu, am adăugat numele clasei, numărul liniei și numele metodei din care se imprimă declarația jurnal în implementarea de mai sus. Dacă aveți aceste date la dispoziție, puteți face depanarea mai ușoară.
  • Ușoare: Nu mărește numărul de aplicații / metode cu mult. Biblioteca cu adevărat ușoară, deoarece este doar o învelitoare peste utilitarul de jurnal deja existent.

Concluzie

De mult timp ignorasem utilizarea declarațiilor de jurnal și tipăream jurnale mai bune. Pe măsură ce codul meu a devenit mai mare și problemele au devenit mai complexe, mi-am dat seama că trebuie să adopt rutine de depanare mai bune și mai eficiente. Prin urmare, utilizarea lemnului este un pas în direcția corectă.

*Important*: Am creat un SLACK spațiu de lucru pentru dezvoltatori de telefonie mobilă, unde putem împărtăși învățăturile noastre despre tot ce este mai recent în tehnologie, în special în Dezvoltare Android, RxJava, Kotlin, Flutter și, în general, dezvoltarea mobilă.

Faceți clic pe acest link pentru a vă alătura spațiului de lucru slack. Este absolut gratuit!

Acest articol a fost inițial postat la https://ayusch.com/timber-for-android

Îți place ce ai citit? Nu uitați să distribuiți această postare pe Facebook, Whatsapp, și LinkedIn.

Poți să mă urmărești mai departe LinkedIn, Quora, Stare de nervozitate, și Instagram unde eu Răspuns întrebări legate de Dezvoltare mobilă, în special Android și Flutter.