R8 minify:类型定义多次

Posted

技术标签:

【中文标题】R8 minify:类型定义多次【英文标题】:R8 minify: Type defined multiple times 【发布时间】:2020-11-15 19:49:37 【问题描述】:

在构建签名发布 APK 时出现以下错误:

.gradle/caches/transforms-2/files-2.1/532a317ccd54c8ae4f622faeb8b534a9/jetified-wordup-core-0.2.1-runtime.jar:de/codereddev/wordup/database/WordDao_Impl$5.class,
Type de.codereddev.wordup.database.WordDao_Impl$5 is defined multiple times:
/home/codered_dev/.gradle/caches/transforms-2/files-2.1/532a317ccd54c8ae4f622faeb8b534a9/jetified-wordup-core-0.2.1-runtime.jar:de/codereddev/wordup/database/WordDao_Impl$5.class,
/home/codered_dev/MySoundboardApp/app/build/intermediates/javac/release/classes/de/codereddev/wordup/database/WordDao_Impl$5.class

这个 Room DAO 定义来自我自己创建的 library。

查看.jar 文件我可以找到:

这只发生在发布时。我仍然可以毫无问题地构建和运行调试。

很遗憾,我找不到错误。希望这里的任何人都可以给我一些提示。

我首先假设这可能是因为该库包含 Room 数据库的标准定义,而我使用该库的应用程序包含其自己的自定义定义,其中包含相同的 DAO。所以注释处理器可能会处理 DAO 两次。但我无法正确检查。

如果知道很重要:我也在使用 Koin 进行依赖注入。

【问题讨论】:

您好,我在 R8 团队工作,有一个问题。您在上面引用的消息 (Type de.codereddev.wordup.database.WordDao_Impl$5 is defined multiple times: /home/codered_dev/.gradle/caches/transforms-2/files-2.1/532a317ccd54c8ae4f622faeb8b534a9/jetified-wordup-core-0.2.1-runtime.jar:de/codereddev/wordup/database/WordDao_Impl$5.class,) 以 , 结尾。应该有对也找到定义的第二类的引用。您能否仔细检查错误消息中是否有第二类引用? @sgjesse 我已将帖子编辑为扩展错误消息。 更新显示类de.codereddev.wordup.database.WordDao_Impl$5在1)依赖jetified-wordup-core-0.2.1-runtime和应用代码本身app/build/intermediates/javac/release/classes/de/codereddev/wordup/database/WordDao_Impl$5.class。对于 R8,不能有重复的类。您很可能不需要定义 DAO 两次。 可能是因为在框架中有一个 RoomDatabase (RD) 定义,其中包含 DAO 的 getter,并且应用程序有自己的 RD 定义,其中还包含道?否则这将没有意义,因为应用程序中没有 DAO 类的定义。 【参考方案1】:

不幸的是,我不完全知道原因,但我通过从库中删除 Room kaptCompiler 使库正常工作,而只在使用库的应用程序中使用它。

【讨论】:

【参考方案2】:

如果不同的模块使用相同的包,例如,这可能会发生。一个库和使用该库的应用程序都使用org.foo.bar 作为包。如果使用不同的包,错误就会消失。

【讨论】:

【参考方案3】:

我解决了这个问题:

在我的lib-base 中,我有一个WordDao(baseDatabase),

abstract fun dao(): WordDao

但是在我的module-word(wordDatabase)中,也有一个

abstract fun dao(): WordDao

所以,在我删除module-word中的abstract fun dao(): WordDao后,我解决了这个问题

【讨论】:

以上是关于R8 minify:类型定义多次的主要内容,如果未能解决你的问题,请参考以下文章

类型 project.com.project.MainActivity 被定义多次

com.google.gson.ExclusionStrategy 类型定义了多次

Gradle - 多次定义类型,Android - Apache POI问题

生成签名的 apk 时出错:com.google.gson.ExclusionStrategy 类型已定义多次

类型 androidx.appcompat.resources.R$dimen 被定义了多次

如何修复错误:使用 graphql 在 apollo-server 中多次定义类型“Extra”