4

I recently upgraded to Android studio 1.2 beta. Projects that compiled fine earlier, broke. I had to make some modifications in the gradle file to get the project compile again. Now the build is successful, however, when I try to build an apk the build fails.

Here are the project details.

Gradle file:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion '22.0.1'
    defaultConfig {
        applicationId "mcc.abcd"
        minSdkVersion 16
        targetSdkVersion 22
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.google.android.gms:play-services:7.0.0'
    //compile files('libs/google-play-services.jar')
    compile project(':app:libraries:PebbleKitAndroid:app')
    compile project(':app:libraries:Weka-for-Android-master:app')
}

Build Error

:app:dexDebug
AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"}
AGPBI: {"kind":"SIMPLE","text":"com.android.dex.DexIndexOverflowException: Cannot merge new index 68094 into a non-jumbo instruction!","position":{},"original":"com.android.dex.DexIndexOverflowException: Cannot merge new index 68094 into a non-jumbo instruction!"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)","position":{},"original":"\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)","position":{},"original":"\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.transformCode(DexMerger.java:842)","position":{},"original":"\tat com.android.dx.merge.DexMerger.transformCode(DexMerger.java:842)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:813)","position":{},"original":"\tat com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:813)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:785)","position":{},"original":"\tat com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:785)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:682)","position":{},"original":"\tat com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:682)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:542)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:542)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:189)","position":{},"original":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:189)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)","position":{},"original":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)","position":{},"original":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)","position":{},"original":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)","position":{},"original":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.Main.main(Main.java:106)","position":{},"original":"\tat com.android.dx.command.Main.main(Main.java:106)"}


 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_11\bin\java.exe'' finished with non-zero exit value 2

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2 mins 44.727 secs

I have already tried changing buildToolsVersion, sdk versions, etc., but no success yet. Please help.

4

2 回答 2

4

This sounds like you've managed to hit the dex limit. A limitation of the dex format means you can only have 65536 methods in your project.

Thankfully multi dex support now exists since Android API version 21.

You can enable it like this:

android {
   defaultConfig {
      ...
      multiDexEnabled = true
      ...
   }
}

More info from the android developer site here.

Its also worth noting that you don't probably need to be including ALL of the Google Play services and you can pick and choose the required modules your app needs.

于 2015-04-17T20:15:44.583 回答
4

Reason for the failure is on the second line of your build output - "com.android.dex.DexIndexOverflowException: Cannot merge new index 68094 into a non-jumbo instruction!"

What this means is that you have hit the maximum method limit with your application, com.google.android.gms:play-services is huge (as in lots of methods)

Easiest solution is to just use the components of Play services that you actually need as described in official docs, so for example

compile 'com.google.android.gms:play-services-gcm:7.0.0'

instead of your

compile 'com.google.android.gms:play-services:7.0.0'
于 2015-04-17T20:15:46.647 回答