我将数据绑定用于我的一个项目,项目名称为 com.abc.def 。我已经将所有视图与
这样的绑定相关联ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
它工作正常,但是如果我将软件包名称更改为 com.Abc.Def ,则在构建Apk时会产生以下错误。
原因:无法猜测 com.Abc.Def.databinding.ActivityLoginBindingImpl。
请注意:
我已经尝试过清理,重建并使缓存无效并重新启动。但是没有运气。
答案 0 :(得分:8)
我刚遇到同样的问题。我能够通过切换Build.gradle(模块)中的databinding.enabled来修复它。。下面是一个逐步的指南,重命名了我的公司软件包(com。 abc .myapp-> com。 xyz .myapp)后,我逐步进行了操作。数据绑定按预期工作:
转到您的 Build.gradle(模块)并禁用数据绑定:
android {
dataBinding {
enabled = false
}
}
文件>使用Gradle文件同步项目
现在再次启用数据绑定:
android {
dataBinding {
enabled = true
}
}
文件>使用Gradle文件同步项目
Build>重建项目
注意:这里的某些步骤可能是不必要的,但是在项目设置过程中进行一点额外的健全性检查永远不会造成任何危害,对!
答案 1 :(得分:1)
com..Abc.Def.databinding.ActivityLoginBindingImpl .
对于那些..
答案 2 :(得分:1)
根据JAVA软件包命名约定: 程序包名称可以包含大写或小写字母[a-z],数字和下划线[_]。 您不能在命名包中使用大写字母。
答案 3 :(得分:1)
首先,您是否仅在清单中更改了软件包名称?
请注意,它可能与applicationId
不同-因此,您只能对其进行更改,并保持应用程序包不变。
RCA:也许您用来构建的OS不区分大小写,但是Java编译器是-这就是为什么它找不到类的原因。绑定与其他生成的类(例如,注释处理器生成的dagger 2类)一起生成,每个生成器在文件夹结构内创建自己的文件,以反映类包 BUT,如果包仅大/小写字母不同,则第二个生成器将使用相同的名称错误的文件夹。原因是如果操作系统不区分大小写,则假定该文件夹已经存在,但Java编译器不存在。
其他解决方案(不保留应用程序包的原样)是: