Kotlin 无法编译库

2024-05-27

There's this http://github.com/theapache64/BugMailer我创建的库是为了通过电子邮件报告异常情况。它适用于 Android Java 项目,但不适用于 Android Kotlin。当我添加库的编译脚本时(compile 'com.theah64.bugmailer:bugmailer:1.1.9')并尝试构建 APK,但出现以下错误。

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

这是我的应用程序的 build.gradle 文件



apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.theapache64.calculator"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "4g"
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:27.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'com.theah64.bugmailer:bugmailer:1.2.0'
}

  

我用谷歌搜索了很多并尝试过multiDexEnabled解决方案。但它不起作用。


您遇到的问题是由冲突的依赖项引起的,您的两个依赖项定义了相同的类。如果你尝试编译

./gradlew --stacktrace app:assembleDebug

你会看到这个错误

Caused by: com.android.dex.DexException: Multiple dex files define Lorg/intellij/lang/annotations/MagicConstant;

现在,您可以使用以下命令分析所有依赖关系树

./gradlew app:dependencies

并查看这些(此处简化):

+--- com.theah64.bugmailer:bugmailer:1.2.0
|    +--- org.jetbrains:annotations-java5:15.0

and

 +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.30
 |    \--- org.jetbrains:annotations:13.0

因此,Kotlin std lib 和 bugmailer 都使用 org.jetbrains 注释,但来自 2 个不同的模块。这会导致问题,因为同一个类(在这种情况下为 MagicConstant)被定义了两次,我认为重复的条目会更多。

解决方案是排除 2 个传递依赖项之一,例如

compile('com.theah64.bugmailer:bugmailer:1.2.0') {
    exclude group: 'org.jetbrains', module: 'annotations-java5'
}

您将能够编译该应用程序,但是请记住,该解决方案基于以下假设:bugmailer 可以很好地工作org.jetbrains:annotations:13.0代替org.jetbrains:annotations-java5:15.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin 无法编译库 的相关文章

随机推荐

  • 如何使用多线程

    我有这个代码 import thread def print out m1 m2 print m1 print m2 print n for num in range 0 10 thread start new thread print o
  • 急于获取引用时重复(多对一)

    首先 是的 我正在使用 DistinctRootEntityResultTransformer 我有以下 Fluent NHibernate 映射 public FirstObjectMap Id x gt x Id HasMany
  • java中a += 10 和a = a + 10 之间的区别? [复制]

    这个问题在这里已经有答案了 Are a 10 and a a 10两者相同 还是有区别 我在学习Java作业时遇到了这个问题 正如您现在提到的铸造 在这种情况下有一个区别 byte a 5 a 10 Valid a a 10 Invalid
  • Glide:记录每个请求

    考虑下面的代码 Glide with
  • Gluon 移动 iOS 音频播放器

    由于 JavaFx Media 尚未移植到移动平台 任何人都可以帮助我使用本机 iOS APi 来播放声音 mp3 文件 该文件将存储在我的 gluon 项目的 main resources 文件夹中 在 Android 上 我们可以轻松地
  • java中线程之间的通信:如果另一个线程完成则停止一个线程

    仅当另一个线程也在运行时 如何才能使一个线程运行 这意味着 如果我从一个线程中的运行返回 那么我希望另一个线程也停止运行 我的代码看起来像这样 ClientMessageHandler clientMessagehandler new Cl
  • 使用 Python Paramiko 进行端口转发和开放 SFTP

    我已经使用 ssh 在服务器上执行命令 现在我必须对不同的 IP 执行另一个 ssh 同时保持旧的 ssh 处于活动状态 这个新 IP 是端口转发 然后将用于执行 SFTP 我面临的问题是两个 ssh 连接都在同一端口上 因此无法进行第二次
  • 如何获取subprocess.run启动的进程的pid并杀死它

    我使用的是 Windows 10 和 Python 3 7 我运行了以下命令 import subprocess exeFilePath C Users test test exe subprocess run exeFilePath 使用
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 源生成器:有关引用项目的信息?

    我开始使用 C 源生成器 我想要的是开始一个git describe tags long处理并填充静态GitVersion具有当前标签和哈希码作为属性的类 问题是 我没有关于引用项目的目录的信息 所以我不知道在哪里运行 git 进程 我在其
  • 连接查询或子查询

    开发人员何时使用联接而不是子查询是否有经验规则 或者它们是否相同 第一个原则是 准确地陈述查询 第二个原则是 简单明了地陈述查询 这是你通常做出选择的地方 第三个是 陈述查询 以便它能够有效地处理 如果它是一个具有良好查询处理器的数据库管理
  • Base 64 编码的有效字符范围

    我对以下内容感兴趣 是否有一个字符列表never作为 Base 64 编码字符串的一部分出现 例如 我不确定这种情况是否会发生 如果原始输入实际上有 作为它的一部分 编码会有所不同吗 这是我可以发现的 RFC 4648 http www r
  • 从函数参数构建模板?

    template
  • 通过 VPN 容器路由 Docker 容器流量

    我在我的上安装了几个容器洛克Pro64 运行 openmediavault 的 ARMv8 处理器 rev 2 v8 版本 4 1 27 1 Arrakis 一切都运转良好 我使用的容器包括 Transmission Jellyfin Ra
  • IntelliSense:对象具有与成员函数不兼容的类型限定符

    我有一个名为 Person 的类 class Person string name long score public Person string name long score 0 void setName string name voi
  • ECS 上蓝/绿部署所需的 Cloudformation 脚本

    我正在尝试编写一个云形成模板具有蓝绿部署支持的 AWS ECS 这项蓝绿功能最近由 AWS 在 ECS 中添加 但在云形成模板中找不到任何更新它的参考 他们提供了有关如何通过 UI 而不是通过云形成来完成此操作的文档 我猜想 AWS 可能不
  • 集到子集点云匹配

    我有两个 3d 坐标的点云 一个是另一个的子集 包含更少的点 它们的规模相同 我需要做的是找到两者之间的平移和旋转 我看过点云库 迭代最近点 https en wikipedia org wiki Iterative closest poi
  • 如何防止 Firefox 缓存

    我尝试了很多可能的解决方案 但无法解决问题 这些不起作用 有人可以帮忙吗 我正在使用jsp servlet application 是websphere Portal 6 1 的一个portlet 切勿
  • 在跨平台的 npm 脚本中使用环境变量

    我正在构建一个 package json 并使用 npm run 来运行一些脚本 确切地说 https docs npmjs com misc scripts https docs npmjs com misc scripts 我的脚本需要
  • Kotlin 无法编译库

    There s this http github com theapache64 BugMailer我创建的库是为了通过电子邮件报告异常情况 它适用于 Android Java 项目 但不适用于 Android Kotlin 当我添加库的编