【问题标题】:Change Package Name after implementation of data binding实现数据绑定后更改包名称
【发布时间】:2018-12-18 03:52:17
【问题描述】:

我将 Databinding 与我的一个项目名称为 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. 如果我将包名更改为旧包名,它可以正常工作。

我已经尝试过 clean 、rebuild and invalidate cache and restart 。但是没有运气。

【问题讨论】:

  • Hey Tejas,你找到解决方案了吗,我也面临同样的问题。

标签: android android-studio data-binding package


【解决方案1】:
com..Abc.Def.databinding.ActivityLoginBindingImpl .

检查那里是否没有空包,对于那些..

【讨论】:

  • 对不起,麦克斯。它的错字。我的错 。更新的问题。
【解决方案2】:

根据 JAVA 包命名约定: 包名可以包含大写或小写字母[a-z]、数字和下划线[_]。 在命名包时不能使用大写字母。

【讨论】:

  • 但正如我在问题中提到的那样。我已经有一个大写字母的版本。 com.Abc.Def 。那么有什么解决办法吗?
【解决方案3】:

首先,你是否只在 Manifest 中更改了包名? 请注意,它可能与 applicationId 不同 - 因此您只能更改它并保留应用程序包原样。

RCA: 可能您用于构建的操作系统不区分大小写,但 java 编译器是 - 这就是它找不到类的原因。绑定与其他生成的类一起生成(例如由注释处理器生成的 dagger 2 类),每个生成器在反映类包的文件夹结构中创建自己的文件 但是如果包仅在大/小字母上有所不同,第二个生成器将使用相同文件夹名称错误。原因是如果操作系统不区分大小写,它假定文件夹已经存在但 java 编译器不存在。

其他解决方案(保留应用程序包除外)是:

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

【讨论】:

  • 我听不懂。我正在为 Android Studio 使用 Windows,并且我已经替换了整个项目模块中的包名称
  • 只是为了确认 - 你已经改变了:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" **package="com.abc.def**">, 所有数据绑定类都应该使用这个包生成。你的应用模块包是什么(我的意思是你所有的课程都在这个里面)?
【解决方案4】:

我刚刚遇到了同样的问题。我能够通过在 Build.gradle(模块)中切换 databinding.enabled 来修复它。以下是我在重命名公司包 (com.abc.myapp -> com.xyz.myapp) 后所经历的一步一步的小指南,其中让数据绑定按预期工作:


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

    android { dataBinding { enabled = false } }

  3. 文件 > 将项目与 Gradle 文件同步

  4. Build > Rebuild Project(不足为奇:你会收到大量错误消息)
  5. 现在再次启用数据绑定

    android { dataBinding { enabled = true } }

  6. 文件 > 将项目与 Gradle 文件同步

  7. 构建 > 重建项目


注意:这里的一些步骤可能是不必要的,但是在项目设置期间进行一些额外的健全性检查从来没有造成任何伤害,对吧!?

【讨论】:

  • 这可行,但我只想补充一点,如果您使用的是导航组件,如果没有您以前的包名称的痕迹,最好仔细检查您的 nav_graph 文件
  • 我遵循了这些步骤,但结果是一样的,在重新启动 Android Studio 后修复了错误
  • 工作就像一个魅力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
相关资源
最近更新 更多