实施数据绑定后更改程序包名称

时间:2018-07-10 10:27:47

标签: android android-studio data-binding package

我将数据绑定用于我的一个项目,项目名称为 com.abc.def 。我已经将所有视图与

这样的绑定相关联
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);

它工作正常,但是如果我将软件包名称更改为 com.Abc.Def ,则在构建Apk时会产生以下错误。

  

原因:无法猜测   com.Abc.Def.databinding.ActivityLoginBindingImpl。

请注意

  1. 我在Playstore上使用com.Abc.Def建立了旧版本,我正在更新版本。这就是为什么我必须更改程序包名称。
  2. 我无法从整个项目中删除数据绑定,因为它与所有视图相关。
  3. 如果我将包裹名称更改为旧的包裹,则可以正常工作。

我已经尝试过清理,重建并使缓存无效并重新启动。但是没有运气。

4 个答案:

答案 0 :(得分:8)

我刚遇到同样的问题。我能够通过切换Build.gradle(模块)中的databinding.enabled来修复它。。下面是一个逐步的指南,重命名了我的公司软件包(com。 abc .myapp-> com。 xyz .myapp)后,我逐步进行了操作。数据绑定按预期工作:


  1. 构建>清理项目
  2. 转到您的 Build.gradle(模块)禁用数据绑定

    android { dataBinding { enabled = false } }

  3. 文件>使用Gradle文件同步项目

  4. Build>重建项目(毫不奇怪:您会收到大量错误消息)
  5. 现在再次启用数据绑定

    android { dataBinding { enabled = true } }

  6. 文件>使用Gradle文件同步项目

  7. Build>重建项目


注意:这里的某些步骤可能是不必要的,但是在项目设置过程中进行一点额外的健全性检查永远不会造成任何危害,对!

答案 1 :(得分:1)

com..Abc.Def.databinding.ActivityLoginBindingImpl .

对于那些..

,检查那里是否没有空包

答案 2 :(得分:1)

根据JAVA软件包命名约定: 程序包名称可以包含大写或小写字母[a-z],数字和下划线[_]。 您不能在命名包中使用大写字母。

答案 3 :(得分:1)

首先,您是否仅在清单中更改了软件包名称? 请注意,它可能与applicationId不同-因此,您只能对其进行更改,并保持应用程序包不变。

RCA:也许您用来构建的OS不区分大小写,但是Java编译器是-这就是为什么它找不到类的原因。绑定与其他生成的类(例如,注释处理器生成的dagger 2类)一起生成,每个生成器在文件夹结构内创建自己的文件,以反映类包 BUT,如果包仅大/小写字母不同,则第二个生成器将使用相同的名称错误的文件夹。原因是如果操作系统不区分大小写,则假定该文件夹已经存在,但Java编译器不存在。

其他解决方案(不保留应用程序包的原样)是:

  • 将应用程序中的所有程序包重命名为与应用程序包或程序包不同的其他程序包 使用区分大小写的操作系统(macOS可以通过这种方式格式化,或者 linux)