2014-05-20 5 views
6

मैंने इस त्रुटि को मारा और त्रुटि संदेश के लिए कोई हिट नहीं मिली, इसलिए मैंने सोचा कि मैं उस समाधान को साझा करूंगा जो मैं अपने काम को दोहराने में समस्या का सामना करने के लिए किसी और को बचाने के लिए आया था।"परेशानी लेखन आउटपुट: बहुत सारे फ़ील्ड संदर्भ: 70185; अधिकतम 65536 है। आप - मल्टी-डेक्स विकल्प का उपयोग करने का प्रयास कर सकते हैं।" एंड्रॉइड प्रोजेक्ट का निर्माण करते समय

जब एक (बड़े) आवेदन में इस्तेमाल के लिए एक नया एंड्रॉयड पुस्तकालय (apklib) लेखन, मैं Dexing दौरान निम्न त्रुटि हो रही है जब मैं एक निर्भरता के रूप में मेरी नई परियोजना जोड़ें:

मुसीबत लेखन उत्पादन : बहुत सारे क्षेत्र संदर्भ: 70185; अधिकतम 65536 है।
आप --multi-dex विकल्प का उपयोग करने का प्रयास कर सकते हैं।
पैकेज से संदर्भ:
< ... elided क्षेत्र में गिना जाता है के साथ संकुल की लंबी सूची ... >

विशेष निर्माण कदम उस पर विफल रहता है:

java -jar $ANDROID_SDK/build-tools/19.0.3/lib/dx.jar --dex \ 
--output=$PROJECT_HOME/target/classes.dex \ 
<... long list of apklib and jar dependencies elided ...> 

--multi-dex का प्रयोग के रूप में सिफारिश त्रुटि संदेश द्वारा समाधान हो सकता है, लेकिन मैं एप्लिकेशन प्रोजेक्ट का मालिक नहीं हूं और इसमें पहले से ही एक बड़ी जटिल निर्माण प्रक्रिया है जिसे मैं बिना किसी बदलाव के संकोच में संकोच करूंगा।

मैं इस समस्या को नो-ऑप टेस्ट लाइब्रेरी प्रोजेक्ट के साथ पुन: उत्पन्न कर सकता हूं जिसमें सचमुच कोई फ़ील्ड नहीं है, लेकिन त्रुटि आउटपुट में इसे 6000+ फ़ील्ड के रूप में सूचीबद्ध किया गया है। त्रुटि आउटपुट में सूचीबद्ध संकुलों में, समान 6k + फ़ील्ड गणनाओं के साथ एक मुट्ठी भर है, लेकिन फिर विशाल बहुमत में < 1k फ़ील्ड गणनाएं अधिक व्यावहारिक हैं।

यह समस्या "बहुत सारी विधियों" समस्या के समान है जो Facebook famously hacked their way around है। एफबी समाधान पागल लगता है, और मुझे मिला एकमात्र अन्य समाधान (उदाहरण के लिए, this Android bug ticket, or this one, this SO answer, this other SO answer) सभी में मुख्य ऐप का कोड बदलना शामिल है जो कि मैं जो करना चाहता हूं उससे काफी अच्छी तरह से है।

क्या कोई अन्य समाधान है?

उत्तर

2

समाधान मुख्य अनुप्रयोग के पैकेज से मेल खाने के लिए AndroidManifest में package को बदलने का था।

एक इस तरह प्रकट:

<manifest package="com.example.testlibrary" ... 

6k + क्षेत्रों में हुई और विफलता का निर्माण। मुख्य एप्लिकेशन के पैकेज से मेल खाने के लिए इसे बदलना

<manifest package="com.example.mainapplication" ... 

परिणामस्वरूप परियोजना निर्माण सफलतापूर्वक हुआ।

ध्यान दें कि केवल मैनिफेस्ट में पैकेज बदल रहा है, मैंने पुस्तकालय के जावा स्रोत या उसके लेआउट में कोई बदलाव नहीं किया है (जावा पैकेज अभी भी com.example.testlibrary मिलान करने के लिए निर्देशिका संरचना के साथ था)।

मुझे लगता है कि विभिन्न पैकेज नाम सभी एंड्रॉइड फ़ील्ड को उस पैकेज के तहत फिर से शामिल करने का कारण बन रहा है। 6k + फ़ील्ड के साथ त्रुटि सूची में सभी संकुलों में मुख्य अनुप्रयोग की तुलना में एक अलग पैकेज नाम था।

मैं भी (बाद में, grr), this blog post पाया जो एक ही समस्या और अंतिम समाधान का विवरण देता है।

+0

मैं यह कैसे कर सकता हूं? मैंने पैकेज को किसी अन्य चीज़ का नाम बदलने की कोशिश की, लेकिन मुझे अभी भी एक ही त्रुटि है, .... मैं वास्तव में काम करने के लिए इसे कैसे प्राप्त करता हूं, इस बारे में अतिरिक्त जानकारी का उपयोग कर सकता हूं – user198923

संबंधित मुद्दे

 संबंधित मुद्दे