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

问题描述 投票:3回答:3

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

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

android android-studio data-binding package
3个回答
1
投票
com..Abc.Def.databinding.ActivityLoginBindingImpl .

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


1
投票

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


1
投票

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

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

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

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