Gradle 带有数据绑定的插件 3.2.0,无法解析包名

Gradle Plugin 3.2.0 with databinding, can not resolve package name

将 Android Studio 从 3.1.2 更新到 3.2.0 并将 gradle 插件更新到 3.2.0 后,生成的数据绑定出现问题 类 抱怨一个不存在的包名,但它确实存在。该包属于项目中的一个模块。

以下是我在尝试 运行 应用程序时遇到的错误:

error: cannot find symbol class Helper

error: package Helper does not exist

这是我的项目级别build.gradle文件:

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath "com.google.gms:google-services:4.0.1"
        classpath 'io.fabric.tools:gradle:1.25.4'

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

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://jitpack.io'
        }
    }
}

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

这是出现问题的模块的build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 28
    }
}

dependencies {
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
}

我尝试了各种方法:

None 成功了。

编辑:添加了屏幕截图

在您的代码中,它实际上使用了来自 supernova libraryEmojiIconEdittext 助手 class,但在您的依赖项中,没有添加此类依赖项。

因此,将其添加到您的 Build.gradle 依赖项中:

implementation 'com.github.hani-momanii:SuperNova-Emoji:1.1'

或者删除 class(如果你不想使用它)然后它就可以正常工作了。

P.S: 导入其实说的是实话

import supernova.emoji.helper

我正在使用 Highcharts 库 (https://github.com/highcharts/highcharts-android),我发现数据绑定有同样的问题 - 在将 gradle 插件更新到 3.2.0 后导入。

这个版本可能包含错误,所以请继续使用 3.1.3 版本。

3.2.0版本的数据绑定文件:

import error in gradle 3.2.0

版本 3.1.3 中的数据绑定文件:

import OK in gradle 3.1.3

我今天遇到了同样的问题。

问题出在您的包名本身。您提到:

there is no Helper class in my project, it is a package name. The package does exist, but databinding can't find it.

简答:

更改以小写字母开头的包名称。出现这个问题是因为你的包名是Helper。将其更改为 helper

长答案:

在 Android 插件 3.2.0 及更高版本中,默认启用数据绑定 V2。 我猜数据绑定 V2 编译器会将任何以大写字母开头的组件视为 class,而不是包。它实际上是在寻找名称为 Helper 的 class,而不是包 Helper

因为您之前使用的是 Android 3.1.2,它使用的是数据绑定 V1 编译器,所以包名称不是问题。

我将项目中的所有包(文件夹)名称重命名为以小写字母开头,项目终于编译成功了。确保在重命名包时使用重构工具 (Shift + F6),这样更改也可以应用到您的 XML 文件!!

奖金:

以防万一你想让包名以大写字母开头,但又想使用 Android 插件 3.2.0(不推荐),转到 gradle.properties 在根文件夹中并添加此行。这会禁用 databindingV2 编译器并强制项目使用旧的 V1 编译器。因此,您的 class 名称无关紧要。

android.databinding.enableV2=false

但是为什么会有人想要这样做呢? :/