如何修复android多个dex文件定义异常

时间:2016-03-19 14:58:45

标签: android android-studio gradle android-gradle dex

Android 4.2 ZBarCodescan java应用程序需要在Windows 7 x64计算机中编译。

其源代码为located here

安装了Android Studio,并使用Gi​​thub导入命令导入代码。 在gradle文件中API已更改为23

compileSdkVersion 23 

根据

How to use eclipse project from github for Android development

Android studio Build APK命令会产生异常

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)

尝试通过添加行来解决此问题

dexOptions {
    preDexLibraries = false
}

根据项目gradle行

Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

导致错误

Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoJellyBeanMr2;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl;

如何解决这个问题?

Answer here建议检查依赖树。如何在Android Studio中获取此树以及如何修复它?

删除android-support-v4.jar异常后

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)

仍然会发生。

更新。我尝试使用https://github.com/cricket007/DeviceSDK/tree/fixes importfixes分支 url但是测试按钮和导入产生错误

error

如何导入此分支?

3 个答案:

答案 0 :(得分:5)

  

意外的顶级例外情况:   com.android.dex.DexException:多个dex文件定义了Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat $ AccessibilityServiceInfoVersionImpl;

这是因为你加了两次同一个班级。

在您使用的情况下:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.android.support:appcompat-v7:23.1.1'
}

appcompat-v7support-v4有依赖关系 您的libs文件夹中有android-support-v4.jar

删除android-support-v4.jar(你不需要它,因为appcompat已经有了它)。

答案 1 :(得分:1)

在Android中使用后,我向该库创建了pull request

如果在尝试构建时出现此错误

  

找不到SDK位置。使用sdk.dir在local.properties文件中或使用ANDROID_HOME环境变量定义位置。

或者您没有看到,但是在导入时会遗漏任何错误local.properties,然后添加指向Android SDK位置的local.properties文件,然后尝试导入/重建。

例如在Mac上,该文件将包含此行,但显然会将文件路径更改为指向各自SDK的位置

sdk.dir=/usr/local/opt/android-sdk

完成后,它应该加载到Android Studio没有问题。

代码也在4.2仿真器上进行了测试。

通过Git终端的简单方法(可以使用Git Desktop执行相同操作)。

git clone https://github.com/cricket007/DeviceSDK /path/to/download/
cd /path/to/download/
git branch fixes

然后将/ path / to / download / DeviceSDK导入Android Studio作为导入项目Gradle

漫长的道路(通过Android Studio)

  

使用 https://github.com/cricket007/DeviceSDK.git 作为Git回购

Import

  

打开Project,您可以忽略弹出的大多数错误

     

进入菜单栏,选择 VCS>启用版本控制集成

Enable VCS

  

选择Git

     

返回 VCS> Git>分支

     

Checkout修复为新的本地分支

Pick Branches

Checkout

  

命名分支。

     

如果出现提示,请选择强制结帐

     

我不知道点击“运行”按钮对Gradle项目的影响,但是您应该打开右侧的Gradle View并打开TestDemo,选择 installDebug

Gradle View

从这里开始,您需要上面的local.properties文件解决方案,并在物理设备上启用ADB调试或在模拟器上进行测试。

答案 2 :(得分:0)

当我遇到同样的错误时,我必须在build.gradle文件中注释掉以下行:

编译fileTree(dir:' libs',包括:' * .jar')