android - R8 说类型被多次定义:在 build\.transforms 和 build\tmp\kotlin-classes
问题描述
我最近从我的 Android 应用程序项目中提取了一些代码到单独的 kotlin 模块中(build.gradle 文件声明了"java-library"
和"kotlin"
插件)。
现在,任务':app:minifyQaWithR8'
失败并显示以下消息:
AGPBI: {"kind":"error","text":"类型 com.myapp.ext.models.AckResponse 定义了多次:E:\projects\myapp\ext\build\.transforms\35656f2face08400c6d53844207373f0\jetified-ext .jar:com/myapp/ext/models/AckResponse.class, E:\projects\myapp\app\build\tmp\kotlin-classes\qa\com\myapp\ext\models\AckResponse.class"}],"工具":"R8"}
我尝试删除每个模块的build
文件夹,然后使缓存/重新启动无效,然后组装,并使用不同的类得到类似的结果。但两次,地点都是一样的:一个在里面.transforms\35656f2face08400c6d53844207373f0\jetified-ext.jar
,一个在里面app\build\tmp\kotlin-classes\qa
在一个similar question
R8 团队的成员中,建议这些位置之一代表依赖项,一个代表应用程序代码,但是,我在我的应用程序代码中找不到任何相关类的实例,也没有任何迹象表明我的模块正在运行不止一次进口。
我的两个模块确实有很多相同的类可能是相关的,但是我使用以下语句仅在构建中包含其中一个:
if(api_version == "ext2") {
implementation project(":ext2")
}else{
implementation project(":ext1")
}
这些模块中的包不会出现在主应用程序代码中。
我还可以采取哪些其他步骤来追查此问题的根源?
解决方案
事实证明,我的项目中实际上存在重复的类。一开始我只是找不到它们,因为文件中的包名与文件所在的文件夹不对应。
推荐阅读
- javascript - 如果在 React 的数组中找到,则设置 ID
- azure - Microsoft B2C:在发布访问令牌之前运行自定义授权逻辑
- blazor - Blazor:如何有条件地设置元素样式
- django - Docker-compose django+mongo 应用程序卡在“正在执行系统检查...”
- node.js - 如何在没有测试的情况下为某些 Node.JS 代码生成代码覆盖率?
- node.js - docker-compose:来自 .env 的变量在服务中不可用
- laravel - 在laravel导入中验证excel文件时不显示消息
- javascript - URL 中的参数获取树中的第一个子节点,而不是选定的 Javascript
- google-apps-script - 如何使用 Google Apps 脚本将有关频道的所有视频的信息获取到 Google 表格
- android - 一段时间后,前台服务被Android杀死