আপনার অ্যাপে minSdk API 20 বা তার চেয়ে কম থাকলে এবং আপনার অ্যাপ ও
এটি যে লাইব্রেরি রেফারেন্স করে তা ৬৫,৫৩৬টি পদ্ধতি অতিক্রম করলে, আপনি নিম্নলিখিত বিল্ড সমস্যার সম্মুখীন হবেন যা
ইঙ্গিত করে যে আপনার অ্যাপ Android বিল্ড আর্কিটেকচারের সীমায় পৌঁছে গেছে:
trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option.
বিল্ড সিস্টেমের পুরনো ভার্সন অন্য একটি সমস্যার কথা জানায়, যা একই সমস্যার ইঙ্গিত দেয়:
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
এইসব সমস্যার ক্ষেত্রে একটি সাধারণ নম্বর দেখানো হয়: ৬৫৫৩৬। এই সংখ্যাটি একটি Dalvik Executable (DEX) বাইটকোড ফাইলের মধ্যে কোড দ্বারা ইনভোক করা যেতে পারে এমন রেফারেন্সের মোট সংখ্যাকে দেখায়। এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে যে কীভাবে মাল্টিডেক্স নামে পরিচিত অ্যাপ কনফিগারেশন চালু করে এই সীমাবদ্ধতা অতিক্রম করা যায়, যা আপনার অ্যাপকে একাধিক DEX ফাইল তৈরি করতে ও পড়তে দেয়।
৬৪ হাজার রেফারেন্সের সীমা সম্পর্কে
Android অ্যাপ (APK) ফাইলে Dalvik Executable (DEX) ফাইলের আকারে এক্সিকিউটেবল বাইটকোড ফাইল থাকে, যার মধ্যে আপনার অ্যাপ চালানোর জন্য ব্যবহৃত কম্পাইল করা কোড থাকে। Dalvik Executable স্পেসিফিকেশন একটি DEX ফাইলের মধ্যে রেফারেন্স করা যেতে পারে এমন পদ্ধতির মোট সংখ্যাকে সীমিত করে ৬৫,৫৩৬-এ—যার মধ্যে Android ফ্রেমওয়ার্ক পদ্ধতি, লাইব্রেরি পদ্ধতি এবং আপনার নিজস্ব কোডের পদ্ধতি অন্তর্ভুক্ত।
কম্পিউটার সায়েন্সের ক্ষেত্রে, কিলো বা K বলতে ১০২৪ (বা ২^১০) বোঝায়। যেহেতু ৬৫,৫৩৬ হল ৬৪x১০২৪-এর সমান, তাই এই সীমাটিকে _৬৪K রেফারেন্স সীমা_ বলা হয়।Android 5.0-এর আগের ভার্সনে মাল্টিডেক্স সাপোর্ট
Android 5.0 (API লেভেল ২১)-এর আগের প্ল্যাটফর্মের ভার্সন অ্যাপ কোড এক্সিকিউট করার জন্য Dalvik
রানটাইম ব্যবহার করে। ডিফল্ট হিসেবে, Dalvik অ্যাপকে প্রতিটি APK-তে একটি
classes.dex বাইটকোড ফাইলে সীমাবদ্ধ করে। এই সীমাবদ্ধতা
এড়াতে, মডিউল-লেভেল build.gradle বা
build.gradle.kts
ফাইলে মাল্টিডেক্স লাইব্রেরি যোগ করুন:
গ্ৰুভি
dependencies { def multidex_version = "2.0.1" implementation "androidx.multidex:multidex:$multidex_version" }
Kotlin
dependencies { val multidex_version = "2.0.1" implementation("androidx.multidex:multidex:$multidex_version") }
এই লাইব্রেরি আপনার অ্যাপের প্রাথমিক DEX ফাইলের অংশ হয়ে যায় এবং তারপরে অতিরিক্ত DEX ফাইল ও সেগুলিতে থাকা কোডের অ্যাক্সেস ম্যানেজ করে। এই লাইব্রেরির বর্তমান ভার্সন দেখতে, মাল্টিডেক্স ভার্সন দেখুন।
আরও বিবরণের জন্য, কীভাবে মাল্টিডেক্সের জন্য আপনার অ্যাপ কনফিগার করবেন সেই সম্পর্কিত বিভাগটি দেখুন।Android 5.0 এবং তার পরবর্তী ভার্সনের জন্য মাল্টিডেক্স সাপোর্ট
Android 5.0 (API লেভেল ২১) এবং তার পরবর্তী ভার্সন ART নামক রানটাইম ব্যবহার করে যা
APK ফাইল থেকে একাধিক DEX ফাইল লোড করার জন্য নেটিভ সাপোর্ট প্রদান করে। ART
অ্যাপ ইনস্টল করার সময় প্রি-কম্পাইলেশন করে, classesN.dex ফাইল স্ক্যান করে এবং Android ডিভাইসে
চালানোর জন্য সেগুলিকে একটি
OAT ফাইলে কম্পাইল করে। তাই, আপনার minSdkVersion
২১ বা তার বেশি হলে, ডিফল্ট হিসেবে মাল্টিডেক্স চালু থাকে এবং আপনার মাল্টিডেক্স লাইব্রেরির প্রয়োজন হয় না।
Android 5.0 রানটাইম সম্পর্কে আরও তথ্যের জন্য, Android Runtime (ART) এবং Dalvik পড়ুন।
মনে রাখবেন: Android Studio ব্যবহার করে আপনার অ্যাপ রান করার সময়, আপনি যে টার্গেট ডিভাইসে ডেপ্লয় করেন সেটির জন্য বিল্ড অপ্টিমাইজ করা হয়। টার্গেট ডিভাইসে Android 5.0 বা তার পরবর্তী যেকোনও ভার্সন চললে, মাল্টিডেক্স চালু করাও এর মধ্যে অন্তর্ভুক্ত। Android Studio ব্যবহার করে আপনার অ্যাপ ডিপ্লয় করার সময় শুধুমাত্র এই অপ্টিমাইজেশন প্রয়োগ করা হয় বলে, 64K সীমা এড়াতে মাল্টিডেক্সের জন্য আপনাকে এখনও আপনার রিলিজ বিল্ড কনফিগার করতে হতে পারে।
৬৪K-এর সীমা এড়িয়ে চলুন
৬৪K বা তার বেশি মেথড রেফারেন্সের ব্যবহার চালু করার জন্য আপনার অ্যাপ কনফিগার করার আগে, আপনার অ্যাপ কোড বা অন্তর্ভুক্ত লাইব্রেরির মাধ্যমে সংজ্ঞায়িত পদ্ধতি সহ আপনার অ্যাপ কোড দ্বারা কল করা রেফারেন্সের মোট সংখ্যা কমাতে পদক্ষেপ নিন।
নিম্নলিখিত কৌশলগুলি আপনাকে DEX রেফারেন্স সীমা অতিক্রম করা এড়াতে সাহায্য করতে পারে:
- আপনার অ্যাপের ডাইরেক্ট ও ট্রানজিটিভ ডিপেন্ডেন্সি পর্যালোচনা করুন
- আপনার অ্যাপে অন্তর্ভুক্ত করা কোনও বড় লাইব্রেরি ডিপেন্ডেন্সির ভ্যালু অ্যাপে যোগ করা কোডের পরিমাণের চেয়ে বেশি কিনা তা বিবেচনা করুন। একটি সাধারণ কিন্তু সমস্যাযুক্ত প্যাটার্ন হল খুব বড় লাইব্রেরি অন্তর্ভুক্ত করা, কারণ কয়েকটি ইউটিলিটি পদ্ধতি উপযোগী ছিল। অ্যাপ কোডের উপর নির্ভরতা কমালে, DEX রেফারেন্সের সীমা এড়িয়ে যেতে পারবেন।
- R8-এর মাধ্যমে অব্যবহৃত কোড সরিয়ে দেওয়া
- আপনার রিলিজ বিল্ডের জন্য R8 চালাতে কোড সঙ্কুচিত করার সুবিধা চালু করুন। আপনার APK-এর সাথে অব্যবহৃত কোড যাতে শিপ না করেন তা নিশ্চিত করতে 'সঙ্কুচিত করা' বিকল্প চালু করুন। কোড সঙ্কুচিত করার ফিচার সঠিকভাবে কনফিগার করা থাকলে, এটি আপনার ডিপেন্ডেন্সি থেকে অব্যবহৃত কোড এবং রিসোর্সও সরাতে পারে।
এইসব টেকনিক ব্যবহার করলে, আপনার APK-এর সামগ্রিক সাইজ কমাতে এবং অ্যাপে মাল্টিডেক্সের প্রয়োজনীয়তা এড়াতে সাহায্য করতে পারে।
মাল্টিডেক্সের জন্য আপনার অ্যাপ কনফিগার করুন
মনে রাখবেন: আপনারminSdkVersion ২১ বা তার বেশি হলে, ডিফল্ট হিসেবে মাল্টিডেক্স চালু করা থাকে
এবং আপনার মাল্টিডেক্স লাইব্রেরির প্রয়োজন নেই।
আপনার minSdkVersion ২০ বা তার কম সেট করা থাকলে, আপনাকে
অবশ্যই
মাল্টিডেক্স লাইব্রেরি ব্যবহার করতে হবে এবং
আপনার অ্যাপ প্রোজেক্টে নিম্নলিখিত পরিবর্তনগুলি করতে হবে:
-
মাল্টিডেক্স চালু করতে এবং ডিপেন্ডেন্সি হিসেবে মাল্টিডেক্স লাইব্রেরি যোগ করতে, মডিউল-লেভেল
build.gradleফাইল পরিবর্তন করুন, যেমন এখানে দেখানো হয়েছে:গ্ৰুভি
android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 36 multiDexEnabled true } ... } dependencies { implementation "androidx.multidex:multidex:2.0.1" }
Kotlin
android { defaultConfig { ... minSdk = 15 targetSdk = 36 multiDexEnabled = true } ... } dependencies { implementation("androidx.multidex:multidex:2.0.1") }
- আপনি
Applicationক্লাস ওভাররাইড করবেন কিনা তার উপর নির্ভর করে, নিম্নলিখিতগুলির মধ্যে একটি করুন:আপনি
Applicationক্লাস ওভাররাইড না করলে,<application>ট্যাগেandroid:nameসেট করতে আপনার ম্যানিফেস্ট ফাইল এইভাবে এডিট করুন:<?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ক্লাস ওভাররাইড করেন, তাহলে নিচে দেখানো পদ্ধতি অনুযায়ীMultiDexApplicationএক্সটেন্ড করার জন্য এটি পরিবর্তন করুন:Kotlin
class MyApplication : MultiDexApplication() {...}
জাভা
public class MyApplication extends MultiDexApplication { ... }
আপনি যদি
Applicationক্লাস ওভাররাইড করেন কিন্তু মূল ক্লাস পরিবর্তন করা সম্ভব না হয়, তাহলে পরিবর্তেattachBaseContext()পদ্ধতি ওভাররাইড করুন এবং মাল্টিডেক্স চালু করতেMultiDex.install(this)কল করুন:Kotlin
class MyApplication : SomeOtherApplication() { override fun attachBaseContext(base: Context) { super.attachBaseContext(base) MultiDex.install(this) } }
জাভা
public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
সতর্কতা:
MultiDex.install()সম্পূর্ণ হওয়ার আগেMultiDex.install()বা অন্য কোনও কোড রিফ্লেকশন বা JNI-এর মাধ্যমে এক্সিকিউট করবেন না। মাল্টিডেক্স ট্রেসিং সেইসব কল ফলো করবে না, যার ফলেClassNotFoundExceptionবা যাচাইকরণ সংক্রান্ত সমস্যা হবে। DEX ফাইলের মধ্যে খারাপ ক্লাস পার্টিশনের কারণে এটি হয়।
এখন আপনি অ্যাপ তৈরি করলে, Android বিল্ড টুল একটি প্রাথমিক DEX
ফাইল (classes.dex) এবং প্রয়োজন অনুযায়ী সহায়ক DEX ফাইল
(classes2.dex, classes3.dex এবং আরও অনেক কিছু) তৈরি করে।
বিল্ড সিস্টেম তখন আপনার APK-তে সব DEX ফাইল প্যাকেজ করে।
রানটাইমে, শুধুমাত্র প্রধান classes.dex ফাইলে সার্চ করার পরিবর্তে, মাল্টিডেক্স API আপনার পদ্ধতির জন্য উপলভ্য সব DEX ফাইল সার্চ করতে একটি বিশেষ ক্লাস লোডার ব্যবহার করে।
মাল্টিডেক্স লাইব্রেরির সীমাবদ্ধতা
মাল্টিডেক্স লাইব্রেরির কিছু পরিচিত সীমাবদ্ধতা আছে। আপনার অ্যাপ বিল্ড কনফিগারেশনে লাইব্রেরি অন্তর্ভুক্ত করার সময়, নিম্নলিখিত বিষয়গুলি বিবেচনা করুন:
- স্টার্টআপের সময় ডিভাইসের ডেটা পার্টিশনে DEX ফাইল ইনস্টল করা জটিল এবং সেকেন্ডারি DEX ফাইল বড় হলে 'অ্যাপ্লিকেশন সাড়া দিচ্ছে না (ANR)' সংক্রান্ত সমস্যা হতে পারে। এই সমস্যা এড়াতে, DEX ফাইলের সাইজ কমাতে এবং কোডের অব্যবহৃত অংশ সরাতে কোড সঙ্কুচিত করার সুবিধা চালু করুন।
- Android 5.0 (API লেভেল ২১)-এর আগের ভার্সনে রান করার সময়,
linearalloc সীমা (সমস্যা 37008143) এড়িয়ে যাওয়ার জন্য মাল্টিডেক্স ব্যবহার করা যথেষ্ট নয়। এই সীমা Android 4.0 (API লেভেল 14)-এ বাড়ানো হয়েছে,
তবে এটি সমস্যার সম্পূর্ণ সমাধান করেনি।
Android 4.0-এর আগের ভার্সনে, DEX ইন্ডেক্স সীমায় পৌঁছানোর আগেই আপনি linearalloc সীমায় পৌঁছে যেতে পারেন। তাই, আপনি যদি ১৪-এর থেকে কম API লেভেল টার্গেট করেন, তাহলে প্ল্যাটফর্মের সেইসব ভার্সনে ভালভাবে পরীক্ষা করুন, কারণ আপনার অ্যাপ চালু করার সময় বা নির্দিষ্ট গ্রুপের ক্লাস লোড করার সময় সমস্যা হতে পারে।
কোড সঙ্কুচিত করার মাধ্যমে এইসব সমস্যা কমানো বা সম্ভবত দূর করা যেতে পারে।
প্রাইমারি DEX ফাইলে প্রয়োজনীয় ক্লাস ঘোষণা করুন
মাল্টিডেক্স অ্যাপের জন্য প্রতিটি DEX ফাইল তৈরি করার সময়, বিল্ড টুল জটিল সিদ্ধান্ত গ্রহণ করে
যাতে নির্ধারণ করা যায় যে প্রাইমারি DEX ফাইলে কোন ক্লাস প্রয়োজন
যাতে আপনার অ্যাপ সফলভাবে শুরু হতে পারে। স্টার্টআপের সময় প্রয়োজন এমন কোনও ক্লাস
প্রাইমারি DEX ফাইলে না থাকলে, আপনার অ্যাপ ক্র্যাশ করে
এবং java.lang.NoClassDefFoundError সমস্যা দেখা যায়।
বিল্ড টুল, আপনার অ্যাপ কোড থেকে সরাসরি অ্যাক্সেস করা কোডের জন্য কোড পাথ শনাক্ত করে। তবে, কোড পাথ কম দৃশ্যমান হলে এই সমস্যা হতে পারে, যেমন আপনার ব্যবহার করা লাইব্রেরিতে জটিল ডিপেন্ডেন্সি থাকলে। যেমন, কোড যদি নেটিভ কোড থেকে জাভা পদ্ধতির ইন্ট্রোস্পেকশন বা ইনভোকেশন ব্যবহার করে, তাহলে সেই ক্লাসগুলি প্রাথমিক DEX ফাইলে প্রয়োজনীয় হিসাবে স্বীকৃত নাও হতে পারে।
আপনি java.lang.NoClassDefFoundError পেলে, আপনাকে অবশ্যই প্রাইমারি DEX ফাইলে প্রয়োজনীয় অতিরিক্ত ক্লাসগুলি ম্যানুয়ালি নির্দিষ্ট করতে হবে
আপনার বিল্ড টাইপে multiDexKeepProguard প্রপার্টি সহ সেগুলি ঘোষণা করে। multiDexKeepProguard ফাইলে কোনও ক্লাস
মিলে গেলে, সেই ক্লাস
প্রাইমারি DEX ফাইলে যোগ করা হয়।
multiDexKeepProguard প্রপার্টি
multiDexKeepProguard ফাইল ProGuard-এর মতো একই ফর্ম্যাট ব্যবহার করে এবং সম্পূর্ণ ProGuard গ্রামারকে
সমর্থন করে। আপনার অ্যাপে কী রাখা হবে তা কীভাবে কাস্টমাইজ করবেন সেই সম্পর্কে আরও তথ্যের জন্য, কোন কোড রাখতে হবে তা কাস্টমাইজ করুন দেখুন।
multiDexKeepProguard-এ আপনার উল্লেখ করা ফাইলে যেকোনও সঠিক ProGuard সিনট্যাক্সে -keep
বিকল্প থাকতে হবে। যেমন,
-keep com.example.MyClass.class। আপনি multidex-config.pro নামে একটি ফাইল তৈরি করতে পারেন
যা দেখতে এইরকম:
-keep class com.example.MyClass -keep class com.example.MyClassToo
আপনি যদি কোনও প্যাকেজে সব ক্লাস নির্দিষ্ট করতে চান, তাহলে ফাইলটি এইরকম দেখতে হবে:
-keep class com.example.** { *; } // All classes in the com.example package
তারপর আপনি বিল্ড টাইপের জন্য সেই ফাইল ঘোষণা করতে পারবেন, যেমন:
গ্ৰুভি
android { buildTypes { release { multiDexKeepProguard file('multidex-config.pro') ... } } }
Kotlin
android { buildTypes { getByName("release") { multiDexKeepProguard = file("multidex-config.pro") ... } } }
ডেভেলপমেন্ট বিল্ডে মাল্টিডেক্স অপ্টিমাইজ করা
মাল্টিডেক্স কনফিগারেশনের জন্য বিল্ড প্রসেসিংয়ের সময় অনেক বেশি লাগে কারণ বিল্ড সিস্টেমকে জটিল সিদ্ধান্ত নিতে হয় যে কোন ক্লাসগুলি প্রাথমিক DEX ফাইলে অন্তর্ভুক্ত করতে হবে এবং কোন ক্লাসগুলি সেকেন্ডারি DEX ফাইলে অন্তর্ভুক্ত করা যেতে পারে। এর অর্থ হল, মাল্টিডেক্স ব্যবহার করে ইনক্রিমেন্টাল বিল্ড করতে সাধারণত বেশি সময় লাগে এবং আপনার ডেভেলপমেন্ট প্রসেসকে সম্ভাব্যভাবে স্লো করে দিতে পারে।
ইনক্রিমেন্টাল বিল্ডের সময় কমাতে, বিল্ডের মধ্যে মাল্টিডেক্স আউটপুট আবার ব্যবহার করতে
প্রি-ডেক্সিং ব্যবহার করুন।
প্রি-ডেক্সিং ART ফর্ম্যাটের উপর নির্ভর করে যা শুধুমাত্র Android 5.0
(API লেভেল ২১) এবং তার পরবর্তী যেকোনও ভার্সনে উপলভ্য। আপনি Android Studio ব্যবহার করলে, Android 5.0 (API লেভেল ২১) বা তার পরবর্তী ভার্সন চলছে এমন ডিভাইসে আপনার অ্যাপ ডিপ্লয় করার সময়
IDE অটোমেটিক প্রি-ডেক্সিং ব্যবহার করে।
তবে, আপনি যদি কমান্ড লাইন থেকে Gradle বিল্ড রান করেন, তাহলে প্রি-ডেক্সিং চালু করতে আপনাকে
minSdkVersion ২১ বা তার বেশি সেট করতে হবে।
minSdkVersion-এর জন্য বিভিন্ন ভ্যালু সহ,
যেমন দেখানো হয়েছে:
গ্ৰুভি
android { defaultConfig { ... multiDexEnabled true // The default minimum API level you want to support. minSdkVersion 15 } productFlavors { // Includes settings you want to keep only while developing your app. dev { // Enables pre-dexing for command-line builds. When using // Android Studio 2.3 or higher, the IDE enables pre-dexing // when deploying your app to a device running Android 5.0 // (API level 21) or higher, regardless of minSdkVersion. minSdkVersion 21 } prod { // If you've configured the defaultConfig block for the production version of // your app, you can leave this block empty and Gradle uses configurations in // the defaultConfig block instead. You still need to include this flavor. // Otherwise, all variants use the "dev" flavor configurations. } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation "androidx.multidex:multidex:2.0.1" }
Kotlin
android { defaultConfig { ... multiDexEnabled = true // The default minimum API level you want to support. minSdk = 15 } productFlavors { // Includes settings you want to keep only while developing your app. create("dev") { // Enables pre-dexing for command-line builds. When using // Android Studio 2.3 or higher, the IDE enables pre-dexing // when deploying your app to a device running Android 5.0 // (API level 21) or higher, regardless of minSdkVersion. minSdk = 21 } create("prod") { // If you've configured the defaultConfig block for the production version of // your app, you can leave this block empty and Gradle uses configurations in // the defaultConfig block instead. You still need to include this flavor. // Otherwise, all variants use the "dev" flavor configurations. } } buildTypes { getByName("release") { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") } } } dependencies { implementation("androidx.multidex:multidex:2.0.1") }
Android Studio বা কমান্ড লাইন থেকে বিল্ড স্পিড উন্নত করতে সাহায্য করার জন্য আরও কৌশল জানতে, আপনার বিল্ড স্পিড অপ্টিমাইজ করুন নিবন্ধটি পড়ুন। বিল্ড ভেরিয়েন্ট ব্যবহার করার ব্যাপারে আরও তথ্য পেতে, বিল্ড ভেরিয়েন্ট কনফিগার করুন বিকল্প দেখুন।
পরামর্শ: বিভিন্ন মাল্টিডেক্স সংক্রান্ত প্রয়োজনের জন্য আপনার কাছে বিভিন্ন বিল্ড ভেরিয়েন্ট থাকলে, আপনি প্রতিটি ভেরিয়েন্টের জন্য আলাদা ম্যানিফেস্ট ফাইল দিতে পারেন যাতে API লেভেল ২০ এবং তার নিচের ফাইলগুলিই
<application> ট্যাগ নাম পরিবর্তন করে। এছাড়াও, আপনি
প্রতিটি ভ্যারিয়েন্টের জন্য আলাদা Application সাবক্লাস তৈরি করতে পারেন যাতে
শুধুমাত্র API লেভেল ২০ ও তার নিচের সাবক্লাস MultiDexApplication ক্লাসকে এক্সটেন্ড করে অথবা
MultiDex.install(this)-কে কল করে।
মাল্টিডেক্স অ্যাপ টেস্ট করা
মাল্টিডেক্স অ্যাপের জন্য ইনস্ট্রুমেন্টেশন টেস্ট লেখার সময়, আপনি
MonitoringInstrumentation বা
AndroidJUnitRunner
ইনস্ট্রুমেন্টেশন ব্যবহার করলে,
অতিরিক্ত কোনও কনফিগারেশনের প্রয়োজন হয় না। আপনি অন্য কোনও
Instrumentation ব্যবহার করলে,
আপনাকে অবশ্যই নিম্নলিখিত কোড দিয়ে এর onCreate() পদ্ধতি ওভাররাইড করতে হবে:
Kotlin
fun onCreate(arguments: Bundle) { MultiDex.install(targetContext) super.onCreate(arguments) ... }
জাভা
public void onCreate(Bundle arguments) { MultiDex.install(getTargetContext()); super.onCreate(arguments); ... }