Android数据绑定:为混淆的AAR生成了错误的BR类

Android数据绑定:为混淆的AAR生成了错误的BR类,第1张

概述我想提供一个混淆的AAR库,它使用Android数据绑定.当我使用测试应用程序中的库时,只要库不被ProGuard缩小,一切正常.但是,启用ProGuard后,测试应用程序不再编译,因为无法找到生成的数据绑定类中的BR字段.由于我找不到关于这个“特定”主题的任何官方文档,我试图理解Android数据绑定

我想提供一个混淆的AAR库,它使用Android数据绑定.当我使用测试应用程序中的库时,只要库不被ProGuard缩小,一切正常.但是,启用ProGuard后,测试应用程序不再编译,因为无法找到生成的数据绑定类中的BR字段.

由于我找不到关于这个“特定”主题的任何官方文档,我试图理解AndroID数据绑定背后的魔力.机制似乎是这样的(请纠正我,如果我错了):

>为了在AAR库中使用数据绑定,嵌入应用程序也必须启用数据绑定.
>这是因为包含数据绑定指令的布局资源在AAR中未经修改而包含在内.
>因此嵌入式应用程序负责为lib中的布局生成相应的数据绑定类. (这就是为什么lib的视图模型类不能被混淆,BTW.)
> AndroID数据绑定生成器的挑战是告诉包名称与库和嵌入应用程序的区别:库的BR类必须在库的包中生成(例如com.example.lib.databinding),因为这个类可以从库的视图模型类访问.另一方面,嵌入应用程序的BR类通常应该在应用程序包(com.example.app.databinding)中生成.

这正是我的问题开始的地方.我不知道AndroID确实应对了这个挑战,我只知道在我的情况下,它适用于未经模糊处理的lib,而且它没有混淆的.当我查看嵌入式应用程序的生成源时,我看到:

>使用未经模糊处理的lib时,BR和所有* Binding.java类都在库的包中生成,并且应用程序将进行编译.
>使用混淆的lib时,BR和所有* Binding.java类都在应用程序包中生成.更糟糕的是,BR仅包含XML资源中模型变量名称的常量,而不包含视图模型类中的属性.因此,该应用程序无法编译.
>我试图在XML声明中明确地将数据绑定类的包设置为lib的包,但这并不能解决不完整的BR类的问题.

我不知道这些差异来自哪里,我已经担心唯一的解决方案可能是从lib中删除所有我很好的数据绑定内容…有没有人提出类似的经验并且可以给我一个提示,好吗?

这些是我已经添加到lib中的ProGuard异常:

-keep public class **.BR { public *; }-keep public class **.BR$* { public *; }-keepclassmembers class **.BR$* {    public static <fIElds>;}-keepclassmembers class **.R$* {    public static <fIElds>;}-keep class androID.databinding.** { *; }-keep class * extends androID.databinding.** { *; }-keep class com.example.lib.databinding.** { *; }

解决方法:

我设法让它在此期间运行,但“解决方案”是如此奇怪,我真的不想把它带到一个高效的版本……

在比较混淆和未混淆的lib的AAR文件时,我注意到未混淆的一个的classes.jar包含这三个文件:

> /com/example/lib/com.example.lib-br.bin
> /com/example/lib/com.example.lib-layoutinfo.bin
> /com/example/lib/com.example.lib-setter_store.bin

这些二进制文件包含一些我的数据绑定类名,对代码生成过程显然很重要.我只是试图将这些文件复制到我混淆的AAR的相应位置并且…它工作了!!!

但这不是最终的解决方案.如果我可以说服ProGuard简单地将这些非类文件保存在classes.jar中,那么至少它比应对更可靠.任何想法如何做到这一点?

我更希望获得有关该机制背景的一些信息,以及是否有可能避免这种丑陋的低级 *** 作来解决实际应该是标准的问题.

提前感谢您的回答!

总结

以上是内存溢出为你收集整理的Android数据绑定:为混淆的AAR生成了错误的BR类全部内容,希望文章能够帮你解决Android数据绑定:为混淆的AAR生成了错误的BR类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存