【问题标题】:Dagger 2 and android Studio: working but can't see generated classesDagger 2 和 android Studio:工作但看不到生成的类
【发布时间】:2015-06-24 13:22:36
【问题描述】:

我正在尝试在 Android Studio 项目中使用 Dagger 2。我使用了 CoffeeMaker 示例。我已经设法使应用程序构建和工作但是: - 我没有成功看到生成的代码。 - 如果我调试,我也看不到它。 - 此外,DaggerCoffeeApp_Coffee 标记为 reed(无法解析符号)

我的 gradle 文件是:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.application'


android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.mateuyabar.android.dagger2test"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false // ignoring some references from dagger-compiler
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'javax.inject:javax.inject:1'
    compile 'javax.annotation:javax.annotation-api:1.2'
    compile 'com.google.dagger:dagger:2.0'
    provided 'com.google.dagger:dagger-compiler:2.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'

}

谢谢

【问题讨论】:

  • 如果它可以构建并且可以工作,为什么还要关心从Dagger 查找生成的文件?
  • 首先,学习理解。第二个调试。
  • 你从哪里得到这个例子的?
  • @JaredBurrows 示例是 Dagger2 站点中的示例。它不适用于 Android,但我刚刚将这些类复制到了一个 Android 项目中。
  • 如果他们的示例不起作用,我建议您提出拉取请求来修复他们的示例。

标签: android android-studio gradle android-gradle-plugin dagger-2


【解决方案1】:

使用 Hugo Visser 的 Android-Apt plugin

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    // the latest version of the android-apt plugin
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
  }
}

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.mateuyabar.android.dagger2test"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false // ignoring some references from dagger-compiler
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'javax.inject:javax.inject:1'
    compile 'javax.annotation:javax.annotation-api:1.2'
    compile 'com.google.dagger:dagger:2.0'
    apt 'com.google.dagger:dagger-compiler:2.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}

还要注意apt 'com.google.dagger:dagger-compiler:2.0' 行。这应该使生成的源对 AS 可见。

【讨论】:

  • 我拥有所有这些,但仍然无法导入类:DaggerMyComponent。您还必须做什么才能生成?
  • 如果您设置正确,它应该可以工作。生成的文件可以在/build/generated/source/apt/找到,所以你可以验证生成是否已经运行。
  • 如果您有多个 gradle 文件,请尝试在最顶层文件中指定依赖项的类路径。对我来说,我有project/build.gradleproject/app/build.gradle。我在app 中应用了插件,但在project 中声明了依赖关系,它对我有用。
  • 不需要apt。 Android Gradle 插件现在支持 annotationProcessor 依赖项,如 dagger 编译器
【解决方案2】:

我偶然发现了同样的问题,在我的情况下,我正在测试新类并尝试将它们分别注入到我的主类中,在这种情况下,Dagger 不会从工厂生成任何 DaggerComponents。

简单地说,记住将进入一个类的所有注入放在一个模块和一个组件中。 你不能在一个类中注入多个 DaggerComponent。 除此之外,这些组件的重点是聚合注入的类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多