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'
}
我尝试了各种方法:
- 清理并重建项目
- 正在使缓存失效并重新启动
- 正在清理 gradle 和 gradle 缓存
- 正在更新 Gradle 到最新版本
- 更改模块名称和其中使用的包名称
None 成功了。
编辑:添加了屏幕截图
在您的代码中,它实际上使用了来自 supernova library 的 EmojiIconEdittext
助手 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
但是为什么会有人想要这样做呢? :/
将 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'
}
我尝试了各种方法:
- 清理并重建项目
- 正在使缓存失效并重新启动
- 正在清理 gradle 和 gradle 缓存
- 正在更新 Gradle 到最新版本
- 更改模块名称和其中使用的包名称
None 成功了。
编辑:添加了屏幕截图
在您的代码中,它实际上使用了来自 supernova library 的 EmojiIconEdittext
助手 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
但是为什么会有人想要这样做呢? :/