Лучшее ведение журнала с помощью библиотеки Timber в Android
В этой статье мы создадим приложение на Android для реализации служебного класса ведения журнала, который лучше, чем класс Log по умолчанию для Android. Для этого мы будем использовать Timber Library — небольшой регистратор с расширяемым API. Как разработчики Android, мы используем множество операторов журнала в наших проектах для создания выходных данных для тестирования нашего приложения на разных этапах. Журналы бывают разных типов, например Verbose, Debug, Warn, Info, Error. Мы используем всевозможные операторы журнала в нашем приложении для поиска ошибок и отладки. Как только приложение будет готово к выпуску, нам нужно удалить все операторы журнала, чтобы сгенерированный APK не содержал никаких дополнительных данных приложения. Для решения этой проблемы у нас есть несколько способов:
- Ведение журнала по состоянию
- Прогард
- Древесина
Ведение журнала по состоянию
Используя этот метод, мы проверяем уровень, для которого включен регистратор, а затем записываем сообщение на этот уровень. Нам просто нужно создать логическую переменную в нашем классе Application для проверки журналирования. Используйте это логическое условие перед каждым оператором журнала в приложении и перед выпуском приложения измените его на isDebug = false. Ниже приведен фрагмент кода класса Application.
Java
import android.app.Application; public class LogApplication extends Application { public static boolean checkDebug; @Override public void onCreate() { super .onCreate(); checkDebug = true ; } } |
Kotlin
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { var checkDebug = false override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) setContentView(R.layout.activity_main) checkDebug = true } } |
Прогард
ProGuard используется для избавления от неиспользуемых кодов. Здесь мы можем использовать его для удаления операторов журнала в сборке выпуска. Добавьте методы журнала, которые вы хотите удалить в сборке выпуска, в proguard-android-optimize.txt. Откройте этот файл из Gradle Scripts и добавьте все операторы журнала, которые необходимо удалить при выпуске. Ниже приведен фрагмент кода
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int d(…);
public static int w(…);
public static int v(…);
public static int i(…);
}
Древесина
Именно здесь появляется библиотека Timber Logging, которая упрощает утомительную задачу, автоматически генерируя теги и впоследствии удаляя журналы из сгенерированных APK. Давайте обсудим интеграцию Timber в наш Android-проект.
Пошаговая реализация
Шаг 1: Добавьте зависимость
Timber — это библиотека с открытым исходным кодом, созданная Джейком Уортоном. Чтобы добавить его зависимость, откройте файл build.gradle и добавьте —
implementation ‘com.jakewharton.timber:timber:4.7.1’
и синхронизировать проект.
Шаг 2: Создайте класс приложения
Нам нужно создать отдельный базовый класс для приложения, чтобы библиотеку Timber можно было использовать во всех активностях. Чтобы инициализировать древесину сразу после запуска приложения, лучше всего хранить ее в классе приложения.
Java
import android.app.Application; import timber.log.Timber; public class MyTimber extends Application { @Override public void onCreate() { super .onCreate(); // initialize timber in application class Timber.plant( new Timber.DebugTree()); } } |
Kotlin
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import timber.log.Timber import timber.log.Timber.DebugTree class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) setContentView(R.layout.activity_main) // initialize timber in application class Timber.plant(DebugTree()) } } |
После создания класса приложения измените класс приложения по умолчанию в файле AndroiManifest.xml.
XML
<? xml version = "1.0" encoding = "utf-8" ?> <application android:name = ".MyTimber" android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:roundIcon = "@mipmap/ic_launcher_round" android:supportsRtl = "true" android:theme = "@style/Theme.TimberLogger" > < activity android:name = ".MainActivity" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > </ manifest > |
Шаг 3: Используйте древесину для ведения журнала
Теперь мы можем использовать древесину для входа во все наши действия с Android.
Java
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import timber.log.Timber; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); Timber.i( "Timber logging is ready" ); } } |
Kotlin
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import timber.log.Timber class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) setContentView(R.layout.activity_main) Timber.i( "Timber logging is ready" ); } } |