নতুন অ্যান্ড্রয়েড মাল্টিডেক্স সমর্থন লাইব্রেরি সহ মাল্টিডেক্সিং কীভাবে সক্ষম করবেন


142

আমি আমার অ্যাপ্লিকেশনগুলির একটির পদ্ধতির সীমাটি ভেঙে নতুন মাল্টিডেক্স সমর্থন লাইব্রেরিটি ব্যবহার করতে চাই।

অ্যান্ড্রয়েড ললিপপ সহ গুগল একটি মাল্টিডেক্স সমর্থন লাইব্রেরি চালু করেছে যা এটি মাল্টেডেক্সকে সহজ করে তোলে।

এই লাইব্রেরিটি ব্যবহার করতে এবং মাল্টিডেক্স সমর্থন দিয়ে আমার অ্যাপ্লিকেশনটি তৈরি করতে কোন পদক্ষেপের প্রয়োজন?


মাল্টিডেক্স আপনার আবেদনে তৃতীয় পক্ষের লাইব্রেরি সমর্থন করে
কেশব গেরা

উত্তর:


293

সম্পাদনা:

অ্যান্ড্রয়েড 5.0 (API স্তর 21) এবং উচ্চতর ব্যবহারের ART যা মাল্টডেক্সিং সমর্থন করে। অতএব, যদি আপনার 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
আপনি যদি এখনও নতুন বিল্ড টুলস ব্যবহার করেন তবে এটি অবশ্যই যাওয়ার উপায়।
জানুস

1
@ jem88 আপনি আপনার গ্রেডকে 1.0 এ আপডেট করেছেন? আপনার ২.২ এ থাকা উচিত + + (আপনার একবার দেখুন gradle-wrapper.properties) মূল বিষয়গুলি: 1 আপনার বিল্ডটুলস ভার্সনটি 21.1.1 বা উচ্চতর হওয়া দরকার। 2 অ্যাড multiDexEnabled trueআপনার build.gradle আপনার defaultConfig করার জন্য (নোটিশ সেখানে নেই একটি হল =) 3 যোগ'com.android.support:multidex:1.0.0'
চাদ মধ্যে Bingham

3
কীভাবে আমরা যদি অ্যাপ্লিকেশন ক্লাস ব্যবহার না করি? পর্যাপ্ত ট্যাগ যোগ করা android:name="android.support.multidex.MultiDexApplication"হয় ? applicationAndroidManifest.xml
বাডি

1
সংকলন 'com.android.support:m মাল্টিটেক্সেক্স.0.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

মাল্টি ডেক্সিং শুরু করতে নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:

আপনার প্রকল্পে অ্যান্ড্রয়েড-সমর্থন-মাল্টিডেক্স.জার যুক্ত করুন। জারটি আপনার অ্যান্ড্রয়েড এসডিকে ফোল্ডারে পাওয়া যাবে / এসডিকে / এক্সট্রা / অ্যান্ড্রয়েড / সমর্থন / মাল্টিডেক্স / লাইব্রেরি / লাইবস

এখন আপনি হয় আপনার অ্যাপ্লিকেশন ক্লাসটি মাল্টিডেক্স অ্যাপ্লিকেশনটি বাড়িয়ে দিন

public class MyApplication extends MultiDexApplication

বা আপনি এইভাবে সংযুক্তিবেস কনটেক্সটকে ওভাররাইড করুন:

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

আমি ওভাররাইড পদ্ধতির ব্যবহার করেছি কারণ এটি আপনার অ্যাপ্লিকেশন ক্লাসের শ্রেণিবিন্যাসের সাথে বিশৃঙ্খলা তৈরি করে না।

এখন আপনার অ্যাপ্লিকেশনটি মাল্টি ডেক্স ব্যবহারের জন্য প্রস্তুত। পরবর্তী পদক্ষেপটি হ'ল একাধিক ডেক্সড এপিপি তৈরি করতে গ্রেডকে বোঝানো। বিল্ড সরঞ্জাম দলটি এটিকে আরও সহজ করে তুলতে কাজ করছে, তবে মুহূর্তের জন্য আপনার অ্যাপ্লিকেশনগুলির অ্যান্ড্রয়েড অংশে নিম্নলিখিতটি যুক্ত করা দরকার

   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
@ জানুস গ্র্যাডেল ছাড়াই মাল্টিডেক্স বিকল্প ব্যবহার করা সম্ভব?
ডিভরিম

1
আমি মনে করি না গ্রেড ছাড়া এটি সম্ভব।
জানুস

5
গ্রেড পিপড়া ঠিক কী, গ্রেড নয়?
পোর্টফোলিওবিল্ডার

আমার প্রকল্প গ্রেড ফাইল তৈরি করতে পারে না, আমি একটি তৈরি করেছি এবং আপনার পদক্ষেপগুলি অনুসরণ করেছি, তবে এটি আমার পক্ষে কাজ করছে না
বাডো

16

সিমপ্লে, মাল্টিডেক্স সক্ষম করতে, আপনার প্রয়োজন ...

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
মন্তব্যের জন্য ধন্যবাদ, এটি আমার মামলার পক্ষে কাজ করেছে। এখানে লিংকটি আমি ডেভেলপার
andঅ্যান্ড্রয়েড

1
হ্যাঁ, আপনার অধিকার। দেখে মনে হচ্ছে আপনার পরীক্ষা ক্লাস না করা থাকলে আপনার অ্যাপ্লিকেশন শ্রেণিতে এটি রাখার দরকার নেই।
চাদ বিংহাম

আমি এটি পাই না .. আমার অ্যাপ্লিকেশন ম্যানিফেস্টে ইতিমধ্যে একটি নাম ট্যাগ রয়েছে। আমি মনে করি না যে আমি এটি প্রতিস্থাপন করব android:name="android.support.multidex.MultiDexApplication দয়া করে আমাকে গাইড করুন ..
এমবয়

1
@ এমবাই: না, মেইনএ্যাকটিভিটি এবং অ্যাপ্লিকেশন ক্লাস আলাদা। অ্যাপ্লিকেশন শ্রেণীর সম্পর্কে এখানে আরও জানুন: রোমিনিরাণী
অ্যান্ড্রয়েড-

9

আপনার বিল্ড.gradle এ এই নির্ভরতা যুক্ত করুন:

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

আবার আপনার বিল্ড.gradle ফাইলের মধ্যে এই লাইনটি ডিফল্ট কনফিগ ব্লকে যুক্ত করুন:

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: বিল্ড.গ্রেড পরিবর্তন করুন

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

এটা কাজ করবে!। ধন্যবাদ।


আমি "মাল্টিডেক্সের প্রতীক খুঁজে পাচ্ছি না" পাচ্ছি। এর আগে কেউ এই সমস্যার মুখোমুখি হয়েছিল?
অং মিন্ট থেইন

2

অ্যানড্রয়েড এক্স সহ, ২০২০ সালের মে পর্যন্ত এটি একটি আপ-টু-ডেট পদ্ধতির is

জন্য minSdk> = 21

আপনার কিছু করার দরকার নেই। এই সমস্ত ডিভাইস অ্যান্ড্রয়েড রানটাইম (এআরটি) ভিএম ব্যবহার করে, যা দেশিভাবে মাল্টিডেক্স সমর্থন করে।

জন্য minSdk<21

আপনার মডিউল- লেভেল-এ 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

AndroidManLive.xML এ যুক্ত করুন:

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

অথবা

MultiDex.install(this);

আপনার কাস্টম অ্যাপ্লিকেশন এর AttBaseContext পদ্ধতিতে

বা আপনার কাস্টম অ্যাপ্লিকেশনটি মাল্টিডেক্স অ্যাপ্লিকেশন প্রসারিত করে

আপনার বিল্ডড্র্যাডলে মাল্টিডেক্সএইনেবলড = সত্য যুক্ত করুন

defaultConfig {
    multiDexEnabled true
}

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

@ হর্ষ এটি ব্যবহার করার প্রস্তাবিত নয় তবে আপনার মেনিফেস্ট ফাইলটি << অ্যাপ্লিকেশন অ্যান্ড্রয়েড: লার্জ হিপ = "সত্য"> </application>
মালিক আবু কউদ ২

অ্যান্ড্রয়েড: লার্জহীপ = "সত্য" অ্যান্ড্রয়েড: অনুমতিব্যাকআপ = "সত্য" উভয়ই যুক্ত হয়েছে
হর্ষ

গ্রেড ফাইলটিতে এটি যুক্ত করুন >>>>>>>>> ডেক্সঅ্যাপশনস ava 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

আপনি যদি আপনার প্রকল্পে মাল্টি-ডেক্স সক্ষম করতে চান তবে কেবল গ্রেড.বিল্ডারে যান

এবং এটি আপনার ডিফেন্ডেন্সিতে যুক্ত করুন

 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

অ্যান্ড্রয়েডএক্স সহ, ক্লাসিক সমর্থন লাইব্রেরিগুলি আর কাজ করে না।

সহজ সমাধান নিম্নলিখিত কোড ব্যবহার করা হয়

আপনার build.gradleফাইল এ

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

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

এবং আপনার ম্যানিফেস্টে কেবল অ্যাপ্লিকেশন ট্যাগে নাম বৈশিষ্ট্য যুক্ত করুন

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

যদি আপনার অ্যাপ্লিকেশনটি 21 এপিআই বা তার বেশি মাল্টিডেক্স লক্ষ্য করে থাকে তবে ডিফল্টরূপে সক্ষম হয়।

এখন আপনি যদি মাল্টেডেক্সকে সমর্থন করার চেষ্টা করছেন এমন অনেকগুলি সমস্যা থেকে মুক্তি পেতে চান - প্রথমে কোডটি সঙ্কুচিত করে সেটিংস ব্যবহার করে চেষ্টা করুন minifyEnabled true


-2

এই বিল্ড.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****
     }
}

-5

Multi_Dex.java

public class Multi_Dex extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.