2014-12-16 7 views
5

मैं अपनी परियोजना के निर्माण/चलाने के दौरान अचानक इस समस्या में भाग रहा हूं।बिल्ड टूल्स 21.1.2 - अप्रत्याशित टॉप-लेवल एक्सेप्शन

Error:Execution failed for task ':app:dexDebug'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    /Users/aidanfollestad/Documents/android-sdk/build-tools/21.1.2/dx --dex --no-optimize --output /Users/aidanfollestad/Android Projects/Impression/app/build/intermediates/dex/debug --input-list=/Users/aidanfollestad/Android Projects/Impression/app/build/intermediates/tmp/dex/debug/inputList.txt 
    Error Code: 
    2 
    Output: 
    UNEXPECTED TOP-LEVEL EXCEPTION: 
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 
     at com.android.dx.merge.DexMerger$6.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) 

मेरे Gradle फ़ाइल इस में शामिल हैं:

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.14.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'versionPlugin' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "com.afollestad.impression" 
     minSdkVersion 16 
     targetSdkVersion 21 
     versionCode 19 
     versionName "0.7.0" 
    } 
} 

repositories { 
    mavenCentral() 
    maven { url 'https://maven.fabric.io/public' } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:21.0.+' 
    compile 'com.android.support:recyclerview-v7:21.0.+' 
    compile 'com.koushikdutta.ion:ion:2.0.+' 
    compile 'com.github.chrisbanes.photoview:library:1.2.+' 
    compile 'com.afollestad:material-dialogs:0.4.5' 
    compile 'com.google.android.gms:play-services:6.5.87' 

    compile 'com.google.api-client:google-api-client:1.18.0-rc' 
    compile 'com.google.api-client:google-api-client-android:1.18.0-rc' 
    compile 'com.google.api-client:google-api-client-gson:1.18.0-rc' 
    compile 'com.google.apis:google-api-services-drive:v2-rev152-1.19.0' 

    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 

versionPlugin{ 
    buildTypesMatcher = 'release' 
    supportBuildNumber = false 
    fileNameFormat = '$appPkg-v$versionName-$versionCode' 
} 

मेरे सामग्री संवाद पुस्तकालय संदर्भ केवल AppCompat-v7, एक ही संस्करण इस Gradle फ़ाइल को संदर्भित किया गया है। मेरे libs फ़ोल्डर में मेरे पास कोई JAR नहीं है जिसे मैं संदर्भित कर रहा हूं। मुझे नहीं पता कि पुस्तकालय एक दूसरे के साथ हस्तक्षेप कर रहे हैं (Play Services और AppCompat की संभावना के अलावा?)। कोई विचार या समाधान?

मैंने समर्थन पुस्तकालय (https://github.com/koush/ion/blob/master/ion/build.gradle#L17) के आयन संदर्भ v4 को देखा, शायद यह AppCompat में हस्तक्षेप कर सकता है?

+0

@ स्कॉट-बार्टा यह एक डुप्लिकेट नहीं है, कि अन्य जवाब इस मुद्दे को हल नहीं करता है। – afollestad

+1

मैंने इसे फिर से खोल दिया, लेकिन यह वास्तव में एक डुप्लिकेट है - आपके पास एक डीएक्स फ़ाइल के लिए बहुत सी विधियां हैं। यह टक्कर नहीं है। –

+1

यदि आप Google Play सेवाओं के हर हिस्से का उपयोग नहीं कर रहे हैं, तो [विभाजन निर्भरता] (https://developer.android.com/google/play-services/setup.html#split) का उपयोग करने पर विचार करें जो आपको केवल निर्भर करने की अनुमति देता है Google Play सेवाओं के उन हिस्सों पर जिन्हें आपको वास्तव में आवश्यकता है। – ianhanniballake

उत्तर

12

कोशिश multidex build.gradle सक्षम करने के लिए:

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

रेफरी: Unable to execute dex: method ID not in [0, 0xffff]: 65536

+1

'multiDexEnabled' का उपयोग करके इसकी अपनी सीमाओं के साथ आता है। यदि संभव हो, तो इससे बचने की कोशिश करें। – Shubham

+0

@ शुभम क्या आप सीमाओं पर और विस्तार कर सकते हैं? – Jus12

+1

@ जुस 12: यहां इसके बारे में सब कुछ पढ़ें। http://developer.android.com/tools/building/multidex.html – Shubham

11

आप 65k तरीकों सीमा hitted सकता है। मल्टीडेक्स का उपयोग करने के बजाय, अधिकतर ग्रैन्युलरिटी के साथ Google Play सेवाओं का उपयोग करने का प्रयास करें। Follow this guide, आप केवल उन्हीं भागों का उपयोग कर सकते हैं जिन्हें आप चाहते हैं। शायद यह आपकी समस्या को ठीक करेगा।

+1

यह उत्कृष्ट सलाह है, मल्टीडेक्स को सक्षम करने की कोई आवश्यकता नहीं है (जो मुझे अन्य मुद्दों का कारण बनता है) जब आप Google Play के विशिष्ट हिस्सों को जोड़ सकते हैं सेवाओं की जरूरत है। – Leon

2

यह अपवाद पता चलता है कि अपनी परियोजना के तरीकों की अधिकतम संख्या तक पहुंच गया है 65536 आप सिर्फ work.It नीचे मेरे लिए काम किया करते

चरण 1:
build.gradle अंदर

 defaultConfig { 
     multiDexEnabled = true 
     } 

चरण 2:

प्रकट आवेदन टैग के अंदर

android:name="android.support.multidex.MultiDexApplication" 

    or 

चरण 3: यदि आप कक्षा जो आवेदन फैली का उपयोग तो करते हैं:

public class MyApplication extends Application { 
    @Override 
    protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
    } 
    } 

चरण 4:

build.gradle अंदर

android{ 
    dexOptions { 
    incremental true 
    javaMaxHeapSize "4g" 
    } 
    } 
संबंधित मुद्दे