如何修复 android 多个 dex 文件定义异常
How to fix android Multiple dex files define exception
Android 4.2 ZBarCodescan java 应用程序需要在 Windows 7 x64 计算机上编译。
它的源码是located here.
Android Studio 已安装,并使用 Github 导入命令导入代码。
在 gradle 文件中 API 已更改为 23
compileSdkVersion 23
根据
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-支持-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 导入修复分支
url 但测试按钮和导入产生错误
如何导入这个分支?
当我遇到同样的错误时,我不得不在 build.gradle 文件中注释掉以下行:
编译文件树(目录:'libs',包括:'*.jar')
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
发生这种情况是因为您添加了两次相同的内容 class。
在您的情况下,您使用的是:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:appcompat-v7:23.1.1'
}
appcompat-v7
与 support-v4
有依赖关系。
您的 libs 文件夹中有 android-support-v4.jar
。
删除 android-support-v4.jar(您不需要它,因为 appcompat 已经有了)。
在 Android Studio 中运行后,我对库进行了 pull request。
如果您在尝试构建时遇到此错误
SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
或者您没有看到,但是在执行导入时缺少 local.properties
的任何错误,然后添加指向您的 Android SDK 位置的 local.properties
文件,然后尝试 import/rebuild.
例如在 Mac 上,该文件将包含这一行,但显然更改文件路径以指向您各自 SDK 的位置
sdk.dir=/usr/local/opt/android-sdk
完成后,它应该可以毫无问题地加载到 Android Studio 中。
该代码还在 4.2 模拟器上进行了测试。
通过 Git 终端的简单方法(可以用 Git 桌面做同样的事情)。
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)
Use https://github.com/cricket007/DeviceSDK.git as the Git repo
Open Project, you can ignore most errors that popup
Go the the Menu Bar, select VCS > Enable Version Control Integration
Choose Git
Go back to VCS > Git > Branches
Checkout fixes as a new local branch
Name the branch.
Choose Force Checkout if prompted
I don't know what clicking the Run button does with a Gradle project, but you should open Gradle View on the right side and open TestDemo, select installDebug
从这里开始,您需要上述 local.properties
文件的解决方案,并在物理设备上启用 ADB 调试或在模拟器上进行测试。
Android 4.2 ZBarCodescan java 应用程序需要在 Windows 7 x64 计算机上编译。
它的源码是located here.
Android Studio 已安装,并使用 Github 导入命令导入代码。 在 gradle 文件中 API 已更改为 23
compileSdkVersion 23
根据
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-支持-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 导入修复分支 url 但测试按钮和导入产生错误
如何导入这个分支?
当我遇到同样的错误时,我不得不在 build.gradle 文件中注释掉以下行:
编译文件树(目录:'libs',包括:'*.jar')
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
发生这种情况是因为您添加了两次相同的内容 class。
在您的情况下,您使用的是:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:appcompat-v7:23.1.1'
}
appcompat-v7
与 support-v4
有依赖关系。
您的 libs 文件夹中有 android-support-v4.jar
。
删除 android-support-v4.jar(您不需要它,因为 appcompat 已经有了)。
在 Android Studio 中运行后,我对库进行了 pull request。
如果您在尝试构建时遇到此错误
SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
或者您没有看到,但是在执行导入时缺少 local.properties
的任何错误,然后添加指向您的 Android SDK 位置的 local.properties
文件,然后尝试 import/rebuild.
例如在 Mac 上,该文件将包含这一行,但显然更改文件路径以指向您各自 SDK 的位置
sdk.dir=/usr/local/opt/android-sdk
完成后,它应该可以毫无问题地加载到 Android Studio 中。
该代码还在 4.2 模拟器上进行了测试。
通过 Git 终端的简单方法(可以用 Git 桌面做同样的事情)。
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)
Use https://github.com/cricket007/DeviceSDK.git as the Git repo
Open Project, you can ignore most errors that popup
Go the the Menu Bar, select VCS > Enable Version Control Integration
Choose Git
Go back to VCS > Git > Branches
Checkout fixes as a new local branch
Name the branch.
Choose Force Checkout if prompted
I don't know what clicking the Run button does with a Gradle project, but you should open Gradle View on the right side and open TestDemo, select installDebug
从这里开始,您需要上述 local.properties
文件的解决方案,并在物理设备上启用 ADB 调试或在模拟器上进行测试。