Skip to main content

فعال‌کردن مالتی‌دکس

MultiDex چیست؟

در صورتی که minSdkVersion پایینتر از ۲۱ باشد و پروژه را اجرا کنید ممکن است این خطا رخ‌دهد:



در ماشین مجازی Dalvik تعداد متد‌ها در یک فایل .dex بایستی از حد تعیین‌شده‌ی 64K فراتر نروند. در غیراینصورت آدرس‌دهی برای Dalvik به درستی انجام‌نخواهدشد. به همین دلیل بایستی از چند فایل .dex استفاده‌کرد که اصطلاحا MultiDex نام‌گذاری‌شده‌است.

نکته‌ی مهم:
در صورتی که MinSDK >= 21 باشد این مشکل رخ نخواهد داد زیرا MultiDex در این حالت به صورت پیش‌فرض پشتیبانی می‌شود و نیاز به کار اضافه نیست.
در صورتی که برنامه این خطا را دارد، مشکل شما MultiDex نیست.

فعال‌کردن MultiDex در برنامه

اضافه‌کردن کد گریدل

‌در فایل build.gradle(app:Module) این موارد را اضافه کنید:

android {
defaultConfig {
// ...
multiDexEnabled true
}
}
dependencies {
implementation "androidx.multidex:multidex:$latest"
}

Initialize کردن MultiDex

سه روش برای فعال‌کردن MultiDex در برنامه وجود دارد که با توجه به شرایط برنامه می‌توانید هر یک از این حالات را برای فعال‌کردن MultiDex استفاده کنید.

۱. در برنامه کلاس Application کاستوم وجود ندارد

به اتریبیوت‌های تگ application در فایل AndroidManifest.xml این مورد را اضافه کنید:

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

۲. کلاس Application کاستوم از android.app.Application ارث‌بری می‌کند

در این حالت کلاس پدر را از android.app.Application به MultiDexApplication تغییر دهید:

class MyApplication : MultiDexApplication() {...}

۳. کلاس Application کاستوم از کلاس دیگری ارث می‌برد

در این حالت می‌توانید onAttachBaseContext را override کنید و MultiDex را initialize کنید:

class MyApplication : SomeOtherApplication() {

override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}

برای اطلاعات بیشتر می‌توانید داکیومنت اندروید در مورد MultiDex را مطالعه نمایید.