Могу ли я использовать Timber Logger в моей библиотеке Java?
Я добавляю зависимость Timber в мой файл build.gradle модуля базовой библиотеки Java:
implementation 'com.jakewharton.timber:timber:4.6.0'
Хотя это и не выдает ошибку при синхронизации gradle, я не вижу или не использую класс Timber в Базовой библиотеке.
4 ответа
Timber зависит от android.util.Log, поэтому его нельзя использовать в чистом Java-модуле.
Было предложено отделить библиотеку от Android, но создатель библиотеки решил отказаться от нее. https://github.com/JakeWharton/timber/pull/63
Если кто-то смотрит на Timber (без зависимости от Android) для проекта android mutli-module. Использоватьtimber-jdk
как показано ниже.
В проекте build.gradle
файл.
allprojects {
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
}
В индивидуальном модуле build.gradle
файл (пример: домен или удаленный модуль)
implementation "com.jakewharton.timber:timber-jdk:5.0.0-SNAPSHOT"
С этим вы сможете реализовать Timber
без зависимости от фреймворка Android
Если у вас есть многомодульный проект, вы можете использовать Timber на чистом Java/Kotlin с небольшой долей абстракции, без внешних библиотек.
Пример с Котлином и Коином:
В чистом модуле kotlin создайте большого самозванца Timber.kt:
interface ILogger {
fun d(message: String)
fun e(message: String)
fun e(throwable: Throwable, message: String)
fun i(message: String)
}
object Timber: ILogger, KoinComponent {
private val logger: ILogger by inject()
override fun d(message: String) = logger.d(message)
override fun e(message: String) = logger.e(message)
override fun e(throwable: Throwable, message: String) = logger.e(throwable, message)
override fun i(message: String) = logger.i(message)
}
В модуле приложения создайте TimberLogger.kt:
import timber.log.Timber
class TimberLogger : ILogger {
override fun d(message: String) = Timber.d(message) // this is real timber this time
override fun e(message: String) = Timber.e(message)
override fun e(throwable: Throwable, message: String) = Timber.e(throwable, message)
override fun i(message: String) = Timber.i(message)
}
В модуле приложения вставьте реализацию TimberLogger в свой поддельный Timber:
val appModule = module {
single<ILogger> { TimberLogger() }
}
Теперь вы можете просто вызвать Timber.d("сообщение") статически из любого места.
Если у вас есть 2+ чистых модуля для использования Timber, подумайте о создании модуля Utils и включите его в остальные, чтобы он был доступен везде.
Попробуйте Arbor: Timber как реализация ведения журнала для Kotlin Multiplatform.