Лучшее ведение журнала с помощью библиотеки Timber в Android

Опубликовано: 2 Сентября, 2022

В этой статье мы создадим приложение на 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");
    }
}