10

我将 Timber 依赖项添加到我的 Java 核心库模块 build.gradle 文件中:

implementation 'com.jakewharton.timber:timber:4.6.0'

虽然 gradle 同步时没有报错,但我在 Core Library 中看不到或使用 Timber 类。

4

3 回答 3

6

Timber 依赖于 android.util.Log,因此不能在纯 Java 模块中使用。

已经提议将库与 A​​ndroid 解耦,但库的创建者已决定反对。https://github.com/JakeWharton/timber/pull/63

Timber 的 5.0.0-SNAPSHOT 版本现在支持通过使用jdk工件在 Java 模块中使用。

<dependency>
  <groupId>com.jakewharton.timber</groupId>
  <artifactId>timber-jdk</artifactId>
  <version>5.0.0-SNAPSHOT</version>
</dependency>
于 2017-12-01T16:53:59.600 回答
4

如果有人在查看多模块 android 项目的 Timber(没有 android 依赖项)。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框架依赖的情况下实现

于 2019-05-17T09:08:01.627 回答
2

如果你有多模块项目,你可以在纯 Java/Kotlin 中使用 Timber,只需要一点抽象,不需要外部库。

Kotlin 和 Koin 的示例:

在纯 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)
}

在 app 模块中创建 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)
}

在 app 模块中,将 TimberLogger 实现注入到您的假 Timber 中:

val appModule = module {

    single<ILogger> { TimberLogger() }
}

现在您可以简单地从任何地方静态调用 Timber.d("message")。

如果您有 2 个以上的纯模块可以在其中使用 Timber,请考虑创建 Utils 模块并将其包含在其余模块中,以便在任何地方都可以使用它。

于 2020-07-10T20:09:34.377 回答