Gradle 添加 'com.amazonaws:aws-java-sdk:1.10.1' 时出现编译错误

Gradle Compilation Errors when adding 'com.amazonaws:aws-java-sdk:1.10.1'

我正在 运行ning Android Studio 并且我的应用程序一直 运行ning 完美,直到我执行以下操作。当我将 "compile 'com.amazonaws:aws-java-sdk:1.10.1'" 添加到我的 gradle 文件时,我在重新构建项目时收到以下警告。

Warning:Dependency commons-logging:commons-logging:1.1.3 is ignored for debug as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages

Warning:Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for debug as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages

Warning:Dependency commons-logging:commons-logging:1.1.3 is ignored for release as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages

Warning:Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for release as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class

当我 运行 应用程序时,我收到 4 条类似上面的警告,当我 运行 我的移动应用程序时收到 1 条错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger.updateIndex(DexMerger.java:502) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) at com.android.dx.command.dexer.Main.run(Main.java:246) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106) Error:Execution failed for task ':mobile:dexDebug'.

我认为这是这里的主要错误:

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 2

更新: nirs 回答了这个问题的原因。但是,它仍然没有编译并给出相同的错误。

这是我当前的 gradle 具有 MultiDex 功能的文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.android.uamp"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 2
        versionName "1.1"

        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    lintOptions {
        abortOnError true
    }
    dexOptions {
        preDexLibraries = false
    }

    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
            if (dx.additionalParameters == null) {
                dx.additionalParameters = ['--multi-dex']
            } else {
                dx.additionalParameters += '--multi-dex'
            }
        }
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services-cast:7.5.0'
    compile 'com.google.android.support:wearable:1.2.0'
    compile 'com.android.support:support-v4:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:mediarouter-v7:22.0.0'
    compile(name: 'CastCompanionLibrary-debug', ext: 'aar')
    compile 'com.github.amlcurran.showcaseview:library:5.0.0'
    compile 'com.amazonaws:aws-java-sdk:1.10.1'
    compile 'com.android.support:multidex:1.0.1'
}

在我的主 activity 中,我添加了这个:

public class UAMPApplication extends MultiDexApplication

而不是这个:

public class UAMPApplication extends Application

我已经添加了 MultiDex 应用程序所需的所有内容,但它仍然无法编译。

当您添加 Amazon SDK 时,您的应用似乎达到了 Android 允许的最大方法数(超过 65K)。 请参阅此处了解如何为 multidex 配置您的应用程序: https://developer.android.com/tools/building/multidex.html

我要回答这个问题并解释为什么我的 gradle 有错误。 (来自 HackHands 的 Neville Bonavia 帮助我理解了原因)。这不是 MultiDex 问题。 在我的 gradle 文件中,我需要编译 Android SDK 而不是 Java SDK。 这些是我所做的更改:

build.gradle 之前

...
    compile 'com.amazonaws:aws-java-sdk:1.10.1'
...

build.gradle 在

之后
...
    compile 'com.amazonaws:aws-android-sdk-core:2.2.4'
    compile 'com.amazonaws:aws-android-sdk-s3:2.2.4'
...

我的程序现在 运行 太棒了!希望这可以帮助。最后,要知道它是否真的是 MultiDex 问题,用这个程序告诉你:https://github.com/mihaip/dex-method-counts from GitHub.