जैसा कि पहले ही कहा गया है, आपके पास अपनी परियोजना और देयताओं में बहुत अधिक विधियाँ (65k से अधिक) हैं।
समस्या को रोकें: Play Services 6.5+ और support-v4 24.2+ के साथ तरीकों की संख्या कम करें
चूंकि Google Play सेवाएं अपने 20k + तरीकों के साथ "बर्बाद" करने के तरीकों में से एक मुख्य संदिग्ध हैं । Google Play सेवाओं का संस्करण 6.5 या उसके बाद, आपके लिए कई छोटे क्लाइंट पुस्तकालयों का उपयोग करके Google Play सेवाओं को अपने एप्लिकेशन में शामिल करना संभव है। उदाहरण के लिए, यदि आपको केवल GCM और मानचित्रों की आवश्यकता है, तो आप केवल इन निर्भरताओं का उपयोग करने का विकल्प चुन सकते हैं:
dependencies {
compile 'com.google.android.gms:play-services-base:6.5.+'
compile 'com.google.android.gms:play-services-maps:6.5.+'
}
उप पुस्तकालयों की पूरी सूची और यह जिम्मेदारियों को आधिकारिक Google डॉक्टर में पाया जा सकता है ।
अद्यतन : चूंकि समर्थन पुस्तकालय v4 v24.2.0 यह निम्नलिखित मॉड्यूल में विभाजित किया गया था:
support-compat
, support-core-utils
, support-core-ui
, support-media-compat
औरsupport-fragment
dependencies {
compile 'com.android.support:support-fragment:24.2.+'
}
हालांकि ध्यान दें, यदि आप उपयोग करते हैं support-fragment
, तो इसके अन्य सभी मॉड्यूलों पर निर्भरता होगी (यानी यदि आप उपयोग करते हैं android.support.v4.app.Fragment
तो कोई लाभ नहीं है)
यहाँ देखें समर्थन- v4 lib के लिए आधिकारिक रिलीज़ नोट
मल्टीडेक्सिंग सक्षम करें
चूंकि लॉलीपॉप (उर्फ बिल्ड 21+ उपकरण) को संभालना बहुत आसान है। अप्रोच फाइल प्रॉब्लम के आसपास काम करने के लिए अप्रोच फाइल प्रॉब्लम के आसपास काम करना है। अपनी ग्रेडल बिल्ड फ़ाइल में निम्न जोड़ें ( यह 65k से अधिक विधियों के साथ आधिकारिक Google दस्तावेज़ से लिया गया है ):
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
दूसरा चरण या तो अपने एप्लिकेशन वर्ग को तैयार करना है या यदि आप आवेदन का विस्तार नहीं करते हैं तो MultiDexApplication
अपने एंड्रॉइड मेनिफेस्ट में उपयोग करें :
या तो इसे अपने Application.java में जोड़ें
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
या mutlidex lib से प्रदान किए गए एप्लिकेशन का उपयोग करें
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
मल्टीडेक्स के साथ आउटऑफमेरी को रोकें
आगे की नोक के रूप में, यदि आप OutOfMemory
निर्माण चरण के दौरान अपवादों में भाग लेते हैं तो आप ढेर को बड़ा कर सकते हैं
android {
...
dexOptions {
javaMaxHeapSize "4g"
}
}
जो ढेर को 4 गीगाबाइट पर सेट करेगा।
डेक्स हीप मेमोरी मुद्दे पर अधिक विस्तार के लिए इस प्रश्न को देखें।
समस्या के स्रोत का विश्लेषण करें
तरीकों के स्रोत का विश्लेषण करने के लिए ग्रेडिंग प्लगइन https://github.com/KeepSafe/dexcount-gradle-plugin उदासीनता ट्री के साथ संयोजन में मदद कर सकता है जैसे उदा।
.\gradlew app:dependencies
Android में विधि गणना के बारे में अधिक जानकारी के लिए इस उत्तर और प्रश्न को देखें