R8 缩小:多次定义类型
R8 minify: Type defined multiple times
构建签名版本 APK 时出现以下错误:
.gradle/caches/transforms-2/files-2.1/532a317ccd54c8ae4f622faeb8b534a9/jetified-wordup-core-0.2.1-runtime.jar:de/codereddev/wordup/database/WordDao_Impl.class,
Type de.codereddev.wordup.database.WordDao_Impl 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.class,
/home/codered_dev/MySoundboardApp/app/build/intermediates/javac/release/classes/de/codereddev/wordup/database/WordDao_Impl.class
这个 Room DAO 定义来自 library 我自己创建的。
查看 .jar
文件我可以找到这个:
这只会在发布时发生。我仍然可以毫无问题地构建和 运行 调试。
很遗憾,我找不到错误。希望这里的任何人都可以给我提示。
我首先假设这可能是因为该库包含 Room 数据库的标准定义,而我使用该库的应用程序包含其自己的自定义定义,其中包含相同的 DAO。所以注释处理器可能会处理 DAO 两次。但是我无法正确检查它。
如果重要的是要知道:我也在使用 Koin 进行依赖注入。
不幸的是,我不完全知道原因,但我通过从库中删除 Room kaptCompiler 而只在使用该库的应用程序中使用它来使库工作。
如果同一个包被不同的模块使用,就会发生这种情况,例如一个库和使用该库的应用程序都使用 org.foo.bar
作为包。如果使用不同的包,错误将消失。
我解决了这个问题:
在我的 lib-base
中,我有一个 WordDao
(baseDatabase),
abstract fun dao(): WordDao
但是在我的module-word
(wordDatabase)中,也有一个
abstract fun dao(): WordDao
所以,我把module-word
中的abstract fun dao(): WordDao
删掉后,就解决了这个问题
构建签名版本 APK 时出现以下错误:
.gradle/caches/transforms-2/files-2.1/532a317ccd54c8ae4f622faeb8b534a9/jetified-wordup-core-0.2.1-runtime.jar:de/codereddev/wordup/database/WordDao_Impl.class,
Type de.codereddev.wordup.database.WordDao_Impl 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.class,
/home/codered_dev/MySoundboardApp/app/build/intermediates/javac/release/classes/de/codereddev/wordup/database/WordDao_Impl.class
这个 Room DAO 定义来自 library 我自己创建的。
查看 .jar
文件我可以找到这个:
这只会在发布时发生。我仍然可以毫无问题地构建和 运行 调试。
很遗憾,我找不到错误。希望这里的任何人都可以给我提示。
我首先假设这可能是因为该库包含 Room 数据库的标准定义,而我使用该库的应用程序包含其自己的自定义定义,其中包含相同的 DAO。所以注释处理器可能会处理 DAO 两次。但是我无法正确检查它。
如果重要的是要知道:我也在使用 Koin 进行依赖注入。
不幸的是,我不完全知道原因,但我通过从库中删除 Room kaptCompiler 而只在使用该库的应用程序中使用它来使库工作。
如果同一个包被不同的模块使用,就会发生这种情况,例如一个库和使用该库的应用程序都使用 org.foo.bar
作为包。如果使用不同的包,错误将消失。
我解决了这个问题:
在我的 lib-base
中,我有一个 WordDao
(baseDatabase),
abstract fun dao(): WordDao
但是在我的module-word
(wordDatabase)中,也有一个
abstract fun dao(): WordDao
所以,我把module-word
中的abstract fun dao(): WordDao
删掉后,就解决了这个问题