नए एंड्रॉइड मल्टीडेक्स समर्थन लाइब्रेरी के साथ मल्टीडेक्सिंग कैसे सक्षम करें


142

मैं अपने एक ऐप के लिए विधि सीमा को तोड़ने के लिए नई मल्टीडेक्स सपोर्ट लाइब्रेरी का उपयोग करना चाहता हूं।

एंड्रॉइड लॉलीपॉप के साथ Google ने एक मल्टीडेक्स सपोर्ट लाइब्रेरी शुरू की जो मल्टीडेक्स को आसान बनाती है।

इस लाइब्रेरी का उपयोग करने और मल्टीडेक्स समर्थन के साथ मेरे ऐप के निर्माण के लिए क्या कदम उठाने की आवश्यकता है?


मल्टीडेक्स आपके आवेदन के लिए थर्ड पार्टी लाइब्रेरी का समर्थन करता है
केशव गेरा

जवाबों:


293

संपादित करें:

एंड्रॉइड 5.0 (एपीआई स्तर 21) और उच्च एआरटी का उपयोग करता है जो मल्टीडेक्सिंग का समर्थन करता है। इसलिए, यदि आपका minSdkVersion21 या अधिक है, तो मल्टीडेक्स समर्थन पुस्तकालय की आवश्यकता नहीं है।


अपना संशोधित करें build.gradle:

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

         defaultConfig {
             minSdkVersion 14 //lower than 14 doesn't support multidex
             targetSdkVersion 22

             // Enabling multidex support.
             multiDexEnabled true
         }
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
}

यदि आप इकाई परीक्षण चला रहे हैं, तो आप इसे अपनी Applicationकक्षा में शामिल करना चाहेंगे :

public class YouApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}

या सिर्फ अपनी applicationकक्षा का विस्तार करेंMultiDexApplication

public class Application extends MultiDexApplication {

}

अधिक जानकारी के लिए, यह एक अच्छा मार्गदर्शक है।


2
यदि आप नए बिल्ड टूल का उपयोग कर रहे हैं तो यह निश्चित रूप से जाने का तरीका है।
Janusz

1
@ jem88 आपने 1.0 में अपनी श्रेणी को अद्यतन किया ?? आप 2.2 पर होना चाहिए। + (अपने में एक नज़र रखना gradle-wrapper.properties) प्रमुख बिंदु: 1 आपके buildToolsVersion को 21.1.1 या उससे अधिक होना चाहिए। 2multiDexEnabled true अपने build.gradle के डिफ़ॉल्ट डिफ़ॉल्ट पर जोड़ें (नोटिस वहाँ नहीं है =) 3 जोड़ें'com.android.support:multidex:1.0.0'
चाड बिंगहैम

3
यदि हम एप्लिकेशन क्लास का उपयोग नहीं करते हैं तो कैसे करें? क्या टैग को पर्याप्त में जोड़ना android:name="android.support.multidex.MultiDexApplication"है ? applicationAndroidManifest.xml
बडी

1
संकलित 'com.android.support:multidex:1.0.1' की 23 में जरूरत नहीं है
नवेद अहमद

3
@NaveedAhmad, Google डेवलपर डॉक्स के अनुसार ..if your minSdkVersion is set to 20 or lower you must use... 'compile 'com.android.support:multidex:1.0.1':।
साकिबॉय

44

मल्टी डेक्सिंग शुरू करने के लिए निम्न चरणों की आवश्यकता होती है:

अपने प्रोजेक्ट में android-support-multidex.jar जोड़ें। जार आपके एंड्रॉइड एसडीके फ़ोल्डर / एसडीके / एक्स्ट्रा / एंड्रॉइड / समर्थन / मल्टीडेक्स / लाइब्रेरी / पासवर्ड में पाया जा सकता है

अब आप या तो अपने ऐप्स एप्लिकेशन क्लास को MultiDexApplication का विस्तार करते हैं

public class MyApplication extends MultiDexApplication

या आप इस तरह संलग्नकबेस को ओवरराइड करें:

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

मैंने ओवरराइड दृष्टिकोण का उपयोग किया है क्योंकि यह आपके आवेदन वर्ग के वर्ग पदानुक्रम के साथ गड़बड़ नहीं करता है।

अब आपका ऐप मल्टी डेक्स का उपयोग करने के लिए तैयार है। अगला कदम मल्टीलेक्स एपीके बनाने के लिए ग्रेडेल को समझाने का है। बिल्ड टूल टीम इसे आसान बनाने पर काम कर रही है, लेकिन फिलहाल आपको अपने ऐप्स के android भाग में निम्न जोड़ने की आवश्यकता है बिल्ड.ग्रेड

   dexOptions {
      preDexLibraries = false
   }

और आपके ऐप्स के सामान्य भाग के लिए निम्नलिखित। build.gradle

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

अधिक जानकारी एलेक्स लिपोव्स ब्लॉग पर पाई जा सकती है ।


9
कैसे मैं इस बिना वर्गीकृत उपयोग कर सकते हैं?
लकास

3
@Jusus क्या बिना ग्रेडिंग के मल्टीडेक्स विकल्प का उपयोग करना संभव है?
देव्रीमैन

1
मुझे नहीं लगता कि यह बिना जोड़-तोड़ के संभव है।
Janusz

5
ग्रहण चींटी ठीक नहीं है, क्या नहीं है?
portfoliobuilder

मेरी परियोजना न तो ढाल फ़ाइल बनाएं, मैंने एक बनाया और आपके चरणों का पालन किया, लेकिन यह मेरे लिए काम नहीं कर रहा है
BaDo

16

मल्टीप्लेक्स को सक्षम करने के लिए SIMPLY, आपको इसकी आवश्यकता है ...

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

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

dependencies {
implementation 'com.android.support:multidex:1.0.0'
}

इसके अलावा आपको अपनी मैनिफ़ेस्ट फ़ाइल को बदलना होगा। अपने मैनिफ़ेस्ट में मल्टीडेक्सऐप्लेशन क्लास को मल्टीडेक्स सपोर्ट लाइब्रेरी से इस तरह एप्लिकेशन एलिमेंट में जोड़ें

<?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>

1
यह मल्टी डेक्सिंग को सक्षम नहीं करेगा। आप अभी भी एप्लिकेशन वर्ग को याद कर रहे हैं।
चाड बिंघम

1
टिप्पणी के लिए धन्यवाद, यह मेरे मामले के लिए काम किया। यहाँ लिंक है जिसे मैंने developer.android.com/tools/building/multidex.html
smoothumut

1
हाँ, आपका अधिकार। ऐसा लगता है कि जब तक आप परीक्षण नहीं चला रहे हैं, तब तक आपको इसे अपने आवेदन वर्ग में रखने की आवश्यकता नहीं है।
चाड बिंघम

मुझे यह नहीं मिलता है .. मेरा एप्लिकेशन मैनिफ़ेस्ट पहले से ही एक नाम टैग है। मुझे नहीं लगता कि मैं इसे android:name="android.support.multidex.MultiDexApplication कृपया मेरा मार्गदर्शन करने के साथ प्रतिस्थापित करूंगा ..
mboy

1
@mboy: नहीं, MainActivity और एप्लीकेशन क्लास अलग हैं। यहाँ आवेदन वर्ग के बारे में अधिक जानें: rominirani.com/android-application-class
akshay7692

9

अपने build.gradle में यह निर्भरता जोड़ें:

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

फिर से अपनी build.gradle फ़ाइल में इस लाइन को defaultConfig ब्लॉक में जोड़ें :

multiDexEnabled true

इसके बजाय से अपने आवेदन वर्ग के विस्तार के आवेदन से विस्तार MultiDexApplication ; पसंद :

public class AppConfig extends MultiDexApplication {

अब तुम जाने के लिए अच्छे हो! और अगर आपको इसकी आवश्यकता है, तो सब कुछ MultiDexApplicationहोता है

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


3

चरण 1: build.grad बदलें

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

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

चरण 2: अनुप्रयोग वर्ग पर सेटिंग

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}

चरण 3: ग्रेड बदलें

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

यह काम करेगा!। धन्यवाद।


मुझे "मल्टीडेक्स के लिए प्रतीक नहीं मिल रहा है" मिल रहा है। किसी को भी पहले इस समस्या का सामना करना पड़ा?
आंग म्यिन्ट थिन

3

यहां Android X के साथ मई 2020 तक अप-टू-डेट दृष्टिकोण है।

के लिए minSdk> = 21

आपको कुछ भी करने की आवश्यकता नहीं है। ये सभी डिवाइस एंड्रॉइड रनटाइम (एआरटी) वीएम का उपयोग करते हैं, जो मूल रूप से मल्टीडेक्स का समर्थन करता है।

के लिए minSdk<21

अपने मॉड्यूल -level में build.gradle, सुनिश्चित करें कि निम्नलिखित कॉन्फ़िगरेशन पॉपुलेटेड हैं:

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}

फिर, आपकी src/main/AndroidManifest.xmlआवश्यकताओं को निम्नानुसार घोषित करना MultiDexApplicationहोगा application:name:

<manifest package="com.your.package"
          xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="androidx.multidex.MultiDexApplication" />
</manifest>

1

AndroidManifest.xml में जोड़ें:

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

या

MultiDex.install(this);

अपने कस्टम अनुप्रयोग के अनुलग्नकबेसटेक्स्ट पद्धति में

या आपका कस्टम अनुप्रयोग MultiDexApplication बढ़ाता है

अपने build.gradle में multiDexEnabled = true जोड़ें

defaultConfig {
    multiDexEnabled true
}

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

@ हर्षा ने इसका उपयोग करने की अनुशंसा नहीं की, लेकिन अपनी मेनिफ़ेस्ट फ़ाइल में bigHeap जोड़ने का प्रयास करें <application android: bigHeap = "true"> </ application>
मलिक अबू क़ौद

Android: bigHeap = "सच" android: allowBackup = "true" दोनों को जोड़ा गया है
हर्षा

इस फ़ाइल को जोड़ दें >>>>>>>>>> dexOptions {javaMaxHeapSize "4g"}
मलिक अबू क़ौद

1

पहले आपको प्रहरी के साथ प्रयास करना चाहिए (यह सभी कोड अप्रयुक्त साफ)

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

0

यदि आप अपने प्रोजेक्ट में मल्टी-डेक्स को सक्षम करना चाहते हैं, तो बस gradle.builder पर जाएं

और इसे अपने निर्भरता में जोड़ें

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

फिर आपको जोड़ना होगा

 defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true}

फिर एक वर्ग खोलें और इसे अनुप्रयोग तक विस्तृत करें यदि आपका एप्लिकेशन अनुप्रयोग वर्ग का विस्तार करता है, तो आप ऑनक्रेट () विधि और कॉल को ओवरराइड कर सकते हैं

   MultiDex.install(this) 

मल्टीडेक्स को सक्षम करने के लिए।

और अंत में अपने प्रकटीकरण में जोड़ें

 <?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> 

1
क्या है gradle.builder?
चाड बिंघम

आपकी ढाल फ़ाइल जो आपके एंड्रॉइड स्टूडियो प्रोजेक्ट में स्थित है
पावेल

0

ऊपर दिए गए सभी उत्तर भयानक हैं

इसे भी जोड़ें अन्यथा आपका ऐप बिना किसी कारण के मेरी तरह क्रैश हो जाएगा

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

0

Androidx के साथ, क्लासिक समर्थन लाइब्रेरी अब काम नहीं करती हैं।

सरल समाधान निम्नलिखित कोड का उपयोग करना है

आपकी build.gradleफाइल में

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

dependencies {
  ...
  ...
  implementation 'androidx.multidex:multidex:2.0.1'
}

और आपके मैनिफेस्ट में एप्लिकेशन टैग में केवल नाम विशेषता जोड़ें

<manifest ...>
    <application
        android:name="androidx.multidex.MultiDexApplication"
     ...
     ...>
         ...
         ...
    </application>
</manifest>

यदि आपका एप्लिकेशन API 21 या उससे ऊपर के मल्टीडेक्स को लक्षित कर रहा है तो वह डिफ़ॉल्ट रूप से सक्षम है।

अब यदि आप कई मुद्दों से छुटकारा पाना चाहते हैं तो आप मल्टीडेक्स का समर्थन करने की कोशिश कर रहे हैं - पहले सेटिंग द्वारा कोड सिकुड़ने का उपयोग करके देखें minifyEnabled true


-2

सिर्फ बिल्ड में इस स्निप को जोड़ने से .ग्रेड भी ठीक काम करता है

android {
   compileSdkVersion 22
   buildToolsVersion "23.0.0"

     defaultConfig {
         minSdkVersion 14 //lower than 14 doesn't support multidex
         targetSdkVersion 22

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

-5

Multi_Dex.java

public class Multi_Dex extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.