代码之家  ›  专栏  ›  技术社区  ›  Dr.jacky Mateusz Kaflowski

无法访问ActivityCompatApi23-Kotlin-AndroidX-Dagger 2.17

  •  1
  • Dr.jacky Mateusz Kaflowski  · 技术社区  · 6 年前

    :

    > :presentation:transformDataBindingWithDataBindingMergeArtifactsForDebug
    > e: E:\MVVM\presentation\build\tmp\kapt3\stubs\debug\com\example\mvvm\ui\base\BaseActivity.java:9: error: cannot access ActivityCompatApi23
    public abstract class BaseActivity extends dagger.android.support.DaggerAppCompatActivity {
                    ^
      class file for android.support.v4.app.ActivityCompatApi23 not found
    e: java.lang.IllegalStateException: failed to analyze: java.lang.AssertionError: annotation tree hasn't been attributed yet: @kotlin.Metadata(mv = {1, 1, 11}, bv = {1, 0, 2}, k = 1, d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b&\u0018\u00002\u00020\u0001B\u0005\u00a2\u0006\u0002\u0010\u0002\u00a8\u0006\u0003"}, d2 = {"Lcom/example/mvvm/ui/base/BaseActivity;", "Ldagger/android/support/DaggerAppCompatActivity;", "()V", "presentation_debug"})
    

    :

    ext{
    minSdkVersion = 14
    targetSdkVersion = 28
    androidCompileSdkVersion = 28
    testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    androidPluginVersion = '3.1.4'
    kotlinVersion = '1.2.70'
    supportVersion = '1.0.0-alpha1'
    daggerVersion = '2.17'
    roomVersion = '2.0.0-beta01'
    lifecycleVersion = '2.0.0-beta01'
    rxJavaVersion = '2.2.2'
    rxAndroidVersion = '2.1.0'
    supportTest = '1.1.0-alpha1'
    multidexVersion = '2.0.0'
    ...
    }
    
    kotlin: "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}",
    rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}",
    rxAndroid: "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion",
    appCompat: "androidx.appcompat:appcompat:$supportVersion",
    material: "com.google.android.material:material:$supportVersion",
    supportv4: "androidx.legacy:legacy-support-v4:$supportVersion",
    appcompatv7: "androidx.appcompat:appcompat:$supportVersion",
    recyclerview: "androidx.recyclerview:recyclerview:$supportVersion",
    cardview: "androidx.cardview:cardview:$supportVersion",
    annotation: "androidx.annotation:annotation:$supportVersion",
    javaxInject: "javax.inject:javax.inject:$javaxInjectVersion",
    dagger: "com.google.dagger:dagger:${daggerVersion}",
    daggerAndroid: "com.google.dagger:dagger-android:${daggerVersion}",
    daggerAndroidSupport: "com.google.dagger:dagger-android-support:${daggerVersion}",
    daggerAndroidProcessor: "com.google.dagger:dagger-android-    processor:${daggerVersion}",
    daggerCompiler: "com.google.dagger:dagger-compiler:${daggerVersion}",
    room: "androidx.room:room-runtime:$roomVersion",
    roomCompiler: "androidx.room:room-compiler:$roomVersion",
    roomCommon: "androidx.room:room-common:$roomVersion",
    constraintLayout: "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion",
    multidex: "androidx.multidex:multidex:$multidexVersion",
    lifecycleExtensions: "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion",
    lifecycleCommon: "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
    ...
    

    Android Studio版本 : 3.1.4

    基本活动 :

    abstract class BaseActivity : DaggerAppCompatActivity()
    

    :

    class MyApplication : DaggerApplication() {
    
        override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
    
            return DaggerAppComponent.builder().create(this)
        }
    }
    

    :

    @Singleton
    @Component(modules = [
        AndroidSupportInjectionModule::class,
        ViewModelBuilder::class,
        AppModule::class,
        BaseModule::class
    ])
    interface AppComponent : AndroidInjector<MyApplication> {
        @Component.Builder
        abstract class Builder : AndroidInjector.Builder<MyApplication>()
    }
    

    @Module(includes = [NetModule::class, DbModule::class])
    abstract class AppModule {
    
        @ApplicationContext
        @Binds
        abstract fun provideApplicationContext(myApplication: MyApplication): Context
    }
    

    完整错误日志 :

    :presentation:transformDataBindingWithDataBindingMergeArtifactsForDebug
    > e: E:\MVVM\presentation\build\tmp\kapt3\stubs\debug\com\example\mvvm\ui\base\BaseActivity.java:9: error: cannot access ActivityCompatApi23
    public abstract class BaseActivity extends dagger.android.support.DaggerAppCompatActivity {
                    ^
      class file for android.support.v4.app.ActivityCompatApi23 not found
    e: java.lang.IllegalStateException: failed to analyze: java.lang.AssertionError: annotation tree hasn't been attributed yet: @kotlin.Metadata(mv = {1, 1, 11}, bv = {1, 0, 2}, k = 1, d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b&\u0018\u00002\u00020\u0001B\u0005\u00a2\u0006\u0002\u0010\u0002\u00a8\u0006\u0003"}, d2 = {"Lcom/example/mvvm/ui/base/BaseActivity;", "Ldagger/android/support/DaggerAppCompatActivity;", "()V", "presentation_debug"})
        at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:56)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:125)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:161)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:57)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:441)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:101)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:1020)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:101)
        at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:1062)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:1019)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:440)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
        at sun.rmi.transport.Transport$1.run(Transport.java:200)
        at sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.AssertionError: annotation tree hasn't been attributed yet: @kotlin.Metadata(mv = {1, 1, 11}, bv = {1, 0, 2}, k = 1, d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b&\u0018\u00002\u00020\u0001B\u0005\u00a2\u0006\u0002\u0010\u0002\u00a8\u0006\u0003"}, d2 = {"Lcom/example/mvvm/ui/base/BaseActivity;", "Ldagger/android/support/DaggerAppCompatActivity;", "()V", "presentation_debug"})
        at com.sun.tools.javac.util.Assert.error(Assert.java:133)
        at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:118)
        at com.sun.tools.javac.comp.Check.validateTypeAnnotation(Check.java:2745)
        at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotation(Attr.java:4484)
        at com.sun.tools.javac.tree.JCTree$JCAnnotation.accept(JCTree.java:2317)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at com.sun.tools.javac.tree.TreeScanner.visitModifiers(TreeScanner.java:315)
        at com.sun.tools.javac.tree.JCTree$JCModifiers.accept(JCTree.java:2343)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitClassDef(Attr.java:4566)
        at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
        at com.sun.tools.javac.comp.Attr.validateTypeAnnotations(Attr.java:4473)
        at com.sun.tools.javac.code.TypeAnnotations$2.run(TypeAnnotations.java:142)
        at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:155)
        at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129)
        at com.sun.tools.javac.comp.Enter.complete(Enter.java:512)
        at com.sun.tools.javac.comp.Enter.main(Enter.java:471)
        at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)
        at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:47)
        at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:27)
        at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:213)
        at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:178)
        at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:96)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:95)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:105)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:82)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:375)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:67)
        at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:366)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:120)
        ... 30 more
    
     > :presentation:kaptDebugKotlin FAILED
    
     > FAILURE: Build failed with an exception.
    
     > * What went wrong:
    Execution failed for task ':presentation:kaptDebugKotlin'.
    > Internal compiler error. See log for more details
    

    我已经阅读了所有相关问题,例如:

    他们都说支持库的版本不一样;或者 compileSdkVersion 28

    我考虑了所有这些,但错误仍然存在!

    我觉得用这个有点不对劲 安卓利德 科特林 匕首 ; 但我不知道是什么。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dr.jacky Mateusz Kaflowski    6 年前
    • databinding 若为false,则查看是否存在任何资源/布局错误(在我看来,这是第一个错误。是的,有其他错误,我没有粘贴在问题了)。

    • multiDexEnabled true 在应用程序模块的 build.gradle ,内部 defaultConfig 范围(或范围) data presentation '模块' 构建.gradle

    • 数据 演示 构建.gradle

      android {    
      ...
      compileOptions {
          targetCompatibility 1.8
          sourceCompatibility 1.8
      }
      
    • 别忘了设置 数据绑定 又是真的。

    • 将Build Gradle Tools版本更改为 classpath 'com.android.tools.build:gradle:3.3.0-alpha11'
    • local.properties 文件: org.gradle.jvmargs=-XX\:MaxHeapSize\=512m -Xmx512m ; 当然,根据你的硬件配置。
    • 使用4.4以上的渐变分布版本。比如: distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-all.zip . (内部 gradle-wrapper.properties 文件)。
    • override fun attachBaseContext(base: Context) {
          super.attachBaseContext(base)
          MultiDex.install(this)
      }
      
    • 将下面的行添加到 gradle.properties 文件:

      android.useAndroidX=true
      # Automatically convert third-party libraries to use AndroidX
      android.enableJetifier=true
      
    • 将supportVersion密钥更改为 supportVersion = '1.0.0-rc02'//'1.0.0-alpha1'
    • 将密钥更改为 daggerVersion = '2.16'//2.17
    • roomVersion = '2.0.0-alpha1'//'2.0.0-beta01'

    资料来源:
    https://github.com/google/dagger/issues/1245
    Androidx and databinding
    https://stackoverflow.com/a/41100670/421467
    https://stackoverflow.com/a/48531191/421467
    https://stackoverflow.com/a/49525685/421467
    https://developer.android.com/studio/build/multidex
    https://developer.android.com/topic/libraries/support-library/refactor
    https://developer.android.com/topic/libraries/architecture/adding-components
    https://developer.android.com/jetpack/docs/release-notes#july_2_2018
    https://github.com/JakeWharton/butterknife/issues/1270#issuecomment-388449463