android Java代码中的Kotlin集成后的Dagger抛出错误

mlmc2os5  于 2022-11-20  发布在  Android
关注(0)|答案(2)|浏览(141)

Android项目代码库是完整的java,Dagger 2也是用java实现的。我在代码中集成了Kotlin,每次我重建时,Dagger都会出错。(在下面添加)

代码:

构建.gradle(项目)

buildscript {
    ext {
        kotlin_version = "1.7.10"
    }

    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.gms:google-services:4.3.10'
        classpath 'com.android.tools.build:gradle:7.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

构建.gradle(应用程序)

apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-kapt'
    
    android {
        compileSdkVersion 32
    
        defaultConfig {
            applicationId "co.xyz.abc"
            minSdkVersion 21
            targetSdkVersion 32
            versionCode 15
            versionName "1.1.1"
            multiDexEnabled true
            renderscriptTargetApi 19
            renderscriptSupportModeEnabled true
            vectorDrawables.useSupportLibrary = true
        }
    
    
        buildTypes {
         // ...
        }
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        kotlinOptions {
            jvmTarget = '1.8'
        }
        buildFeatures {
            viewBinding true
        }
    }
    
    dependencies {
        // AndroidX
       // ....

        //kotlin
        implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10'
        implementation 'androidx.core:core-ktx:1.9.0'
    
        // ViewModel
        def lifecycle_version = "2.4.1"
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    
        // Dagger2
        def daggerVersion = "2.35.1"
        api "com.google.dagger:dagger:$daggerVersion"
        annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
    
        // Dagger Android
        api "com.google.dagger:dagger-android-support:$daggerVersion"
        api "com.google.dagger:dagger-android:$daggerVersion"
        annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
    
        // AssistedInject
        def assistedInject = '0.6.0'
        compileOnly "com.squareup.inject:assisted-inject-annotations-dagger2:$assistedInject"
        annotationProcessor "com.squareup.inject:assisted-inject-processor-dagger2:$assistedInject"
    
        androidTestImplementation 'junit:junit:4.13.2'
}

分级属性

android.enableJetifier=true
    android.useAndroidX=true
    org.gradle.jvmargs=-Xmx1536m
    kotlin.code.style=official

Gradle-wrapper.属性

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip

重建后出现错误:

失败:生成失败,出现异常.

  • 问题:执行任务":app:checkStagingLocalDevAarMetadata“失败。执行com.android.build.gradle.internal.tasks时出现故障。检查AAR元数据时发现CheckAarMetadataWorkAction 3个问题:

1.依赖项'androidx.core:core-ktx:1.9.0'需要依赖于它的库和应用程序才能针对Android API 33或更高版本进行编译。
:应用程序目前是针对android-32编译的。
此外,建议Android Gradle插件7.2.1的最高编译SDK版本为32。
建议采取的行动:将此项目的Android Gradle插件版本更新为支持33的版本,然后更新此项目以使用至少为33的compileSdkVerion。
请注意,更新库或应用的compileSdkVersion(允许使用较新的API)可以与更新targetSdkVersion(选择应用使用新的运行时行为)和minSdkVersion(确定应用可以安装在哪些设备上)分开进行。
1.依赖项“androidx.core:core:1.9.0”需要依赖于它的库和应用程序才能针对Android API 33或更高版本进行编译。
:应用程序目前是针对android-32编译的。
此外,建议Android Gradle插件7.2.1的最高编译SDK版本为32。
建议采取的行动:将此项目的Android Gradle插件版本更新为支持33的版本,然后更新此项目以使用至少为33的compileSdkVerion。
请注意,更新库或应用的compileSdkVersion(允许使用较新的API)可以与更新targetSdkVersion(选择应用使用新的运行时行为)和minSdkVersion(确定应用可以安装在哪些设备上)分开进行。
1.依赖项'androidx.annotation:annotation-experimental:1.3.0'需要依赖于它的库和应用程序才能针对Android API 33或更高版本进行编译。
:应用程序目前是针对android-32编译的。
此外,建议Android Gradle插件7.2.1的最高编译SDK版本为32。
建议采取的行动:将此项目的Android Gradle插件版本更新为支持33的版本,然后更新此项目以使用至少为33的compileSdkVerion。
请注意,更新库或应用的compileSdkVersion(允许使用较新的API)可以与更新targetSdkVersion(选择应用使用新的运行时行为)和minSdkVersion(确定应用可以安装在哪些设备上)分开进行。

当我将compileSdk更改为33时:

任务:应用程序:使用Javac编译暂存本地开发Java
错误:找不到符号导入公司。abc。客户。di。组件。DaggerABCApplicationComponent;^符号:类匕首ABC应用程序组件位置: Package 公司

现在,如果我将core-ktx版本降级到1.8.0,并将annotationProcessor更改为kapt:

任务:应用程序:kaptStagingLocalDevKotlin /工作室项目/项目/应用程序/源/主/java/co/abc/客户端/di/模块/帐户/辅助模块。java:8:错误:无法找到@模块符号(包括=辅助注射_辅助模块.类)^符号:java:9:1000 - 10000:10000:10000 - 10000:10000:10000:10000 - 10000:10000:10000:10000 - 100000:10000:10000:100000:10000:100000:10000:100000:100000:100000:100000:100000:1000000:1000000:1000000:1000000:100000:10000错误:[ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor无法处理此接口,因为无法解析其所有依赖项。请检查编译错误或生成的代码的循环依赖项。public interface AssistedModule {} ^ /StudioProjects/project/app/src/main/java/co/abc/client/di/components/ABCApplicationComponent.java:40:错误:[ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor无法处理此接口,因为无法解析其所有依赖项。请检查生成的代码是否存在编译错误或循环依赖项。公共接口ABCApplicationComponent extends AndroidInjector { ^
任务:应用程序:kaptStagingLocalDevKotlin失败
失败:生成失败,出现异常.

  • 问题:执行任务“:app:kaptStagingLocalDevKotlin”失败。执行org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction java.lang.reflect.InvocationTargetException时出现故障(无错误消息)

这里可能有什么问题?匕首相关的代码应该用Kotlin写吗?当匕首在那里的时候,有没有一个我可以参考的源代码在java代码库中集成kotlin?
到目前为止,我已经尝试了这些没有工作:
1.Kotlin和dagger的升级和降级版本。
1.将所有注解处理器更改为kapt

1.将其添加到gradle - -Pandroid。增量Java编译=false

  1. android {编译选项.增量= false }
    1.重新启动ide
    此外,我有另一个项目(java代码库和Kotlin集成设置),这是与这些版本,所以问题似乎不与此。唯一的区别是,匕首不在我的其他项目和一切运行良好。
5sxhfpxr

5sxhfpxr1#

尝试在Gradle中使用最新版本的匕首

//Hilt
implementation 'com.google.dagger:hilt-android:2.42'
kapt 'com.google.dagger:hilt-android-compiler:2.42'
kapt "androidx.hilt:hilt-compiler:1.0.0"

在应用程序级别

classpath 'com.google.dagger:hilt-android-gradle-plugin:2.42'
nnsrf1az

nnsrf1az2#

可能是版本问题
降级你的Kotlin版本,然后检查它

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'
implementation 'androidx.core:core-ktx:1.8.0'

相关问题