2014-12-16 30 views
5

Projemi oluştururken/çalıştırırken aniden bu soruna yanıt veriyorum.Yapı Araçları 21.1.2 - BEKLENMEYEN TOPLAM SEVİYEDE ÖZGÜRLÜĞÜ

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) 

Benim Gradle dosyası bu içerir:

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

Benim maddi-diyaloglar kütüphane referanslar sadece AppCompat-v7, bu Gradle dosya başvuran olur aynı sürümü. Benim libs klasöründe referans olduğum herhangi bir JAR yok. Kütüphanelerin birbirleriyle ne gibi etkileşime girdiği hakkında hiçbir fikrim yok (Play Services ve AppCompat'ın olasılığı dışında). Herhangi bir fikir veya çözüm mü?

Destek kitaplığının (https://github.com/koush/ion/blob/master/ion/build.gradle#L17) v4 numaralı Ion referanslarını fark ettim, bu belki de AppCompat ile çakışıyor olabilir?

+0

bu bir kopya değil, o: 4

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

Adım diğer cevap sorunu çözmez. – afollestad

+1

Yeniden açtım, ancak gerçekten bir kopyası - bir dex dosyasının içereceği çok fazla yönteminiz var. Bu bir çarpışma değil. –

+1

Google Play hizmetlerinin her bölümünü kullanmıyorsanız, yalnızca bağımlı olmanıza izin veren [bölünmüş bağımlılıklar] 'ı (https://developer.android.com/google/play-services/setup.html#split) kullanmayı düşünün. Gerçekten ihtiyacınız olan Google Play hizmetlerinin bölümlerinde. 'MultiDexEnabled' kullanarak – ianhanniballake

cevap

12

deneyin multidex build.gradle etkinleştirmek için:

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

Ref: Unable to execute dex: method ID not in [0, 0xffff]: 65536

+1

gel kendi sınırlamaları ile gelir. Mümkünse bunu önlemek için deneyin. – Shubham

+0

@Shubham, sınırlamalar hakkında daha fazla bilgi verebilir misiniz? – Jus12

+1

@ Jus12: Burada her şeyi okuyun. http://developer.android.com/tools/building/multidex.html – Shubham

11

Sen 65k yöntemleri sınırını hitted olabilir. MultiDex'i kullanmak yerine, Google Play Hizmetleri'ni daha ayrıntılı bir şekilde kullanmayı deneyin. Follow this guide, yalnızca istediğiniz parçaları kullanabilirsiniz. Muhtemelen bu probleminizi çözecektir.

+1

Bu, mükemmel bir tavsiyedir; Google Play'in belirli bölümlerini ekleyebileceğiniz zaman multiDex'i (başka sorunlara neden olmuş gibi görünüyor) etkinleştirmeye gerek yoktur. İhtiyaç duyulan hizmetler. – Leon

2

Bu istisna proje sadece work.It altında benim için çalıştı yapmak 65536 yöntemlerin maksimum sayıda ulaşmış olduğunu gösterir

Adım 1: build.gradle iç

 defaultConfig { 
     multiDexEnabled = true 
     } 

2. Adım:

tezahür uygulama etiketinin içinde

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

    or 

3. Adım: Uygulama uzanır Class kullanırsanız o zaman yapın: build.gradle iç

Scott-Barta @
android{ 
    dexOptions { 
    incremental true 
    javaMaxHeapSize "4g" 
    } 
    }