2015-04-17 1 views
23

Я пытаюсь использовать Кинжал 2 в проекте Android Studio. Я использовал пример CoffeeMaker. Однако мне удалось создать сборку и работу приложения: - Мне не удалось увидеть сгенерированный код. - Если я отлаживаю, я не вижу этого ни того, ни другого. - Кроме того DaggerCoffeeApp_Coffee, как помечено как тростник (не удается разрешить символ)Dagger 2 and android Studio: работает, но не вижу сгенерированных классов

Мои 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' 

} 

Благодаря

+0

Если он строит и работает, зачем беспокоиться о поиске сгенерированных файлов из 'Dagger'? –

+2

Прежде всего, узнайте и поймите. Вторая отладка. – Mateu

+0

Где вы взяли этот пример? –

ответ

24

Используйте 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.

+0

У меня есть все это, и я все еще не могу импортировать класс: 'DaggerMyComponent'. Что еще вы должны сделать для создания? – clocksmith

+1

Если вы правильно настроили его, он должен работать. Сгенерированные файлы можно найти в '/ build/generated/source/apt /', поэтому вы можете проверить, запущено ли поколение. – nhaarman

+0

Если у вас несколько файлов градиента, попробуйте указать путь к классам зависимости в вашем самом файле верхнего уровня. Для меня у меня есть «project/build.gradle» и «project/app/build.gradle». Я применил плагин в 'app', но объявил зависимость в' project', и это сработало для меня. – yuval

6

Я наткнулся на ту же проблему, в моем случае я тестировал новые классы и пытался вставлять их отдельно в свой основной класс, в этом случае Кинжал не будет генерировать ни одного DaggerComponents с завода.

Просто не забудьте поставить все инъекции, которые входят в один класс в один модуль & один компонент. Вы не можете вводить более одного DaggerComponent в один класс. Кроме того, это точка этих компонентов, чтобы заполнить введенные классы