android - उनल - मोबाइल अपडेट




DexIndexOverflowException नवीनतम appcompat और समर्थन पुस्तकालय में अद्यतन करने के बाद (5)

मल्टीडेक्स के साथ खिलवाड़ करने से पहले

यह या तो समाधान बहुत बड़ा है (मल्टीडेक्स का उपयोग करें) या आप संकलन करते हैं और अपनी परियोजना में कुछ आवश्यक सामान शामिल नहीं करते हैं। मुझे अपने छोटे प्रोजेक्ट पर यह मुद्दा मिला। यहाँ मैंने इसे ठीक करने के लिए क्या किया है:

मैंने इसे build.gradle से हटा दिया:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

और मैंने मैन्युअल रूप से अपने बिल्ड फ़ोल्डर को एप्लिकेशन रूट से हटा दिया है। निर्धारित समस्या।

मैं gradle माध्यम से नीचे की सेटिंग्स का उपयोग कर रहा हूं:

compileSdkVersion 21
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.0.2
ANDROID_BUILD_SDK_VERSION=21

मेरी भी मेरी फ़ाइल में निम्नलिखित सेटिंग्स हैं:

compile 'com.android.support:support-annotations:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'

मुझे हमेशा UNEXPECTED TOP LEVEL EXCEPTION की त्रुटि मिलती है।
लेकिन जब मैं 20.0.0 से 20.0.0 काम करता 20.0.0 यह ठीक काम करता है ... लेकिन मैं एंड्रॉइड एपीआई 21 विकल्पों में से किसी का उपयोग करने में सक्षम नहीं हूं। क्या मैं यहाँ कुछ गलत कर रहा हूँ? इस अपवाद के बिना संकलन करने के लिए मुझे यह कैसे मिलेगा? मेरे पास अन्य ग्रेड परियोजनाओं (फेसबुक आदि) के बाहर कहीं और समर्थन जार नहीं है।

यहाँ पूर्ण स्टैक ट्रेस है:

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:283)
    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:302)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)

1) आवेदन build.gradle फ़ाइल के लिए निर्भरता जोड़ें

compile 'com.android.support:multidex:1.0.2'

2) यदि आप एप्लिकेशन क्लास को ओवरराइड नहीं करते हैं, तो एंड्रॉइड सेट करने के लिए अपनी मैनिफ़ेस्ट फ़ाइल संपादित करें: टैग में नाम निम्नानुसार है:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>

यदि आप अनुप्रयोग वर्ग को ओवरराइड करते हैं, तो इसे मल्टीडेक्सएप्लिकेशन (यदि संभव हो तो) के विस्तार के लिए बदल दें:

public class MyApplication extends MultiDexApplication { ... }

या यदि आप एप्लिकेशन क्लास को ओवरराइड करते हैं, लेकिन बेस क्लास को बदलना संभव नहीं है, तो आप इसके बजाय संलग्नक को बंद कर सकते हैं () विधि और मल्टीडेक्स को सक्षम करने के लिए MultiDex.install (यह) कॉल करें:

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

3) build.gradle पर defaultConfig में मल्टीडेक्स सपोर्ट जोड़ें

defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 26
        ...
        // Enabling multidex support.
        multiDexEnabled true
    }
...

पहले सुनिश्चित करें कि app/build.cradle में मिनिमाइज़ेशन सक्षम है।

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.config
    }
    debug {
        signingConfig signingConfigs.config
    }
}

यदि यह समस्या का समाधान नहीं करता है, तो अपने ऐप के लिए मल्टीडेक्स बिल्ड सक्षम करें।


मुझे इस समस्या का सामना करना पड़ा जब मैंने अपने ऐप में Google Play Services API का पूरा पैकेज संकलित कर लिया था। मैंने चयनात्मक एपीआई का उपयोग करके समस्या को हल किया।

उदाहरण के लिए, केवल Google फ़िट और Android Wear API को शामिल करने के लिए, अपनी build.gradle फ़ाइल में निम्न पंक्ति प्रतिस्थापित करें:

compile 'com.google.android.gms:play-services:11.0.2'

इन पंक्तियों के साथ:

compile 'com.google.android.gms:play-services-fitness:11.0.2'
compile 'com.google.android.gms:play-services-wearable:11.0.2'

निम्नलिखित developers.google.com/android/guides/setup में मुद्दा समझाया गया है।


यह संदेश लगता है कि आपकी परियोजना बहुत बड़ी है।

आपके पास कई तरीके हैं। डेक्स के लिए केवल 65536 तरीके हो सकते हैं।

चूंकि चूका प्लग इन 0.14.0 और बिल्ड टूल्स 21.1.0 है आप मल्टीडेक्स समर्थन का उपयोग कर सकते हैं।

build.gradle में इन लाइनों को जोड़ें।

android {

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

इसके अलावा अपने Manifest में MultiDexApplication क्लास को मल्टीडेक्स सपोर्ट लाइब्रेरी से एप्लिकेशन एलिमेंट में जोड़ें

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication"> 
        ...
    </application>
</manifest>

यदि आप स्वयं Application क्लास का उपयोग कर रहे हैं, तो पैरेंट क्लास को Application से MultiDexApplication





build.gradle