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

Android 在实现数据绑定后更改包名称,android,android-studio,data-binding,package,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

我正在对我的一个项目使用数据绑定,该项目名为com.abc.def。我把我所有的观点都和绑定联系在一起,比如

ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
它工作正常,但如果我将包名更改为com.Abc.Def,则在构建Apk时会产生以下错误

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

请注意

  • 我在playstore上有一个com.Abc.Def的旧版本已经上线,我正在更新版本。这就是为什么我必须更改包名
  • 我无法从整个项目中删除数据绑定,因为它涉及所有视图
  • 如果我把包名改成旧的,它就可以正常工作
  • 我已经尝试过清理、重建缓存并使其无效,然后重新启动,但没有成功

    com..Abc.Def.databinding.ActivityLoginBindingImpl .
    

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

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

    首先,您是否仅在清单中更改了包名? 请注意,它可能不同于
    applicationId
    ——因此您只能更改它并保持应用程序包的原样

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

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

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

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


  • 构建>清理项目
  • 转到Build.gradle(模块)并禁用数据绑定:

    android{
    数据绑定{
    已启用=错误
    }
    }

  • 文件>将项目与渐变文件同步

  • 构建>重建项目(毫不奇怪:您将收到大量错误消息)
  • 现在再次启用数据绑定:

    android{
    数据绑定{
    启用=真
    }
    }

  • 文件>将项目与渐变文件同步

  • 构建>重建项目



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

    对不起,麦克斯。它的打字错误。我的错。更新的问题。但正如我在问题中提到的。我已经有一个大写字母的版本了
    com.Abc.Def
    。有什么解决办法吗?我不明白。我使用的是Windows for Android Studio,我已经替换了整个项目模块中的包名。请确认-您已更改:
    所有数据绑定类都应使用此包生成。你的应用程序模块包是什么(我的意思是你所有的类都在这个包里)?嘿,Tejas,你找到解决方案了吗,我也面临着同样的问题。这是可行的,但我只是想补充一下,如果您使用的是导航组件,最好仔细检查导航图文件,如果没有您以前的包名的痕迹。我遵循了这些步骤,但结果是相同的,在重新启动Android Studio后,修复了错误,就像魔咒一样!这对我不起作用。