【问题标题】:Gradle Compilation Errors when adding 'com.amazonaws:aws-java-sdk:1.10.1'添加 'com.amazonaws:aws-java-sdk:1.10.1' 时出现 Gradle 编译错误
【发布时间】:2015-09-06 12:35:10
【问题描述】:

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

警告:依赖 commons-logging:commons-logging:1.1.3 被忽略 用于调试,因为它可能与提供的内部版本冲突 由安卓。如有问题,请用jarjar重新打包到 更改类包

警告:依赖 org.apache.httpcomponents:httpclient:4.3.6 是 忽略调试,因为它可能与内部版本冲突 由安卓提供。如有问题,请重新包装 jarjar 更改类包

警告:依赖 commons-logging:commons-logging:1.1.3 被忽略 发布,因为它可能与内部版本冲突 由安卓提供。如有问题,请重新包装 jarjar 更改类包

警告:依赖 org.apache.httpcomponents:httpclient:4.3.6 是 发布时忽略,因为它可能与内部版本冲突 由安卓提供。如有问题,请重新包装 jarjar 更改类

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

意外的顶级异常:
com.android.dex.DexIndexOverflowException: 方法 ID 不在 [0, 0xffff]: 65536 在 com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502) 在 com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) 在 com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) 在 com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) 在 com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 在 com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) 在 com.android.dx.command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx.command.Main.main(Main.java:106) 错误:执行失败 对于任务':mobile:dexDebug'。

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

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令 'C:\Program Files\Java\jdk1.7.0_79\bin\java.exe'' 完成 非零退出值 2

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

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

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'
}

在我的主要活动中,我添加了这个:

public class UAMPApplication extends MultiDexApplication

而不是这个:

public class UAMPApplication extends Application

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

【问题讨论】:

    标签: java amazon-web-services android-studio build.gradle


    【解决方案1】:

    我将回答这个问题并解释为什么我的 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 问题,用这个程序告诉你:来自 GitHub 的https://github.com/mihaip/dex-method-counts

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。我真的很想限制链接中讨论的依赖关系,但我不确定去哪里才能做到这一点。我会排除某些依赖项吗?或者你知道哪个网站可以帮助我吗?
      • 除非你有你不真正使用的依赖项 / 可以剥离并只取相关代码,我建议去多 dex 路径:stackoverflow.com/a/27284064/785121
      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多