问题
I am using dagger2 in my android application. It is not generating dagger component classes even though there is no errors.
I have enabled the annotation processors in the setttings and restart my android studio but that didn't work for me. I read this thread too Dagger2 not generating Daggercomponent classes and read on one thread that apt
is deprecated so I am using annotationProcessor
Base Module build.gradle
apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
baseFeature true
defaultConfig {
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "0.0.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
application project(':app')
feature project(":main")
feature project(":tv")
api 'com.android.support:appcompat-v7:26.0.2'
api 'com.android.support.constraint:constraint-layout:1.0.2'
api 'com.android.support:design:26.0.2'
api "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
api "org.jetbrains.anko:anko-commons:$anko_version"
api "android.arch.lifecycle:runtime:1.0.0-alpha9"
api "android.arch.lifecycle:extensions:1.0.0-alpha9"
kapt "android.arch.lifecycle:compiler:1.0.0-alpha9"
api 'com.squareup.retrofit2:retrofit:2.3.0'
api "com.squareup.retrofit2:converter-moshi:2.0.0"
api 'com.google.dagger:dagger:2.11'
kapt 'com.google.dagger:dagger-compiler:2.11'
api 'com.github.bumptech.glide:glide:4.0.0'
kapt 'com.github.bumptech.glide:compiler:4.0.0'
// new version 1.5.2 has some multi dex issue
debugApi 'com.squareup.leakcanary:leakcanary-android:1.5.1'
releaseApi 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
}
repositories {
mavenCentral()
}
apply plugin: 'com.google.gms.google-services'
tv feature build.gradle
apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation project(':base')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0'
}
Project build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.1.3-2'
ext.anko_version = '0.10.1'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
NetComponent.kt
@Component(modules = arrayOf(AppModule::class, NetModule::class))
interface NetComponent {
fun inject(activity: MainActivity)
}
apt
generates dagger classes inside apt directory but there is no such dagger generated classes now even though I searched in entire project directory.
I see that its not generating DaggerNetComponent
class, as there is no errors too on compilation. Does anyone know what could be the issue ?
回答1:
Your module is an instant app feature module. And it looks like kapt doesn't support those yet.
I cannot back this with a source but this should work:
- feature module
- library module + dagger + kapt
Move everything from your feature module to a library module. Then make the feature module depend on the library module.
Library modules do support kapt.
This sample project uses Dagger and Kapt in Instant App Feature modules and it works out-of-the-box. There must be some other issue with your project setup, which is not related to Dagger or annotation processing.
Go through the Instant App Codelab and make sure you didn't misunderstand anything.
The original answer should then work.
Original answer
Use kapt
instead of annotationProcessor
configuration. As in:
kapt "android.arch.lifecycle:compiler:1.0.0-alpha9"
kapt 'com.google.dagger:dagger-compiler:2.11'
kapt 'com.github.bumptech.glide:compiler:4.0.0'
If you're using databinding add this as well:
kapt "com.android.databinding:compiler:3.0.0-beta4"
Don't forget to update the version when you use different build plugin version.
Kotlin plugin doesn't pick up annotationProcessor
dependencies, we have to use kapt
dependencies instead.
Finally, to use latest version of Kotlin annotation processor put this at the top of your module's build.gradle:
apply plugin: 'kotlin-kapt'
Kotlin support for com.android.feature
modules was added in Kotlin 1.1.4, make sure you use at least that.
回答2:
I literally just had this issue.
Try removing 'jre7' from the Kotlin stdlib dependency.
回答3:
In your base module build.gradle
you have
dependencies {
// some other stuff
api 'com.google.dagger:dagger:2.11'
kapt 'com.google.dagger:dagger-compiler:2.11'
}
While com.google.dagger:dagger:2.11
is transitively available to your feature module due to api
keyword, kapt
does not make com.google.dagger:dagger-compiler:2.11
transitively available to your feature module.
Therefore you need to add com.google.dagger:dagger-compiler:2.11
to all your feature module for dagger to generate classes
In feature module build.gradle
dependencies {
// some other stuff
// add kapt
kapt 'com.google.dagger:dagger-compiler:2.11'
}
来源:https://stackoverflow.com/questions/46080018/kapt-not-generating-classes-in-instant-app-feature-module