web-dev-qa-db-ja.com

ダガー+グラドルの設定方法

プロジェクトがあり、gradleの依存関係に移行していますが、gradleを使用して短剣をセットアップしようとすると問題が発生します。最初にコンパイルすると完全に機能します(またはクリーンアップした場合)が、2回試行すると、次のようなエラーが発生します。 :

エラー:(13、14)エラー:クラスが重複しています:com.myapp.Android.application.InjectingApplication $ InjectingApplicationModule $$ ModuleAdapter

Android-aptプラグインを使用して、ドキュメントのように構成してみましたが、同じエラーが発生します( https://bitbucket.org/hvisser/Android-apt/overview

コンパイルのこのチュートリアル( https://github.com/frankdu/Android-gradle-dagger-tutorial )のように、代わりに提供された依存関係を使用してみますが、今のところうまくいきません。

ダガーとグラドルを構成する方法について何かアイデアはありますか?

[〜#〜]編集[〜#〜]

私のbuild.gradleはこのようになります

apply plugin: 'Android'
apply plugin: 'Android-apt'

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.2"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
        packageName "com.myapp.Android"

    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}


dependencies {
    compile project(':volley')
    apt 'com.squareup.dagger:dagger-compiler:1.2.0'
    compile 'com.squareup.dagger:dagger:1.2.0'
}

そして、私のトップレベルのbuild.gradleはこのようになります

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:0.9.+'
        classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

編集#2:

@Marcoが幸運を示唆していないので、もう一度提供を試してみました。この問題を引き起こしている可能性があるライブラリまたはGradleのバージョンがあるかどうかはわかりません。現在1.10を使用しています。明るい面では、それを機能させる方法を見つけましたが、提供されたステートメントを追加するだけでそれを実行したいです。私がそれをした方法は古い方法です:

Apt構成を定義する

configurations {
     apt
}

daggerコンパイラーlibを追加

apt 'com.squareup.dagger:dagger-compiler:1.2.0'

そして、このフックをapplicationVariantに実装します。これは、私の知る限り、Android-aptが同様のことを実行します。これは理にかなっていますか?どうして?

def getSourceSetName(variant) {
    return new File(variant.dirName).getName();
}

Android.applicationVariants.each { variant ->
    def aptOutputDir = project.file("build/source/apt")
    def aptOutput = new File(aptOutputDir, variant.dirName)


    Android.sourceSets[getSourceSetName(variant)].Java.srcDirs+= aptOutput.getPath()

    variant.javaCompile.options.compilerArgs += [
            '-processorpath', configurations.apt.getAsPath(),
            '-s', aptOutput
    ]

    variant.javaCompile.source = variant.javaCompile.source.filter { p ->
        return !p.getPath().startsWith(aptOutputDir.getPath())
    }

    variant.javaCompile.doFirst {
        aptOutput.mkdirs()
    }
}
18
Necronet

このサンプルでは短剣を使用しています ボレーの例 。ダガーで問題は発生しておらず、コンパイラーを使用しています:

provided 'com.squareup.dagger:dagger-compiler:1.2.1'
17
Marco RS

Gradleプラグインを(root/gradle)クラスパス 'com.Android.tools.build:gradle:2.2.0'に更新します

アプリ/ gradle

compile 'com.google.dagger:dagger:2.4'
annotationProcessor 'com.google.dagger:dagger-compiler:2.4'
1
Sam

私の仕事です。

ステップ1:
このコードをあなたに追加してくださいbuild.gradle

provided 'com.squareup.dagger:dagger-compiler:1.2.2'

ステップ2:
ソースコードフォルダを追加app/genあなたのプロジェクトに。したがって、このコードをあなたに追加できますapp/build.gradlesrc/main/Javaはプロジェクトのコアコードフォルダです)

sourceSets.main {
    Java.srcDirs = ['src/main/Java', 'gen']
}
0
xiezefan