Android स्टूडियो - शीर्ष स्तर की मान्यता प्राप्त:


82

मैंने टूल के भाग के रूप में प्रदान किए गए नए प्रोजेक्ट टेम्प्लेट का उपयोग करके एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाया है। सभी कोड स्टूडियो द्वारा उत्पन्न किए गए हैं मैंने अभी तक कोई संशोधन नहीं किया है।

मैं कोड को चलाने का प्रयास कर रहा हूं, लेकिन एप्लिकेशन निम्न त्रुटियों के साथ विफल हो जाता है, यह सुनिश्चित नहीं होता है कि समस्या क्या है जो किसी भी मदद की सराहना की है।

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    C:\Users\RichardKavanagh\AppData\Local\Android\android-sdk\build-tools\19.0.1\dx.bat --dex --output D:\Android\Projects\MyHealthRecord\app\build\libs\app-debug.dex D:\Android\Projects\MyHealthRecord\app\build\classes\debug D:\Android\Projects\MyHealthRecord\app\build\dependency-cache\debug D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\android-support-v7-appcompat-5a78dab7e2789bbe64f4bc80d106ca75c04dcf6f.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\classes-f9b947272e9f33ba50355b52d82755584f9c0c58.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\support-v4-19.0.0-31a2c13df80d37d62ca50fec3bde6da0ca706223.jar
Error Code:
    2
Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)



* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 12.948 secs

अपने build.gradle को पोस्ट करें।
गैब्रियल मारीओटी

इस समाधान की कोशिश करो , यह मेरे लिए काम किया, मैंने कोशिश की कि pyus13 ने क्या कहा लेकिन यह काम किया।
जोशुआ जी

ऐसा तब भी हो सकता है जब आप अपने पुस्तकालयों में डुप्लिकेट निर्भरता रखते हैं, इस समाधान को देखने के लिए stackoverflow.com/a/30649660/1979347
रोहन कंडवाल

मैंने उसी समस्या का हल निकाल दिया, जो कि हम पर निर्भर करता है, क्योंकि हम भूल गए कि नए से पहले जोड़ दिया गया है
टॉम रईस

जवाबों:


117

जैसा कि बाकी सभी ने यहां कहा है, com.android.supportआपकी परियोजना में एक बार से अधिक समर्थन पुस्तकालय ( ) शामिल किया जा रहा है। इसे अपने build.gradleमूल स्तर पर जोड़ने का प्रयास करें और इसे अन्य परियोजना निर्भरता के माध्यम से निर्यात पुस्तकालय से बाहर रखा जाना चाहिए।

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

यदि आपके पास अधिक है, तो इस तरह की निर्भरता में शामिल एक सहायता कार्य, आप उनमें से एक को दूर करना चाह सकते हैं:यहाँ छवि विवरण दर्ज करें


1
यह ठीक वही है जो इस मुद्दे को तय करता है
andreimarinescu

@iTapAndroid: मुझे किस build.gradleफ़ाइल में जोड़ने की आवश्यकता है ? में फ़ाइल Moduleया Project(इस पंक्ति है classpath 'com.android.tools.build:gradle:0.9.+')? कृपया मुझे बताएं, मैं इसे ठीक नहीं कर सकता।
टावर

आप इसे अपने मॉड्यूल ग्रेड फ़ाइल में जोड़ना चाहते हैं। यह वह फ़ाइल होगी जहाँ आप अपनी सभी निर्भरताएँ जोड़ रहे हैं।
iTapAndroid 16

@iTapAndroid यदि मेरे ग्रहण प्रोजेक्ट में बिल्ड.ग्रेड नहीं है, तो मैं इसे क्या हल कर सकता हूं?
किल कंसोल

4
यह सिर्फ मेरे लिए काम नहीं करता है मेरे पास एक ही मुद्दा है। जब मैं बताए गए कोड को जोड़ता हूं तो मैं android.support.v4.app आयात नहीं कर सकता।
नाथोफगॉड

18

यहाँ छवि विवरण दर्ज करें

dependencies {
    compile 'com.android.support:support-v4:19.1.+'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

अगर आपके लिबर्स फोल्डर में सपोर्ट जार है तो यह विवादित हो जाता है। यदि आपके पास अपने प्रोजेक्ट लिबर्स फ़ोल्डर में समर्थन जार है और आपके पास 'com.android.support:support-v4:13.0.+' संकलन के लिए मॉड्यूल निर्भरता है, तो UNEXPECTED_TOPLEVEL_DEPENDY अपवाद को फेंक दिया जाएगा। परस्पर विरोधी फ़ोल्डर संरचना और build.gradle


शानदार पोस्ट, धन्यवाद। मेरे लिए यह क्या compile fileTree(dir: 'libs', include: ['*.jar'])आपके स्क्रीनशॉट में हिस्सा था । व्यक्तिगत निर्भरता के सभी पर टिप्पणी की और कहा कि यह मेरी समस्या को हल करता है।
user1003916

9

क्योंकि आप अपने प्रोजेक्ट में दो समान काम शामिल कर सकते हैं। अपनी build.gradle फ़ाइल की जाँच करें।

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile files('libs/android-support-v4.jar') 
 }

यदि आपकी फ़ाइल में संकलन शामिल है 'com.android.support:appcompat-v7:+'और compile files('libs/android-support-v4.jar'), इसमें यह समस्याएँ होंगी। इस वाक्य को हटाएँ: संकलित फ़ाइलें ('libs / android-support-v4.jar')

मैं इस समस्या को ठीक करता हूं।


8

त्रुटि तब होती है जब आपके पास एक ही लाइब्रेरी / निर्देशिका होती है, जो आपके build.gradle की निर्भरता में एक से अधिक बार शामिल होती है। ठीक है, मान लें कि आपके पास एक ऐप संरचना है जो इस तरह दिखती है:

यहाँ छवि विवरण दर्ज करें

तो आपके पास मुख्य "ऐप" है और फिर आपके पास उप-एप्लिकेशन / मॉड्यूल / लाइब्रेरी का एक गुच्छा है। पुस्तकालय हैं: 1) gen_test_library, 2) genes_nine_old_androids_library, और 3) swipe_list_view_library।

मेरा नाम जीन है, इसीलिए ये सभी "जीन" पुस्तकालय हैं।

"एप्लिकेशन" के लिए build.gradle के अंदर, मेरे पास:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.0'

    compile project(':libraries:gene_test_library')
    //compile project(':libraries:genes_nine_old_androids_library')
    compile project(':libraries:swipe_list_view_library')
}

Gen_test_library के लिए build.gradle के अंदर, मेरे पास कुछ भी नहीं है:

dependencies {
}

Gen_nine_old_androids_library के लिए build.gradle के अंदर, मेरे पास:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}

मेरे अंदर build.gradle for swipe_list_view_library, मेरे पास है:

dependencies {
    compile 'com.nineoldandroids:library:2.4.0+'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}

कोड की यह पंक्ति "फ़ाइल संकलित करें (dir: 'libs', शामिल हैं: ['* .jar']]" बस का अर्थ है "हे, किसी भी jar फ़ाइलों के लिए इस मॉड्यूल के अंदर 'libs' फ़ोल्डर के अंदर देखें। मेरे पास किसी भी मॉड्यूल के libs फ़ोल्डर में कुछ भी नहीं है ताकि आप कोड की उस पंक्ति को अनदेखा कर सकें।

तो चलिए बताते हैं कि मैं इन कॉम्प्लेक्स आउट // कंपाइल प्रोजेक्ट (': लाइब्रेरी: जीन_नाइन_ल्ड_ऑनड्रोइड्स_लॉउंड्स') "ऐप" मॉड्यूल के लिए बिल्ड.ग्रेडल में हूं। तब मुझे “UNEXPECTED TOP-LEVEL EXCEPTION:” त्रुटि मिलेगी। ऐसा क्यों है?

यहाँ छवि विवरण दर्ज करें

अच्छी तरह से, लिखना // संकलन परियोजना (': पुस्तकालयों: genes_nine_old_androids_library') "app" के लिए build.gradle के अंदर, "genes_nine_old_androids_library" मॉड्यूल की बिल्ड निर्भरता लेने और इसे वहां डालने के समान है। इसलिए // कंपाइल प्रोजेक्ट (': पुस्तकालयों: genes_nine_old_androids_library') स्टेटमेंट को अनइंस्टॉल करना, "एप्लिकेशन" मॉड्यूल के लिए build.gradle बन जाता है:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.0'

    compile project(':libraries:gene_test_library')
    ***compile fileTree(dir: 'libs', include: ['*.jar'])***
    ***compile 'com.android.support:appcompat-v7:21.0.0'***
    compile project(':libraries:swipe_list_view_library')
}

ध्यान दें कि अब "संकलन" com.android.support:appcompat-v7:21.0.0 'कैसे 2x दिखाता है। वहीं से त्रुटि आ रही है।


3
"त्रुटि तब होती है जब आपके पास एक ही लाइब्रेरी / निर्देशिका एक से अधिक बार होती है।" इससे मेरा दिन बच गया।
सबिन सेबस्टियन

appआप में @Gene, compile project(':libraries:swipe_list_view_library')और swipe_list_view_library में appcompat-v7 भी शामिल है। तो, आप अंत में 2 appcompat-v7 संकलित कर रहे हैं app। यह एक त्रुटि क्यों नहीं है?
अज़ीज़बेकियन

उम ... मैंने इस साल पहले लिखा था ... मुझे लगता है कि यह त्रुटि को कम कर दिया गया है शीर्ष-स्तर का विस्तार।
जीन

5

मुझे इस समस्या के 2 कारण मिले:

  1. कभी-कभी कई शामिल पुस्तकालयों के कारण इसकी। उदाहरण के लिए आप जोड़ते हैं

    संकलन 'com.nineoldandroids: लाइब्रेरी: 2.4.0'

अपने ग्रेडेल में और एक और लाइब्रेरी जोड़ें जो कि यह "नौल्डेन्ड्रोइड्स" का भी उपयोग करता है!

  1. जैसा कि एंड्रॉइड डेवलपर आधिकारिक वेबसाइट ने कहा है:

यदि आपने एक एंड्रॉइड ऐप बनाया है और यह त्रुटि प्राप्त की है, तो बधाई हो, आपके पास बहुत सारे कोड हैं!

तो क्यों?

Dalvik निष्पादन योग्य विनिर्देश उन तरीकों की कुल संख्या को सीमित करता है, जिन्हें किसी एकल DEX फ़ाइल में 65,536 में संदर्भित किया जा सकता है, जिसमें Android फ्रेमवर्क विधियाँ, लाइब्रेरी विधियाँ, और आपके अपने कोड में विधियाँ शामिल हैं। इस सीमा को पार करने के लिए आवश्यक है कि आप एक मल्टीडेक्स कॉन्फ़िगरेशन के रूप में जानी जाने वाली एक से अधिक डीएक्स फ़ाइल बनाने के लिए अपनी ऐप बिल्ड प्रक्रिया को कॉन्फ़िगर करें।

फिर आपको क्या करना चाहिए?

  • 65K की सीमा से बचना - कैसे?

    1. अपने ऐप की प्रत्यक्ष और सकर्मक निर्भरता की समीक्षा करें - अपने ऐप में शामिल किसी भी बड़े लाइब्रेरी निर्भरता का उपयोग इस तरीके से किया जाता है कि एप्लिकेशन में जोड़े जा रहे कोड की मात्रा को बढ़ा दिया जाए। एक सामान्य विरोधी पैटर्न में एक बहुत बड़ी लाइब्रेरी को शामिल करना है क्योंकि कुछ उपयोगिता विधियां उपयोगी थीं। अपने ऐप कोड निर्भरता को कम करने से आप अक्सर डेक्स संदर्भ सीमा से बचने में मदद कर सकते हैं।
    2. ProGuard के साथ अप्रयुक्त कोड निकालें - ProGuard को चलाने के लिए अपने ऐप के लिए ProGuard सेटिंग्स कॉन्फ़िगर करें और सुनिश्चित करें कि आपने रिलीज़ बिल्ड के लिए सिकुड़ सक्षम किया है। सिकुड़ती सक्षम करना सुनिश्चित करता है कि आप अपने APK के साथ अप्रयुक्त कोड को शिपिंग नहीं कर रहे हैं।
  • ग्रेड के साथ मल्टीडेक्स के लिए अपना ऐप कॉन्फ़िगर करना - कैसे? मल्टीडेक्स को सक्षम करने के लिए अपने ग्रेडल बिल्ड कॉन्फ़िगरेशन को बदलें।

डाल

multiDexEnabled true

DefaultConfig, buildType, या आपके Gradle build file के productFlavor सेक्शन में।

2.अपने मेनिफ़ेस्ट में मल्टीडेक्सऐप्लिकेशन क्लास को मल्टीडेक्स सपोर्ट लाइब्रेरी से एप्लिकेशन एलिमेंट में जोड़ें।

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

नोट: यदि आपका ऐप एप्लिकेशन वर्ग का विस्तार करता है, तो आप मल्टीडेक्स को सक्षम करने के लिए मल्टीबैक्स.इनस्टॉल (यह) पद्धति को संलग्न कर सकते हैं। अधिक जानकारी के लिए, MultiDexApplication संदर्भ प्रलेखन देखें।


इसके अलावा यह कोड आपकी मदद कर सकता है:

dexOptions {
    javaMaxHeapSize "4g"
}

अपनी श्रेणी में रखें (Android {...})।


JavaMaxHeapSize का उपयोग करने का क्या कारण है ?
इगोरगानापल्स्की

4

हाय सब मेरे पास एक ही मुद्दा था जो कि डुप्लिकेट समर्थन संस्करण 4 फ़ाइल के कारण हो रहा था जिसे मैंने पार्स एकीकृत करने की कोशिश करते समय शामिल किया था। लिबास निर्देशिका से अतिरिक्त समावेश हटा दिया गया है और यह अब ठीक काम करता है!


मेवेन रिपॉजिटरी का उपयोग करते हुए, मुझे निर्भरता ब्लॉक से "संकलन" com.android.support:appcompat-v7:23.0.1 'और "संकलन" com.android.support:support-v4:23.+ "दोनों को निकालना पड़ा।
माहिया

3

ऐसा तब होता है जब एक पुस्तकालय दो बार संकलित हो रहा होता है (अर्थात इसे दो बार जोड़ा जाता है)। यह पुस्तकालय या किसी अन्य का समर्थन हो सकता है, इससे कोई फर्क नहीं पड़ता।
सामान्य मामला यह है कि आपने एक पुस्तकालय का संकलन विवरण जोड़ा है जो आपकी libs/निर्देशिका में पहले से ही है । सभी *.jarफाइलें अपने आप संकलित हो जाती हैं। इस प्रकार, एक संकलन स्टेटमेंट जोड़ने से त्रुटि हो रही है। उस कथन को हटाने से यह समस्या ठीक हो सकती है। यदि यह लागू नहीं है तो हमारे पास पहले से ही कुछ भयानक उत्तर हैं।


3

यह विनम्र जवाब हो सकता है, लेकिन यह मेरे लिए काम किया:

  • मैंने अपनी परियोजना पर सभी पुस्तकालयों को मैन्युअल रूप से हटा दिया और जोड़ दिया। (एक के बाद एक) और वोइला, इसने काम किया।
  • बिल्ड -> पुनर्निर्माण परियोजना

नोट: मेरा कोई पुस्तकालय दो बार संकलित नहीं किया गया था।


2

सुनिश्चित करें कि आपने build.gradle में समर्थन लाइब्रेरी निर्भरता का उपयोग करने के लिए समर्थन रिपॉजिटरी डाउनलोड की है।

यहाँ छवि विवरण दर्ज करें

यदि ये सभी उपलब्ध हैं तो पहले से ही उपलब्ध बटन के उपयोग से एक बार अपने प्रोजेक्ट को सिंक के साथ सिंक कर लें।

सिंक बटन


0

मेरे मामले में TOP LEVEL EXCEPTION परियोजना पथ में एक विशेष चार के कारण फेंक दिया गया था। बस परियोजना को बंद कर दिया, "á" को "a" में बदल दिया और परियोजना को फिर से खोल दिया। काम करता है!


0

अचानक, मेरी परियोजना में कोई बड़ा बदलाव किए बिना, मुझे भी यह त्रुटि मिली।

उपरोक्त सभी ने मेरे लिए काम नहीं किया, क्योंकि मुझे V4 और V7 दोनों के समर्थन की आवश्यकता थी।

अंत में, क्योंकि 2 घंटे पहले परियोजना को बिना किसी समस्या के संकलित किया गया था, मैंने बस Android स्टूडियो को प्रोजेक्ट को REBUILD को बताया, और त्रुटि दूर हो गई।


0

जब मैंने अपने ऐप के लिए एक हस्ताक्षरित एपीके बनाने की कोशिश की तो मुझे भी ऐसी ही समस्या हुई।

अजीब बात है, यह केवल तब हुआ जब मैं एक रिलीज APK बनाना चाहता था , जबकि डिबग APK पर सब कुछ ठीक काम करता था।

अंत में, इस धागे को देखते हुए, मैंने build.gradle में समर्थन लाइब्रेरी डुप्लिकेट के लिए जाँच की और किसी भी डुप्लीकेशन को हटा दिया, लेकिन यह पर्याप्त नहीं था ..

मुझे साफ-सुथरा प्रोजेक्ट करना था और तभी आखिरकार मुझे काम करने को मिला है।


0

मुझे पता है कि समस्या का उत्तर दिया गया था, लेकिन यह फिर से हो सकता है और मेरा समाधान उन लोगों से थोड़ा अलग था जो मुझे मिला। मेरे मामले में समाधान मेरी परियोजना में दो अलग-अलग पुस्तकालयों को शामिल करने से संबंधित नहीं था। नीचे देखें कोड:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

यह कोड उस त्रुटि को "अनपेक्षित टॉप-लेवल एक्सेप्शन" दे रहा था। मैं निम्नलिखित बदलाव करते हुए कोड को ठीक करता हूं:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

DexMerger के साथ जावा संस्करण का क्या करना है ?
इगोरगानापल्स्की

0

मैंने अपनी समस्या को बिल्ड ग्रेडेल में जोड़ने के साथ हल किया:

   defaultConfig {
   multiDexEnabled true


 dependencies {
 compile 'com.android.support:multidex:1.0.0'

एक और समाधान अनावश्यक पुस्तकालयों को हटाया जा सकता है


आपने मल्टीडेक्स को क्यों सक्षम किया?
इगोरगानापल्स्की

1
@IgorGanapolsky इसकी वजह से कई शामिल पुस्तकालयों के ऊपर जैसे मुद्दों को हल करने के लिए। एंड्रॉइड स्टूडियो में: Dalvik निष्पादन योग्य विनिर्देश उन तरीकों की कुल संख्या को सीमित करता है, जिन्हें किसी एकल DEX फ़ाइल के भीतर 65,536 में संदर्भित किया जा सकता है, जिसमें Android फ्रेमवर्क विधियाँ, लाइब्रेरी विधियाँ, और आपके अपने कोड में विधियाँ शामिल हैं। इस सीमा को पार करने के लिए आवश्यक है कि आप एक मल्टीडेक्स कॉन्फ़िगरेशन के रूप में जानी जाने वाली एक से अधिक डीएक्स फ़ाइल बनाने के लिए अपनी ऐप बिल्ड प्रक्रिया को कॉन्फ़िगर करें।
बिष्णु दुधराज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.