代码之家  ›  专栏  ›  技术社区  ›  N Sharma

Kapt未在Instant app功能模块中生成类

  •  6
  • N Sharma  · 技术社区  · 7 年前

    我已经在设置中启用了注释处理器,并重新启动了我的android studio,但这对我来说不起作用。我也读了这篇文章 Dagger2 not generating Daggercomponent classes 在一条线上读到 apt 已弃用,因此我正在使用 annotationProcessor

    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'
    

    电视功能构建。格拉德尔

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

    项目构建。格拉德尔

    // 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
    }
    

    @Component(modules = arrayOf(AppModule::class, NetModule::class))
    interface NetComponent {
        fun inject(activity: MainActivity)
    }
    

    恰当的

    enter image description here

    DaggerNetComponent 类,因为编译时也没有错误。有人知道可能是什么问题吗?

    3 回复  |  直到 7 年前
        1
  •  8
  •   Eugen Pechanec    7 年前

    我无法用消息来源来支持这一点,但这应该会起作用:

      • 库模块+匕首+kapt

    将所有内容从功能模块移动到库模块。然后使特征模块依赖于库模块。

    This sample project

    通过 Instant App Codelab 确保你没有误解任何事情。

    最初的答案应该是可行的。

    原始答案

    使用 kapt 而不是 annotationProcessor 配置如下所示:

    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'
    

    kapt "com.android.databinding:compiler:3.0.0-beta4"
    

    当您使用不同的构建插件版本时,不要忘记更新版本。

    Kotlin插件无法启动 注释处理器 而是依赖项。

    最后,要使用最新版本的Kotlin annotation processor,请将其放在模块构建的顶部。格拉德尔:

    apply plugin: 'kotlin-kapt'
    

    科特林支持 com.android.feature 模块是 added in Kotlin 1.1.4

        2
  •  2
  •   Weizhi    6 年前

    单元 build.gradle 你有

    dependencies {
        // some other stuff        
    
        api 'com.google.dagger:dagger:2.11'
        kapt 'com.google.dagger:dagger-compiler:2.11'
    }
    

    虽然 com.google.dagger:dagger:2.11 特色 模块由于 api 关键字, kapt com.google.dagger:dagger-compiler:2.11 特色 单元

    因此,您需要添加 致你所有的 dagger生成类的模块

    特色 单元

    dependencies {
        // some other stuff        
    
        // add kapt 
        kapt 'com.google.dagger:dagger-compiler:2.11'
    }
    
        3
  •  1
  •   HSFlik    7 年前

    我真的有这个问题。