在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: Multiple dex files define Lorg/luaj/vm2/lib/jse/JavaMethod$Overload;
。
是否需要将特定任务或命令添加到我的Gradle文件中,以确保项目选择本地源目录中的文件?我尝试了Copy task和sourceSets->main->java->exclude
命令,但似乎都不起作用(我可能做错了)。我还尝试了this post中“compile”下的“exclude module/group”指令。
运行/调试确认的非默认设置:
我所有的JUnit测试用例都在“测试”包中。
任何使该方法起作用的答案都可以。如果不是Gradle,则可能是android list 或本地源文件本身中的东西。
[2016-07-24编辑]
当我的Android模拟器运行较低的API时,在正常的编译中也会发生该错误。 API 16和19出错,但API 23没有出错。
最佳答案
问题:链接您的应用程序时,链接器会找到两个版本
如何解决:告诉gradle到,将从组织中排除org.luaj:luaj-jse:3.0.1:org.luaj.vm2.lib.jse.JavaMethod
android {
packagingOptions {
exclude '**/JavaMethod.class'
}
}
我没有使用“排除类”进行尝试,但是它可用于删除重复的gpl许可证文件,例如“复制”。
如果此“排除”不起作用,您可以