2017-11-22 15 views
9

मेरे पास एक लाइब्रेरी है जिसका उपयोग मैं एस्प्रेसो परीक्षणों के लिए करता हूं कि जब मैंने अपनी परियोजना में जोड़ा तो मैं अपने परीक्षणों को संकलित करने में सक्षम नहीं हूं।एंड्रॉइड स्टूडियो 3.0 पर com.android.dex.DexIndexOverflowException

Gradle इस त्रुटि

Caused by: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 
    at com.android.dx.merge.DexMerger$8.updateIndex(DexMerger.java:565) 
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276) 
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:574) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:166) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:198) 

कौन वास्तव में अजीब है क्योंकि मैं पहले से ही multiDex अपने प्रोजेक्ट में सक्षम किया है, आउटपुट

मेरे परियोजना build.gradle

defaultConfig { 
      minSdkVersion 16 
      targetSdkVersion 21 
      versionName versionNameFromGitTagVia() 
      versionCode versionCodeFromJenkins() 
      multiDexEnabled true 

      testInstrumentationRunner "app.test.general.InstrumentationRunner" ... 
} 
dependencies { 
    ... 
    androidTestImplementation project(':test-utils') 
    ... 
    implementation 'com.android.support:multidex:1.0.2' 
} 

मेरे आवेदन कक्षा

public class RiderApplication extends MultiDexApplication implements Application.ActivityLifecycleCallbacks, 
     GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    .... 
} 

AndroidManifest

<application 
    android:name=".RiderApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:theme="@style/MyAppTheme" 
    tools:replace="android:theme,android:icon"> 

पुस्तकालय निकाला जा रहा है समस्या

कोई सुझाव को हल करती है?

संपादित मैं कई मायनों में इसे ठीक करने की कोशिश की, और मुझे पता चला कि यह केवल happends जब मैं

androidTestImplementation 

लेकिन जैसे पुस्तकालय शामिल हैं जब एक नियमित रूप से

implementation 

रूप में इस्तेमाल किया डीईएक्स त्रुटि गायब हो जाती है

वास्तव में अजीब

संपादित

यह केवल Gradle 3.0.1 के साथ होता है, अगर मैं Gradle को 2.3.3 समस्या नहीं

+0

'एप्लिकेशन' कक्षा बनाएं। तर्क जांचें https://stackoverflow.com/a/33430306/3395198 –

+0

धन्यवाद @IntelliJAmiya लेकिन जैसा कि मैंने बताया है कि मेरा ऐप पहले से ही मल्टीडेक्स – orelzion

+0

का समर्थन करता है, एप्लिकेशन क्लास है? –

उत्तर

0

खैर है वापस जाने के लिए, यह एक अजीब से एक है, लेकिन यह पहले हुआ है।

dexOptions { 
    jumboMode = true 

    // Avoid the OutOfMemoryError: GC overhead limit exceeded: 
    incremental true 
    javaMaxHeapSize "4g" 
} 

इस तरीके के रूप में बहुत बड़ी जा रहा है की संख्या के लिए विरोध स्ट्रिंग संख्या जारी करना, बहुत बड़ा किया जा रहा है संभाल चाहिए:

मैं this thread पर ठोकर खाई किया है, whish इस अतिरिक्त सुझाव दिया।

जंबो मोड पर अधिक यहाँ multidex बनाम: Android: Jumbo Mode vs Multidex

परीक्षण की शुभकामनाएं।

+0

धन्यवाद! यह आशाजनक लग रहा था, लेकिन दुर्भाग्य से यह भी मदद नहीं की थी। मैंने मूल प्रश्न में कुछ निष्कर्ष जोड़े – orelzion

0

ठीक है, परीक्षण के कई घंटों के बाद मुझे अंत में इसे चलाने के लिए मिला।

मैंने परियोजना में कई चीजें बदल दी हैं, इसलिए मैं यह नहीं बता सकता कि समस्या का कारण क्या था, लेकिन अधिक अच्छे के लिए मैं यहां जो कुछ भी करता हूं उसे लिखूंगा और मुझे आशा है कि अगर कोई कभी सामना करेगा ऐसी समस्या के साथ कम से कम एक समाधान उसकी मदद करेगा।

इसलिए मैंने minSdkVersion को 21 तक बदल दिया। हाँ, एंड्रॉइड स्टूडियो 2.3.3 के साथ इसकी आवश्यकता नहीं थी, लेकिन जाहिर है कि अब आप एस्प्रेसो का उपयोग करने जा रहे हैं। लेकिन चिंता न करें, परीक्षण नहीं होने पर आपका एप्लिकेशन अभी भी पुराने संस्करणों का समर्थन कर सकता है।यह 1.0.1 से 1.0.2 करने के लिए अपने build.gradle

def isTest = gradle.startParameter.taskNames.find { it.contains("AndroidTest") } 
     if (isTest != null) { 
      println("is test true") 
      minSdkVersion 21 
     } else { 
      println("is not test") 
      minSdkVersion 16 
     } 

उसके अलावा, मैं अद्यतन multiDex निर्भरता को इस तरह से मैं इस जोड़ दिया है कॉन्फ़िगर करने के लिए और मैं सभी निर्भरता पर कि लागू किया।

मैंने guava लाइब्रेरी को com.google.guava:guava:22.0-android पर भी अपडेट किया, जिसके कारण एक निर्भरता संघर्ष हुआ जिसे मैंने दूसरी लाइब्रेरी को मजबूर कर हल किया (सभी फोर्सिंग रणनीति नीचे पोस्ट की गई है)।

तब मुझे espresso-web के साथ एक निर्भरता संघर्ष था जिसे मुझे भी लागू करने की आवश्यकता थी।

इस पल

configurations.all { 
     resolutionStrategy { 
      force 'com.android.support:multidex:1.0.2' 
      force 'com.google.guava:guava:22.0-android' 
      force 'com.google.code.findbugs:jsr305:2.0.1' 
      force 'com.android.support.test.espresso:espresso-web:3.0.1' 
     } 
    } 

मुझे आशा है कि यह किसी को भी मदद करता है पर मेरे संकल्प रणनीति है, सब लोग हैं, जो मदद करने की कोशिश के लिए आपको बहुत बहुत धन्यवाद, आप कई विचारों कि मदद की मुझे अंतिम प्रस्ताव के साथ सफल रहा लाया

संबंधित मुद्दे