"प्रोग्राम प्रकार पहले से मौजूद है" का क्या अर्थ है?


99

मैं एंड्रॉइड स्टूडियो में एक ऐप बनाने की कोशिश कर रहा हूं। एक ग्रहण निर्भरता के रूप में एक्लिप्स पाहो लाइब्रेरी को जोड़ने के बाद (या क्या यह मैवेन है? मैं एंड्रॉइड पारिस्थितिकी तंत्र के लिए नया हूं), मुझे निम्नलिखित त्रुटि मिली:

Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
Message{kind=ERROR, text=Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat, sources=[Unknown source file], tool name=Optional.of(D8)}

मैंने इस त्रुटि से संबंधित कई अलग-अलग स्टैकओवरफ़्लो प्रश्नों की जाँच की है, लेकिन उत्तर कुछ विशिष्ट पुस्तकालयों के लिए विशिष्ट हैं। मैं न केवल त्रुटि के समाधान के लिए देख रहा हूं, बल्कि इस त्रुटि का अर्थ है कि त्रुटि क्या है इस तरह लोगों के लिए उनके विशिष्ट मामलों के समाधान का पता लगाना आसान हो जाएगा। अब तक, कोई जवाब नहीं दिया गया है।

अन्य StackOverflow के जवाब से, मैं इकट्ठा किया है कि यह मेरे gradle फ़ाइल के साथ कुछ करना है। तो, यहाँ app / build.gradle है:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "---REDACTED FOR PRIVACY---"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-media-compat:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    implementation 'com.google.android.gms:play-services-maps:12.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.0.2'
}

repositories {
    maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
} 

जवाबों:


73

यह समस्या आमतौर पर एक नामकरण संघर्ष से आती है, आपके मामले में सपोर्ट-वी 4 लाइब्रेरी, जिसका उपयोग कई पुस्तकालयों द्वारा किया जाता है।

मॉड्यूल के लिए निर्भरता की सूची खोजने के लिएapp (ऐप के लिए डिफ़ॉल्ट मॉड्यूल का नाम) हम gradlew app:dependenciesसभी पुस्तकालयों की सूची को पुनः प्राप्त करने के लिए कर सकते हैं ।

हमने पाया कि support-v4इसका उपयोग किया जाता है:

//short version of the dependencies list highlighting support-v4
+--- com.android.support:support-v13:27.1.0
|    \--- com.android.support:support-v4:27.1.0

+--- com.google.android.gms:play-services-maps:12.0.1
|    +--- com.google.android.gms:play-services-base:12.0.1
|    |    +--- com.google.android.gms:play-services-basement:12.0.1
|    |    |    +--- com.android.support:support-v4:26.1.0 -> 27.1.0 (*)

+--- org.eclipse.paho:org.eclipse.paho.android.service:1.0.2
|    +--- com.google.android:support-v4:r7  // <- problem here

हम देखते हैं कि मैप्स पर support-v4 सपोर्ट-v13 से दिए गए संस्करण का उपयोग करेगा।

हम यह भी देखते हैं कि ग्रहण पुस्तकालय एक और संस्करण (r7 ??) का उपयोग कर रहा है।

अपनी समस्या को हल करने के लिए, आप support-v4इस तरह से इस ग्रहण पुस्तकालय से मॉड्यूल को बाहर करने की कोशिश कर सकते हैं :

implementation ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
    exclude module: 'support-v4'
}

तब आपको अपने आवेदन को संकलित करने में सक्षम होना चाहिए।

Btw आपको ध्यान रखना चाहिए कि ग्रहण मॉड्यूल आपके कोड का परीक्षण करके नहीं टूटेगा।


2
मेरी पूरी तरह से एक अलग झड़प थी, लेकिन आपके जवाब से मुझे वास्तव में यह विचार करने में मदद मिली कि कुछ टकराव हो सकता है। मैं 2 अलग-अलग खिलाड़ियों का उपयोग कर रहा हूं जो एंड्रॉइड एक्सो प्लेयर का उपयोग करते हैं। किसी दिन किसी की मदद कर सकते हैं। धन्यवाद!
वुकू

@Vucko आपने क्लैश की पहचान कैसे की है?
वीर राजपुरोहित

सरासर भाग्य के माध्यम से। मैंने शोध शुरू किया और देखा कि मेरी ब्राइटकोव वीडियो प्लेयर लाइब्रेरी एक्सोप्लेयर का उपयोग करती है क्योंकि यह निर्भरता है। यह देखने की कोशिश करें कि आपके लिए क्या हो सकता है।
12

82

मेरे लिए सिर्फ परियोजना की सफाई से समस्या हल हो गई

टर्मिनल का उपयोग करना :

./gradlew clean

एंड्रॉइड स्टूडियो का उपयोग करना :

Build (menu) > Clean Project

सही! शायद यह एंड्रॉइड स्टूडियो का बग है।
अपोलन

3
एंड्रॉइड स्टूडियो में मेनू से भी किया जा सकता है Build > Clean Project
साल्वाडोर

1
एंड्रॉइड स्टूडियो के File > Invalidate Caches / Restart > Invalidate and restartलिए समस्या को ठीक कर सकते हैं
अधिकतम

12

से सरकारी डॉक्टर

यदि रनटाइम क्लासपाथ पर एक बार एक से अधिक क्लास लगती है, तो आपको निम्न के समान त्रुटि मिलती है:

Program type already present com.example.MyClass

यह त्रुटि आमतौर पर निम्न परिस्थितियों में से एक के कारण होती है:

  • एक द्विआधारी निर्भरता में एक पुस्तकालय शामिल है जिसे आपके ऐप में प्रत्यक्ष निर्भरता के रूप में भी शामिल किया गया है।

    उदाहरण के लिए, आपका ऐप लाइब्रेरी ए और लाइब्रेरी बी पर सीधे निर्भरता की घोषणा करता है, लेकिन लाइब्रेरी ए में पहले से ही लाइब्रेरी बाइनरी शामिल है। इस समस्या को हल करने के लिए, लाइब्रेरी B को प्रत्यक्ष निर्भरता के रूप में निकालें।

  • आपके ऐप में एक स्थानीय बाइनरी निर्भरता और एक ही लाइब्रेरी पर एक रिमोट बाइनरी निर्भरता है।

    इस समस्या को हल करने के लिए, द्विआधारी निर्भरता में से एक को हटा दें। (देखें कि क्या पुस्तकालय को जार और ढाल निर्भरता के रूप में जोड़ा गया है)


बहुत बहुत धन्यवाद। 1 मेरे लिए समस्या का कारण था। मैंने दूसरे पुस्तकालय के अंदर दोहराए गए पुस्तकालय के लिए संकलन का उपयोग किया, जो कि निर्माण के दौरान निर्माण को बाहर कर देगा।
मॉन्स्टर ब्रेन

4

यह मेरे साथ भी हुआ है, लेकिन मेरे मामले में, मैं अलग-अलग निर्भरता को शामिल करने की कोशिश करता हूं, जिसमें एक ही वर्ग का उपयोग करना है debugApiऔर Apiइसलिए डुप्लिकेट वर्ग के रूप में चिह्नित एंड्रॉइड स्टूडियो को चिह्नित किया गया है, इसलिए मैंने बिल्ड वेरिएंट के आधार पर अलग-अलग निर्भरता शामिल करने के लिए debugApi& releaseApiका उपयोग करके समस्या को हल किया ।


3

एप्लिकेशन स्तर ग्रेड फ़ाइल में सहायता लाइब्रेरी जोड़ें

कार्यान्वयन 'com.android.support:design:27.1.0'


2

मेरे मामले में इसका मतलब है कि मेरे पास 2 * .jar फ़ाइल या 2 लीबरी है, जहां कुछ स्रोत कोड में हैं। उदाहरण के लिए: मेरे पास 2 youtube.jarहैं app/libaryऔर module/libary एक बार अनावश्यक हटा दें और यह ठीक हो जाएगा


1

मुझे आशा है कि यह किसी की मदद करता है, एक बिल्ड> क्लीन प्रोजेक्ट ने मेरे लिए काम किया।


3
यह समाधान पहले से ही एक और जवाब की टिप्पणियों में सुझाया गया है
फैन मार्क

1

इस समस्या के लिए समस्या - यदि आप लायब्रेरी का उपयोग मॉड्यूल और उसी लायब्रेरी के रूप में किसी अन्य लायब्रेरी में निर्भरता के रूप में करते हैं।

उदाहरण: LibraryA आयातित रूप में मॉड्यूल और एक ही LibraryA किसी अन्य पुस्तकालय मॉड्यूल में निर्भरता के रूप में शामिल किया है।

इस समस्या को कैसे ठीक करें?

समाधान 1 -> यदि आप दोनों को रखना चाहते हैं -> लाइब्रेरीए मॉड्यूल के पैकेज के नाम को केवल रिफलेक्टर करें

समाधान 2 -> लाइब्रेरीए निर्भरता को हटा दें और मॉड्यूल का उपयोग करें

कार्यान्वयन परियोजना (': लाइब्रेरीए')

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.