导入Google Play服务会导致DexIndexOverflowException

时间:2016-02-03 16:17:17

标签: java android google-play-services

我正在尝试使用和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控制台错误 OTE:

 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:进程'命令' C:\ Program Files \ Java \ jdk1.8.0_51 \ bin \的java.exe''完成非零退出值2

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

建立失败

2 个答案:

答案 0 :(得分:19)

由于您要导入的库数量,您的项目已超过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' 

答案 1 :(得分:0)

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

对于错误: MainActivity.java使用或覆盖已弃用的API。 注意:使用-Xlint重新编译:弃用以获取详细信息。,您可能正在使用旧版本的appcompat库。您可以参考此link