【问题标题】:android-kotlin error : unresolved reference databinding & ActivityMainBindingandroid-kotlin 错误:未解决的参考数据绑定和 ActivityMainBinding
【发布时间】:2017-10-02 07:52:24
【问题描述】:

我使用的是 Android Studio 3.0 Canary 6 版本。我在课堂上启用了 dataBinding 并且代码没有显示任何错误。但是,当我构建 APK 时,构建失败并显示以下错误:

Error:(8, 37) Unresolved reference: databinding  
Error:(22, 26) Unresolved reference: ActivityMainBinding  
Error:(38, 50) Unresolved reference: ActivityMainBinding  
Error:(43, 52) Unresolved reference: ActivityMainBinding  
Error:(46, 52) Unresolved reference: ActivityMainBinding  
Error:(49, 52) Unresolved reference: ActivityMainBinding  
Error:(52, 52) Unresolved reference: ActivityMainBinding  
Error:(55, 52) Unresolved reference: ActivityMainBinding  
Error:(58, 52) Unresolved reference: ActivityMainBinding  
Error:(61, 52) Unresolved reference: ActivityMainBinding  
Error:(64, 52) Unresolved reference: ActivityMainBinding  
Error:(67, 52) Unresolved reference: ActivityMainBinding  
Error:(70, 52) Unresolved reference: ActivityMainBinding  
Error:(73, 52) Unresolved reference: ActivityMainBinding  
Error:Execution failed for task ':app:compileDebugKotlin'.  
Compilation error. See log for more details

顶层build.gradle文件如下:

buildscript {
ext.kotlin_version = '1.1.3-2'
repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0-alpha6'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

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

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

模块build.gradle文件如下:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.jimil.calculator"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner 
            "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 
                'proguard-rules.pro'
        }
    }
    dataBinding{
        enabled =  true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestImplementation ('com.android.support.test.espresso:espresso-
        core:3.0.1', {
            exclude group: 'com.android.support', module: 'support-
                annotations'
    })
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    kapt 'com.android.databinding:compiler:3.0.0-alpha6'
}

kapt {
    generateStubs = true
}

MainActivity.kt 类是:

import com.example.jimil.calculator.databinding.ActivityMainBinding  
...  
class MainActivity : AppCompatActivity() {  
    private var binding: ActivityMainBinding? = null  
    ...  
}

请帮我解决构建错误。

【问题讨论】:

    标签: android data-binding kotlin build.gradle android-databinding


    【解决方案1】:

    您的 gradle 中有几个错误。

    当前的 Gradle-Version 是 3.0.0-beta 3。这意味着您需要将类路径更改为

    classpath 'com.android.tools.build:gradle:3.0.0-beta6'
    

    你的依赖也一样

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

    您还应该在正确的文件夹中提供您的插件。

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-kapt'
    apply plugin: 'kotlin-android-extensions'
    

    您还应该启用编译选项,以使您的注释处理器使用 Java8 依赖项(Kotlin 可能需要它以 1.8 为目标)。

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

    完成后invalidate your cache and restart。

    如果错误仍然存​​在,请检查 Gradle 控制台。您的 XML 文件中可能存在错误,这会阻止您的注释处理器生成数据绑定类。

    【讨论】:

    • 我尝试从 alpha6 更改为 beta6,但是我的 build.gradle 文件不会与我的项目同步,所以我添加了 compileOptions,但我回到了 alpha6 而不是 beta6 ,然后我又回到了同样的问题;它不允许我构建显示错误的apk:未解决的参考数据绑定和未解决的参考:ActivityMainBinding
    • 你能告诉我XML文件应该是怎样的吗?或者哪些可能的代码以及在哪个特定的 XML 文件中停止生成数据绑定类
    • 您尚未发布您的 XML。这样做,我可能会有所帮助:)
    • 该站点不允许我将 XML 文件粘贴到 cmets 中。我可以获取您的电子邮件 ID,以便向您展示 XML 文件吗?
    • 就我而言,我删除了 DataBindingUtil.setContentView(this, R.layout.activity_main)。在不使用 DataBindingUtil 的情况下使用旧的 setContentView 调用运行应用程序。然后我再次添加 binding = DataBindingUtil.setContentView(this, R.layout.activity_main)。现在它能够解析私有 lateinit var 绑定:ActivityMainBinding
    【解决方案2】:

    在我的例子中,cleaning 然后rebuilding 项目解决了这个问题。问题是直到那时还没有构建必要的类。

    在布局文件中集成数据绑定后,转到Build -> Clean Project 和Build -> Rebuild Project。这将产生必要的 绑定类。

    来源:link

    【讨论】:

    • 重建也会清理项目。
    【解决方案3】:

    我遇到了这个问题 (Unresolved reference: ActivityMainBinding) 调整依赖项不起作用。问题是我使用DrawerLayout 而不是layout 作为要为其生成数据绑定的活动布局的根元素。

    所以把你的其他布局(例如:约束,线性相对布局)放在下面的标签内

    <layout xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools">
    
    <!-- other layout here -->
    
    </layout>
    

    来源:https://stackoverflow.com/a/50634021/7356355

    【讨论】:

      【解决方案4】:

      另一个可能触发此错误的原因是片段使用不当。例如,就我而言,我有

      <layout>
        <data></data>
        <fragment></fragment>
      </layout>
      

      当我应该将片段嵌套在另一个视图下时:

      <layout>
        <data></data>
        <LinearLayout>
          <fragment></fragment>
        </LinearLayout>
      </layout>
      

      该更改为我解决了问题。我猜这意味着您的 xml 布局文件中的任何不直接触发错误的错误都可能表现为这个问题中出现的错误。

      【讨论】:

        【解决方案5】:

        我忘记添加kotlin-kapt。添加后,成功了!

        apply plugin: 'kotlin-android'
        
        apply plugin: 'kotlin-android-extensions'
        
        apply plugin: 'kotlin-kapt'
        
        
        dependencies {
            kapt "com.android.databinding:compiler:3.1.3"
        }
        

        【讨论】:

          猜你喜欢
          • 2016-01-14
          • 2023-04-06
          • 2020-12-26
          • 2020-01-18
          • 2017-08-08
          • 2020-06-12
          • 2023-01-17
          • 2020-09-29
          • 1970-01-01
          相关资源
          最近更新 更多