我有 Android Studio 测试版。我用编译旧模块创建了一个新项目,但是当我尝试启动应用程序时,它没有启动并显示以下消息:
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.android.builder.dexing.DexArchiveMergerException:无法合并 dex
但我不知道如何解决这个错误。我用谷歌搜索了几个小时,但没有成功。
我的项目毕业:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta6'
classpath "io.realm:realm-gradle-plugin:3.7.1"
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我的应用程序:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "parad0x.sk.onlyforyou"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
}
}
compileOptions {
targetCompatibility 1.7
sourceCompatibility 1.7
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
lintOptions {
checkReleaseBuilds false
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//noinspection GradleCompatible
compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
compile project(path: ':loginregisterview')
}
还有我的模块 gradle:
apply plugin: 'com.android.library'
apply plugin: 'realm-android'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide:glide:4.0.0'
testCompile 'junit:junit:4.12'
compile project(path: ':parser')
}
我的第二个模块:
apply plugin: 'com.android.library'
apply plugin: 'realm-android'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
realm {
syncEnabled = true
}
useLibrary 'org.apache.http.legacy'
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile 'junit:junit:4.12'
// compile 'com.android.support:appcompat-v7:23.1.0'
// compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
// compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
// compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
compile 'com.google.code.gson:gson:2.6.2'
}
_______发现_________
当我没有导入第二个模块(解析器)时,应用程序没有在 dex 上崩溃,但是当没有导入模块时,应用程序不起作用。 :D :D
我尝试了以上所有方法,但都没有帮助。最后,我找到了适合我的工作:
应用程序/build.gradle:
android {
defaultConfig {
multiDexEnabled true
}
}
当我从 com.google.android.gms:play-services:11.2.2
更新到 com.google.android.gms:play-services:11.4.0
时,我遇到了同样的问题。这为我解决了它:
干净的重建
multiDexEnabled true
单独没有
注意警告!
有时只需要消除警告,错误就会自动消失。见下面的特殊情况:
我的模块级 build.gradle
文件中有这两个依赖项:
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'
和 Studio 警告过(除了 dex 合并问题):
所有 com.android.support 库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 27.0.2、21.0.3。示例包括 com.android.support:animated-vector-drawable:27.0.2 和 com.android.support:support-v4:21.0.3
所以我明确确定了 com.android.support:support-v4
的版本(详见 here)以及两个问题(警告和与 dex 合并有关的警告)< em>解决了:
implementation 'com.android.support:support-v4:27.0.2' // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'
有关其他类似情况,请参见下面的评论。
support:design:26.1.0
的库 (airbnb/epoxy) 后,我的构建停止工作,而我还没有这种依赖关系。我的其他支持库版本是 27.1.0。使用 27.1.0
版本添加 support:design
依赖项后,我的问题得到解决。
就我而言,不幸的是,Michel 和 Suragch 的解决方案都不适合我。
所以我通过执行以下操作解决了这个问题:
在 gradle:3.0 中,现在不推荐使用 compile 配置,应将其替换为 implementation 或 api。如需更多信息,您可以read here您可以在 Gradle Build Tool 阅读官方文档
compile 配置仍然存在,但不应使用,因为它不会提供 api 和 implementation 配置提供的保证。
最好使用实现或api而不是编译
只需将 compile 替换为 implementation,将 debugCompile 替换为 debugImplementation,将 testCompile 替换为 testImplementation 并将 androidtestcompile 替换为 androidTestImplementation
例如:而不是这个
compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide:glide:4.0.0'
像这样使用
implementation 'com.android.support:appcompat-v7:26.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.0.0'
在那之后
删除项目中的 .gradle 文件夹(请注意,要查看 .gradle,您需要切换到左上角导航器中的“项目”视图)
删除所有构建文件夹和 gradle 缓存。
从 Build 菜单中,按 Clean Project 按钮。
任务完成后,按 Build 菜单中的 Rebuild Project 按钮。
希望它会有所帮助!
.gradle
而不是 ./gradle
删除 .gradle 目录。再次运行您的应用程序。
笔记
.gradle 目录位于项目的根文件夹中。 (您可能必须先显示隐藏文件。)
每次使用 Android 3.0 更新依赖模块时,我都必须这样做。 (Android Studio 3 的最新版本似乎已经解决了这个问题。)
按照 Suragch 的建议删除 .gradle
对我来说还不够。此外,我必须执行 Build > Clean Project
。
请注意,要查看 .gradle
,您需要切换到左上角导航器中的“项目”视图:
https://i.stack.imgur.com/tJ8yA.png
我尝试了所有其他解决方案,但没有人为我工作。最后,我通过编辑 build.gradle
使用相同的依赖版本解决了它。我认为将库添加到使用不同依赖版本的支持或谷歌库的 gradle 时会出现此问题。
将以下代码添加到您的构建 gradle 文件中。然后是 clean
和 rebuild
项目。
ps:这对我来说是旧的解决方案,所以你应该使用以下库的更新版本。
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
} else if (requested.group == "com.google.android.gms") {
details.useVersion '11.8.0'
} else if (requested.group == "com.google.firebase") {
details.useVersion '11.8.0'
}
}
}
如果(1.尝试清理和重建工作)那么好
else if (2. Try to remove gradle work) then good
else-> 3.尝试添加grade.properties
android.enableD8 = false
2021 年编辑:此第 3 个选项现已弃用,请使用其他选项
其他-> 4. 将 multiDexEnabled
true 添加到您的 build.gradle
android {
compileSdkVersion 26
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
...
}
}
并添加依赖
dependencies {
compile 'com.android.support:multidex:1.0.1'}
它可能第一个适用于你等等,但它真的取决于你的问题的性质,例如
添加此库后出现错误
implementation 'com.jjoe64:graphview:4.2.2'
后来我发现我必须检查一下,我必须添加相同版本的支持库。所以我必须尝试另一个版本
compile 'com.jjoe64:graphview:4.2.1'
它解决了这个问题。所以要注意这一点。
android.enableD8 = false
已弃用。
就我而言,问题是由于房间图书馆:
compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'
将其更改为:
compile 'android.arch.persistence.room:runtime:1.0.0'
工作。
只是添加到上述解决方案:
确保在多个位置(甚至在同一个文件中)没有指向它们不同版本的重复依赖项。
嗨,我有同样的问题尝试了几乎所有的东西。因此,经过 6 个小时的漫长斗争,我最终通过逐行调试所有内容来解决。
classpath 'com.google.gms:google-services:3.0.0'
Google-services 3.0 不支持带有 playServiceVersion:11.6.0 或更低版本的 Studio 3.0 的 firebase。
implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion"
implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion"
implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion"
解决方案 :
我已将谷歌服务更改为
classpath 'com.google.gms:google-services:3.1.1'
它支持firebase服务。
希望有人节省他/她的时间。
启用 defaultConfig { multiDexEnabled true } 如果第 1 步不起作用,则转到项目结构并找出使用不同版本的外部库。双击它并删除它的 jar 文件。关闭项目并再次打开 android studio 将重建项目。问题应该消失了。
一种可能性是:存在相同的库,但依赖项中的版本不同。
我在 gradle 文件中的以下行遇到了这个问题:
编译文件树(包括:['*.jar'],目录:'libs')
编译'com.google.code.gson:gson:2.8.2'
gson 库位于我的 libs 目录中,但具有以前的版本。我从 libs 目录中删除了 gson-2.3.1.jar
,一切恢复正常。
compile fileTree(include: ['*.jar'], dir: 'libs')
也为我修复了.. 谢谢 (y)
如果在包含 kotlin 支持后出现此错误,并且其他解决方案均无效,请尝试将 app 模块 build.gradle
的 kotlin 依赖项更改为:
implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
exclude group: 'org.jetbrains', module: 'annotations'
}
这适用于我在 Android Studio 3.0 Beta 6 上。请参阅 this 答案以获取更多说明。
With Android Studio 3.0 stable build 以下步骤对我有用:
转到 SdkManager-->Android Sdk --> Sdk Tools 并将 Google play 服务更新到最新版本到 46。清理项目并重建项目。
[无法合并 DEX 已解决] 经过数小时的堆栈溢出后,我解决了“无法合并 DEX 错误”
将 gradle 中的所有 com.android.support 行更新为 v27.1.0
原因 - Android 已将其支持库更新为 v27.1.0,因此您必须将 gradle 文件中的所有 android 支持行从 26.1.0 更改为 27.1.0
确保存储库部分包含带有“https://maven.google.com”端点的 maven 部分。例如:allprojects { repositories { jcenter() maven { url "https://maven.google.com" } } }
原因:- Android 无法更新 SDK 管理器中的支持库,现在它使用 maven.google.com 进行更新,因此您必须包含它才能使用 27.1.0 支持库
更改版本后: 1. 清理项目 2. 重建项目
在下面添加命令:
android {
...
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
}
安装 Google Play 服务(最新版本)+ 包括
android {
defaultConfig {
multiDexEnabled true
}
}
在 build.gradle 中为我解决了这个问题,确保清理并重建项目!
就我而言,它是 gson-2.8.1.jar,我已将其添加到项目的 libs 文件夹中。但是SDK已经有了参考。所以不需要将 gson-2.8.1.jar 添加到 libs 文件夹中。
当我把它拿出来时,gson-2.8.1.jar 项目编译时没有这个奇怪的错误。
所以尝试修改 libs 文件夹和依赖项。
我同意小克里斯。如果您使用 Firebase 嵌入您的 AdMob 广告(或者即使您不是),即使您没有将其添加为依赖项,play-services-analytics 也会包含 play-services-ads。谷歌在他们的 11.4.0 推出中显然犯了一个错误,因为分析包括 10.0.1 版的广告,而不是 11.4.0(gradle 中的鼠标悬停提示显示了这一点)。
我在顶部手动添加了 compile 'com.google.android.gms:play-services-ads:11.4.0' ,但只有在我禁用 Instant Run: http://stackoverflow.com/a/35169716/530047
因此,它要么退回到 10.0.1,要么添加广告并禁用 Instant Run。这就是我发现的,如果它有帮助的话。
我遇到了同样的问题,并找到了我的案例的真正原因。以前,我也重新尝试了之前的所有答案,但并没有解决问题。我的wear app项目中有两个模块,build.gradle如下:
wear 模块的 build.gradle:
implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')
通用模块的 build.gradle:
implementation files('libs/farmer-motion-1.0.jar')
在升级到 gradle 3.x 之前,“实现”都是“编译”。
我使用 --stacktrace 选项运行 gradlew 以获取堆栈跟踪,当出现此问题时,您可以在 gradle 控制台窗口上单击它。发现对jar包的依赖重复了:
Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;
Farmer-motion-1.0.jar 包中的 SportSummary 类,阅读 official migration guide 后,我将 build.gradle 更改为:
wear 模块的 build.gradle:
implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')
公共模块的build.gradle:
api files('libs/farmer-motion-1.0.jar') // change implementation to api
现在wear 模块将具有由 common 模块导出的farmer-motion-1.0.jar 的依赖关系。如果运行时对jar包没有依赖,jar包的'implementation'依赖也可以改为'compileOnly'。
我也有这个问题。
我能够通过将 compileSdkVersion
和 targetSdkVersion
更改为最新版本来解决。
对于我们的项目,我们不小心添加了两次不同名称的同一个 jar。删除其中一个解决了这个问题。
libs
文件夹下,我有两个 jar 文件,其中一个只是另一个的备份,但文件名不同。
这可能不是您的问题,但是当我不小心在项目的 dependencies{} 部分中包含两个相同(但名称不同)的库时,我得到了这个错误。
对我来说,它正在更新 app\build.gradle 中的 firebase 消息:
compile 'com.google.firebase:firebase-messaging:10.0.1'
至
compile 'com.google.firebase:firebase-messaging:11.4.2'
可能的根本原因之一:重复的瞬态依赖项没有被 Android Studio 导入多模块项目正确处理。检查您的列表并将其删除。对我来说,修复实际上是这样的:
--- a/project/module/build.gradle
+++ b/project/module/build.gradle
@@ -21,5 +21,4 @@ android {
dependencies {
implementation project(':upstream-dependency-project')
implementation 'com.android.support:support-v4:18.0.0'
- implementation files('libs/slf4j-android-1.6.1-RC1.jar')
}
我为我的项目找出了这个问题的原因。我在 build.gradle 中添加了两次依赖项。一次通过添加依赖项,一次通过添加 jar 依赖项:
编译 'org.achartengine:achartengine:1.2.0' ... 实现文件('../achartengine-1.2.0.jar')
删除第一行后问题解决。
如果最重要的答案对您不起作用,您的问题可能是您有多个依赖于同一个库的依赖项。
这里有一些调试技巧。在此示例代码中,com.google.code.findbugs:jsr305:3.0.0
是有问题的库。
每次修改以检查您的解决方案时,请务必清理和重建!
使用 --stacktrace 标志构建以获取更多详细信息。它会抱怨一个类,谷歌那个类找到库。以下是设置 Android Studio 以始终使用 --stacktrace 标志运行 gradle 的方法。在构建后查看 Android Studio View > Tool Windows > Gradle Console 中的 Gradle Console 通过运行 ./gradlew -q app:dependencies 检查重复的依赖关系。每次修改 build.gradle 时都可以重新运行它。在 build.gradle, android { ...configurations.all { resolutionStrategy { // 强制库的特定版本 // 跨越所有依赖项强制 'com.google.code.findbugs:jsr305:3.0.0' } } } 在 build.gradle 中,dependencies { ... implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') { // 排除此特定导入排除组的库: 'com.google.code.findbugs' } } 在 build.gradle, android { ... configurations.all { resolutionStrategy { // 完全排除库。适用于传递 // 依赖项。 exclude group: 'com.google.code.findbugs' } } } 如果您的某些依赖项位于 jar 文件中,请打开 jar 文件并查看是否有任何冲突的类名。如果是这样,您可能必须使用新的类名重新构建 jar 或查看阴影。
更多背景阅读:
Android - 理解和支配 gradle 依赖项
Gradle 文档:Java 项目的依赖管理
Gradle 文档:ResolutionStrategy
StackOverflow:错误:与依赖项“com.google.code.findbugs:jsr305”冲突
StackOverflow:使用 Gradle 时如何排除传递依赖项的所有实例?
谷歌搜索 StackOverflow 的所有相关问题
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
在我的情况下,一个库导致了这个问题,库已成功添加到项目中,但是当我运行我的应用程序时,它显示了这个错误。因此,如果您也遇到这种情况,您可以前往 github 检查问题或提出新问题。如果您没有找到有关该库的任何解决方案,我建议您更换它。
不定期副业成功案例分享