【问题标题】:Importing Google Play Services causes DexIndexOverflowException导入 Google Play 服务导致 Dax Index OverflowException
【发布时间】:2016-02-03 16:17:17
【问题描述】:

我正在尝试使用 GoogleApiclient 实现 View.OnClickListener 接口,如下所示

    public class MainActivity extends Activity implements
 View.OnClickListener,GoogleApiClient.ConnectionCallbacks,OnConnectionFailedListener, com.google.android.gms.location.LocationListener{
    }

但这失败并出现以下错误

错误:任务 ':app:dexDebug' 执行失败。 com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令 'C:\Program Files\Java\jdk1.8.0_51\bin\java.exe'' 完成 非零退出值 2

以下是 Gradle 控制台错误 注意:

 H:\xxx\app\src\main\java\com\dbprox\css\MainActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:preDexDebug UP-TO-DATE
:app:dexDebug
AGPBI: {"kind":"simple","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","sources":[{}]}
AGPBI: {"kind":"simple","text":"com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:188)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:277)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:245)","sources":[{}]}
AGPBI: {"kind":"simple","text":"\tat com.android.dx.command.Main.main(Main.java:106)","sources":[{}]}


 FAILED

FAILURE: Build failed with an exception.
  • 出了什么问题: 任务 ':app:dexDebug' 执行失败。

    com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_51\bin\java.exe'' 完成非零退出值 2

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

构建失败

【问题讨论】:

    标签: java android google-play-services


    【解决方案1】:

    由于您要导入的库数量,您的项目已超过 65536 个方法。

    不过,您很幸运,因为 Google Play 服务现在允许您选择要导入的子模块,而不是导入整个内容。 这使您可以快速轻松地解决此问题。

    来自the documentation

    在 6.5 之前的 Google Play 服务版本中,您必须编译 整个 API 包到您的应用程序中。在某些情况下,这样做会使 在您的应用程序中保持方法的数量变得更加困难(包括 65,536 下的框架 API、库方法和您自己的代码) 限制。

    从 6.5 版开始,您可以选择性地编译 Google Play 服务 API 到您的应用中。

    因此,如果您只需要 Google 云端硬盘,请替换:

    compile 'com.google.android.gms:play-services:9.2.0' 
    

    有了这个:

    compile 'com.google.android.gms:play-services-drive:9.2.0' 
    

    【讨论】:

      【解决方案2】:

      我认为您的某些 jar 文件无法编译。您应该进入build.gradle 文件并查看您的依赖项。如果您只是导入一些 jar 文件,您可以尝试一次删除并添加它们。这将帮助您确定导致错误的原因。

      对于错误:MainActivity.java 使用或覆盖了已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以了解详细信息。,您可能使用的是旧版本的 appcompat 库。你可以参考这个link

      【讨论】:

      • 问题是编译 'com.google.android.gms:play-services:8.3.0',将其从 build.girdle 中删除。我能够构建项目。我需要这个库来连接到谷歌驱动器。如何添加这个库有任何问题。编译 'com.android.support:appcompat-v7:23.1.1' 编译 'com.android.support:design:23.1.1'编译 'com.dropbox.core:dropbox-core-sdk:2.0-beta-5' 编译 'com.google.code.gson:gson:2.3.1' 编译 'com.microsoft.services.msa:msa-auth: 0.8.4' 编译 'com.microsoft.aad:adal:1.1.7' //编译 'com.google.android.gms:play-services:8.3.0'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多