Dagger和Kotlin,Dagger不生成组件类

ljsrvy3e  于 2023-03-30  发布在  Kotlin
关注(0)|答案(9)|浏览(210)

我是Kotlin和Dagger的新手。我有一个小问题,我不知道如何解决,我找不到解决方案。
这就是我所拥有的:

@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:这个接口包含了这个组件所需要的所有方法。
现在,问题是,如果我在companion object中调用DaggerAppComponent.builder().appModule(AppModule(app)).build(),这个DaggerAppComponent类不是由Dagger生成的。如果a调用相同的行,任何都是由companion object dagger生成的,没有任何问题。
另一件事,我没有寻找一个解决方案是创建一个其他不同的类具有相同的结构,并importe DaggerAppComponent作为内部对象,我同样的结果发生。
我不知道什么有组件的初始化外。所以,有任何其他的解决方案,或者我做错了什么?.

nukf8bse

nukf8bse1#

您需要在build.gradle中拥有kapt processor

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'
    ...
}

这个扩展将生成dagger的代码。
此外,对于较新的gradle版本,您还可以在构建中应用该插件。gradle:

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'
    ...
}

您可以检查this project以供参考

bzzcjhmw

bzzcjhmw2#

我不知道这个变化是什么时候发生的,但是在Kotlingradle插件的1.1.2中,你替换了这个(在你的模块的build.gradle中):

kapt {
    generateStubs = true
}

用这个

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'
)
y1aodyip

y1aodyip3#

Kotlin1.1.4更新

generateStubs不再起作用。请随意使用最新的Kotlin进行构建,它会在Android Studio的 * 消息 * 部分告诉您不再需要它。以下是Dagger2 for Android和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'
}
axr492tv

axr492tv4#

这个问题可以通过下面的改变来解决,这与最初的答案不同
以下也将很好地解决此问题
带插件

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"

参考一下这个Gist

mbskvtky

mbskvtky5#

如果您使用Kotlin作为Android应用程序开发的主要语言,请使用这些依赖项

// Dagger dependencies
def dagger_version = "2.44"
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version" // if you use the support libraries
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
sd2nnvve

sd2nnvve6#

我的案例一定是匕首实现中的某个排除规则
com.mycompany.native-〉Dagger不生成代码
com.mycompany.other-〉匕首生成代码
我在这上面浪费了相当多的时间:-(我希望它能帮助别人!

t30tvxxf

t30tvxxf7#

对不起,我没有创建一个新的问题,但决定在类似的问题下回答,因为也许有人发现它有用!
我面临着荒谬的问题!使项目不生成匕首文件。它们是在准备运行您的应用程序时生成的!但我试图解决问题数小时,并没有想到简单的尝试点击运行。)))
也许你也面临着同样的问题:无论是«Sync Project with Gradle»还是«Clean»和«Build Project»都不能帮助生成dagger文件。

  • 然后运行您的应用程序!
    在第一次运行应用程序后,如果我单击“创建项目”,我的匕首开始生成文件。
arknldoa

arknldoa8#

对于任何在2023年仍在寻找答案的人来说,你只需要以下依赖项:

plugins {
       id 'com.android.application'
       id 'org.jetbrains.kotlin.android'
       id 'kotlin-kapt'
       }

dependencies {
    def dagger_version = "2.44" //or any latest versions
    implementation 'com.google.dagger:dagger:$dagger_version"'
    kapt 'com.google.dagger:dagger-compiler:$dagger_version"'
    }

您需要在包中查找生成的组件,其名称为
“com.yourcompanyname.yourprojectname(debug)”
在java文件夹中。
不会在java(generated)包中找到生成的dagger文件。

z8dt9xmd

z8dt9xmd9#

如果你有问题与DaggerComponent,你应该添加

apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}

build.gradle,它将为dagger 2生成kotlin代码,否则项目将仅在Rebuild上构建

相关问题