Kotlin 匕首和科特林。匕首不';不生成组件类

Kotlin 匕首和科特林。匕首不';不生成组件类,kotlin,dagger-2,Kotlin,Dagger 2,我是科特林和达格的新手。我有一个小问题,我不知道如何解决,我没有找到解决办法 这就是我所拥有的: @Module class AppModule (app: Application) { private var application: Application; init { this.application = app; } @Provides fun provideApplication(): Application? {

我是科特林和达格的新手。我有一个小问题,我不知道如何解决,我没有找到解决办法

这就是我所拥有的:

@Module
class AppModule (app: Application) {
    private var application: Application;

    init {
        this.application = app;
    }

    @Provides fun provideApplication(): Application? {
        return application;
    }

    @Provides fun provideResources(): Resources? {
        return application.resources;
    }
}

@Singleton
@Component(modules =  arrayOf(AppModule::class))
interface AppComponent: AppComponentBase {

    public class Initializer {
        private constructor(){}

        companion object {
            fun Init(app: Application): AppComponent? {
                return DaggerAppComponent.builder().appModule(AppModule(app)).build()
            }
        }
    }
}
AppComponentBase
:此接口包含此组件所需的所有方法

现在,问题是如果我在
伴生对象中调用
DaggerAppComponent.builder().appModule(appModule(app)).build()
时,这个
DaggerAppComponent
类不是由Dagger生成的。 如果调用同一行,则
伴随对象
dagger生成de类不会出现任何问题

我确实在寻找解决方案的另一件事是创建另一个具有相同结构的不同类,并将
DaggerAppComponent
作为内部对象导入,我发现同样的结果发生了

我不知道如何在外部初始化组件。那么,还有其他替代解决方案吗?或者我做错了什么?

您需要内置。gradle:

kapt {
    generateStubs = true
}

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}
apply plugin: 'kotlin-kapt'

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}
此扩展将生成dagger的代码

此外,对于较新的gradle版本,您还可以在build.gradle中应用该插件:

kapt {
    generateStubs = true
}

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}
apply plugin: 'kotlin-kapt'

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}

您可以查看参考资料

我不知道这一更改是什么时候发生的,但在Kotlin gradle插件的1.1.2中,您可以替换它(在模块的
build.gradle
中):

为此:

apply plugin: 'kotlin-kapt'
然后确保将使用
annotationProcessor
的依赖项替换为
kapt

例如,旧方法是使用:

annotationProcessor (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)
现在您使用:

kapt (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)

如果您对e
匕首组件有问题,您应该添加

apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}
build.gradle
它将为
dagger 2
生成
kotlin
代码,否则项目将仅基于
Rebuild

更新kotlin 1.1.4
generateSubs
不再工作。请随意使用最新的Kotlin进行构建,它会在Android Studio的消息部分告诉您不再需要它。下面是和Kotlin的依赖项的最新列表

apply plugin: 'kotlin-kapt'

//...
// Other Gradle stuff
//...

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.4-3"

    compile 'com.google.dagger:dagger-android:2.12'
    kapt 'com.google.dagger:dagger-android-processor:2.12'
    compileOnly 'com.google.dagger:dagger:2.12'
    kapt 'com.google.dagger:dagger-compiler:2.12'
}

这个问题可以通过以下不同于原始答案的更改来解决

以下内容也可以很好地解决此问题

使用插件

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
和依赖关系

implementation "com.google.dagger:dagger:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version" 
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"

请查看此

您是否有内置的
kapt'com.google.dagger:dagger编译器:2.0.2'
作为参考。gradle?使用插件
apply plugin:'kotlin android'apply plugin:'kotlin kapt'
和依赖项
实现“com.google.dagger:dagger:$dagger\u version”也可以很好地解决此问题实现“com.google.dagger:dagger android:$dagger_版本”实现“com.google.dagger:dagger android支持:$dagger_版本”kapt.com.google.dagger:dagger编译器:$dagger_版本”kapt.com.google.dagger:dagger android处理器:$dagger_版本“
您从哪里了解“generateStubs”配置?我错过了这一点,幸运地偶然发现了这个答案。
dependencies
中的项目顺序算数了吗?首先,它对我不起作用,因为
compile“org.jetbrains.kotlin:kotlin stdlib:$kotlin_version”
被添加到依赖项列表的末尾。然后我把它移到顶部,它就成功了。下面的操作也可以很好地解决这个问题:插件
apply-plugin:'kotlin-android'apply-plugin:'kotlin-kapt'
和依赖项
implementation“com.google.dagger:dagger:$dagger\u version“implementation”com.google.dagger:dagger-android:$dagger\u version”实现dagger:dagger android支持:$dagger_版本“kapt”com.google.dagger:dagger编译器:$dagger_版本“kapt”com.google.dagger:dagger android处理器:$dagger_版本“
如果是基于java的android项目,我们应该在gradle文件中给出什么?感谢您昨天找到这个:D您有任何来源吗?您是如何发现的?为了澄清这一点:
应用插件:“kotlin kapt”
应该在您的模块build.gradleThanks@charlag中。更新了答案。记住在dependenciest中添加
kapt'com.google.dagger:dagger android处理器:2.14.1'
kapt'com.google.dagger:dagger编译器:2.14.1'
。这是不推荐的。你能在android库项目中使用它吗?是的@speedynomads添加“kapt”com.google.dagger:dagger android处理器:2+“除了其他人,匕首为我工作。