رفع خطای مربوط به MultiDex

رفع خطای مربوط به MultiDex

MultiDex چیست؟

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

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

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

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

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

defaultConfig {
// ...
multiDexEnabled true
}
dependencies {
implementation "androidx.multidex:multidex:2.0.0"
}

Initialize کردن 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="android.support.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 را مطالعه نمایید.