gpt4 book ai didi

android - 在启用了 R8 的模块中发现重复的类

转载 作者:行者123 更新时间:2023-11-29 22:55:08 25 4
gpt4 key购买 nike

我创建了两个 aar 库:com.example:test1:1.0.0 和 com.example:test2:1.0.0。我将这些库添加到我的主应用程序中,并在构建 Android-Studio 后抛出错误:

在模块 classes.jar (com.example:test1:1.0.0) 和 classes.jar (com.example:test2:1.0.0) 中发现重复类 com.example.utils.a

我发现发生此错误是因为两个库在同一个包 (com.example.utils) 中都有类,并且在混淆后 R8 创建了具有相同全名的类 (a.class)(我在 aar 的 classes.jar 中看到了这个).如果我在我的库的属性中禁用 R8,这个错误就消失了。

'a' 不是库类:混淆后所有库类名称保持不变,a.class 由 R8 额外添加到包中。我阅读了 R8 文档,但没有发现任何有关此问题的信息。有什么方法可以解决这个问题而无需在我的一个库中对包进行 ranaming?

最佳答案

当创建两个库时,最好使用两个不同的命名空间,否则当“意外”将同名的类添加到两个库时,即使不使用 R8 也可能会出现重复的类。所以在你的情况下使用 com.example.test1com.example.test2

根据您的用例,不将 R8 应用于库,而是仅将 R8 应用于包括两个库的最终应用程序可能也是更好的选择。缩小库主要是为了使分发大小更小,并重命名内部结构以避免库用户(无意或有意)依赖可能在库版本之间发生变化的内部结构。

当缩小库时,您还需要考虑选项 -keeppackagenames 以确保所有重命名的类都保留在库的包中。否则你可能会上课,例如a.a.a.a.class 在多个库中。

如果您无法控制 shadow 等工具的库出现此问题可用于重新定位。

关于android - 在启用了 R8 的模块中发现重复的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57510469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com