gpt4 book ai didi

java - Gradle 从 lib 中排除 java 类,替换为自己的类以避免重复

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:15 25 4
gpt4 key购买 nike

在 Android Studio 中,有一个特定的文件 (src/org/luaj/vm2/lib/jse/JavaMethod.java),我需要从通过 Gradle 拉入的包中覆盖它(dependencies {compile 'org.luaj:luaj-jse:3.0.1'})。

我使用完全相同的路径将文件复制到我的源目录中并对其进行了更改。这对于使用它的单个 JUnit 测试用例来说工作正常。它也看起来正在正常编译我的项目(目前无法轻松确认)。

但是,当我尝试通过配置 ProjectType="Android Tests"一次运行所有测试时,我得到了 Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: 多个dex文件定义了Lorg/luaj/vm2/lib/jse/JavaMethod$Overload;
.

是否需要将特定任务或命令添加到我的 Gradle 文件中以确保项目选择我本地源目录中的文件?我尝试了 Copy tasksourceSets->main->java->exclude 命令,但似乎都不起作用(我可能做错了)。我还尝试了来自 this post 的“编译”下的“排除模块/组”指令.

运行/调试确认的非默认设置:

  • Type=Android 测试
  • Module=我的模块
  • 测试:全部打包
  • 包:“测试”

我所有的 JUnit 测试用例都在“测试”包中。

任何使它起作用的答案都可以。如果不是 Gradle,可能是 android list 或本地源文件本身中的某些内容。

[2016-07-24编辑]当我的 android 模拟器运行较低的 API 时,该错误也会发生在正常 编译中。 API 16 和 19 会出错,但 API 23 不会。

最佳答案

问题:链接您的应用时,链接器找到两个版本

  • org.luaj:luaj-jse:3.0.1:org.luaj.vm2.lib.jse.JavaMethod 和
  • {localProject}:org.luaj.vm2.lib.jse.JavaMethod

如何修复:告诉 gradle 从构建中排除 org.luaj:luaj-jse:3.0.1:org.luaj.vm2.lib.jse.JavaMethod

android {
packagingOptions {
exclude '**/JavaMethod.class'
}
}

我没有用“排除类”尝试过这个,但它可以像“复制”一样删除重复的 gpl 许可文件。

如果这个“排除”不起作用你可以

  • 下载库org.luaj:luaj-jse:3.0.1到本地libs文件夹,
  • 使用 zip-app 打开 jar/aar 并手动删除重复的类。
  • 从依赖项中删除 org.luaj:luaj-jse:3.0.1,因为它现在是从 lib 文件夹加载的

关于java - Gradle 从 lib 中排除 java 类,替换为自己的类以避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383440/

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