实现数据绑定后更改包名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现数据绑定后更改包名称相关的知识,希望对你有一定的参考价值。

我正在使用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. 如果我将我的包名改为旧包,它可以正常工作。

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

答案
com..Abc.Def.databinding.ActivityLoginBindingImpl .

那些..检查那里是否没有空包装

另一答案

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

另一答案

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

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

其他解决方案(除了保留app包之外)是:

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

以上是关于实现数据绑定后更改包名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用视图绑定从片段更改父活动中的视图[重复]

更改包名称后 FCM 通知不起作用

OneSignal 通知在更改包名称后停止工作

任何更改后的 Android Firebase 数据库活动/片段正在关闭

检测具有相同名称但不同值的 Angular 绑定的更改?

更改升级后的 Android 应用程序的包名称