स्थापित करें कंसोल में त्रुटि दिखाता है: स्थापित विफलता प्रदाता


164

मैं Android SDK में NotesList नमूना कार्यक्रम के साथ प्रयोग कर रहा हूं। मैंने कार्यक्रम में थोड़ा बदलाव किया है, लेकिन जब मैं अपना संपादित संस्करण स्थापित करता हूं तो मुझे संदेश INSTALL_FAILED_CONFLICTING_PROVIDER मिलता रहता है जब मैं मूल नोट्स प्रोग्राम डिवाइस पर पहले से ही इसे स्थापित करने का प्रयास करता हूं। इसे एक अद्वितीय डेटाबेस बनाने के लिए मुझे प्रदाता में क्या बदलने की आवश्यकता है? यह ठीक काम करता है अगर मैं मूल नोट्स प्रोग्राम को अनइंस्टॉल करता हूं और फिर अपना संपादित संस्करण स्थापित करता हूं।

जवाबों:


198

प्राधिकरण, जैसा कि सूचीबद्ध android:authoritiesहोना चाहिए अद्वितीय है। इस विशेषता के लिए प्रलेखन उद्धृत करते हुए :

संघर्षों से बचने के लिए, प्राधिकरण नामों को जावा-शैली के नामकरण सम्मेलन (जैसे com.example.provider.cartoonprovider) का उपयोग करना चाहिए। आमतौर पर, यह ContentProvider उपवर्ग का नाम है जो प्रदाता को लागू करता है


5
@ कॉमन्सवेयर मैंने android:authoritiesअपने AndroidManifest providerटैग में विशेषता का उपयोग किया है । मैंने उस प्रोजेक्ट का उपयोग अपने एंड्रॉइड लाइब्रेरी प्रोजेक्ट के रूप में किया है इस लाइब्रेरी प्रोजेक्ट का उपयोग करके मैंने कुछ प्रोजेक्ट विकसित किए हैं। install_failed_conflicting_providerयदि हम सामान्य लाइब्रेरी प्रोजेक्ट का उपयोग करते हैं तो समस्या को कैसे हल किया जाए।
जमाल

1
@ जमाल: यदि आप एंड्रॉइड के लिए ग्रैडल का उपयोग कर रहे हैं, जैसे कि एंड्रॉइड स्टूडियो से, तो मर्जिंग विकल्प आपको प्राधिकरण स्ट्रिंग को दर्जी करने की अनुमति देगा। अन्यथा, <provider>लाइब्रेरी के प्रकटन से हटा दें और इसे एक अद्वितीय प्राधिकरण स्ट्रिंग के साथ आवेदन स्तर पर परिभाषित करें।
कॉमन्सवेयर

4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - यदि आपके पास और प्रश्न हैं, और आप खोज के माध्यम से उत्तर नहीं पा सकते हैं, तो कृपया एक नया स्टैक ओवरफ्लो प्रश्न पूछें।
कॉमन्सवेयर

11
यदि आप एक ही प्रदाता के नाम के साथ दो प्रोजेक्ट में लाइब्रेरी का उपयोग करते हैं, तो यह इस त्रुटि का कारण बन सकता है
मोहम्मद सुबी शेख कुरुश

1
मेरे पास android:authoritiesया <provider>मेरे पुस्तकालय में इस तरह की कोई चीज नहीं है और यह त्रुटि है।
lef

143

यदि आपके पास अलग-अलग स्वाद हैं और आप प्राधिकरण नाम में टकराव से बचना चाहते हैं, तो आप इस applicationIdSuffixप्रकार के निर्माण और परिणाम applicationIdको अपने उपयोग में जोड़ सकते हैं , जैसे:

<...
 android:authorities="${applicationId}.contentprovider"/>

आप applicationIdप्रत्येक उत्पाद स्वाद परिभाषा पर अपने स्वयं को परिभाषित कर सकते हैं । डेवलपर
.android.com/studio/build/…

मुझे लगता है कि यदि आप ऐसा करते हैं, तो यह अलग-अलग उत्पाद स्वादों को ठीक कर देगा क्योंकि आपको applicationIdप्रत्येक स्वाद के लिए अलग-अलग बनाना होगा । यदि आपके पास अलग बिल्डटेप्स हैं, तो आप applicationIdउन लोगों के बीच भी अंतर करना चाहते हैं, और यही applicationIdSuffixसंपत्ति है।
जुबांबॉब्स 15

धन्यवाद, एक हार्डकोड एंड्रॉइड का उपयोग करना: फाइलप्रोवाइडर में अधिकारियों को वास्तव में मेरी समस्या है!
ब्रूस

बहुत बढ़िया जवाब! इन्हें जोड़ने और चलाने से पहले, अपने अनुप्रयोगों के पुराने संस्करण को साफ़ करें।
एरेन उत्कु

30

यदि आप किसी लाइब्रेरी प्रोजेक्ट के अंदर Google मैप्स + Google Play Services का उपयोग कर रहे हैं (विशेषकर यदि आप हाल ही में ग्रहण से एंड्रॉइड स्टूडियो में चले गए हैं), तो आप इस त्रुटि का सामना कर सकते हैं जब आप अपने लाइब्रेरी का उपयोग करने वाले ऐप को चलाने का प्रयास करते हैं, जबकि एक अलग ऐप जो उपयोग करता है आपके डिवाइस पर पहले से ही लाइब्रेरी स्थापित है।

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

android {
    defaultConfig.applicationId = "com.company.appname"
}

मैं विशिष्ट ऐप के पैकेज नाम का उपयोग करने की सलाह दूंगा। इस फिक्स के साथ, प्रदाता नाम अब संघर्ष नहीं करेगा, और आपका ऐप अपेक्षित रूप से चलेगा।

लक्षण

1.) आपके उपयोगकर्ता Play Store से अपना ऐप इंस्टॉल करते समय खतरनाक "-505" इंस्टॉल त्रुटि देख रहे हैं।

2.) आपको यह त्रुटि संदेश तब दिखाई देगा जब आप एंड्रॉइड स्टूडियो [INSTALL_FAILED_CONFLICTING_PROVIDER] के माध्यम से अपने पुस्तकालय का उपयोग करने वाले दूसरे ऐप को स्थापित करने का प्रयास करते हैं:

विरोधी प्रदाता

आपके कंसोल में, आपको इस तरह एक संदेश दिखाई देगा:

Package couldn't be installed in /data/app/com.company.appname-1
com.android.server.pm.PackageManagerException: 
Can't install because provider name 
com.google.android.gms.measurement.google_measurement_service 
(in package com.company.appname) is already used by
com.company.otherInstalledAppName

यह सुनिश्चित करना है कि defaultConfig.applicationId को इस build.gradleलाइब्रेरी के उपयोग से प्रत्येक प्रोजेक्ट के लिए फ़ाइल के android अनुभाग में परिभाषित किया गया है

android {
    defaultConfig.applicationId = "com.company.appname"
}

मूल बग रिपोर्ट में अधिक रीडिंग यहां पाई जा सकती है: अंक 784: एक ही प्राधिकरण प्रदाता नाम का उपयोग करते हुए कई ऐप


मुझे "सरलता से" अपनी परियोजनाओं को ग्रहण से एंड्रॉइड स्टूडियो में ले जाने के बाद इस त्रुटि का सामना करना पड़ा और इस टिप ने समस्या को हल कर दिया। धन्यवाद
फिलिप जीरोलामी

@PhilippeGirolami निश्चित रूप से "बस"। ग्रहण से स्टूडियो तक पूरी तरह से एक बड़ी परियोजना को पूरी तरह से बदलने के लिए हमें लगभग एक महीने का समय लगा, और अब हमें ग्रहण में 10-15 सेकंड की तुलना में 4+ मिनट के निर्माण समय के साथ दंडित किया जाता है।
२२

@PhilippeGirolami एंड्रॉयड स्टूडियो 2.0 विशेष रूप से धीमेपन को संबोधित करने के लिए बनाया जा रहा है - वे बीटा 5 पर हैं। हालांकि, अपने जोखिम पर बीटा स्टूडियो सॉफ़्टवेयर का उपयोग करें, कभी-कभी यह बहुत अच्छा काम करता है, कभी-कभी यह भयानक होता है और आपकी रात को बर्बाद कर देगा।
डिस्कोदेव

27

यह तब भी हो सकता है जब आपके पास अपने ऐप का पुराना संस्करण स्थापित हो और (समर्थन) लाइब्रेरी या मेनिफ़ेस्ट फ़ाइल में परिवर्तन किए गए हों। आपके डिवाइस से पुराने एप्लिकेशन हटाने से Settings --> Application --> <your application> --> Uninstallसमस्या का समाधान हो जाएगा।


1
मुझे भी। मैं जीनोमिशन वर्चुअल डिवाइस का उपयोग कर रहा था और पहले से स्थापित एप्लिकेशन को हटाना था।
ibaralf

22

यदि आप फेसबुक एसडीके का उपयोग कर रहे हैं, तो समस्या "प्राधिकरण" मूल्य में हो सकती है जो आप फेसबुक प्रदाता के लिए प्रदान करते हैं।

बदलने के -

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider"
        android:exported="true" />

साथ ->

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
        android:exported="true" />

आपको defaultConfig.ApplicationIdअन्य उत्तरों में सुझाए गए तरीकों को भी बदलना पड़ सकता है।


upvoted, मैं इसे उपयोग करने का सुझाव देता हूं: Android: अधिकारियों = "$ {applicationId} .com.facebook.FacebookContentProvider"
7ink पर justinkoh

15

संकुल के नाम बदलने के बाद वही त्रुटि हो सकती है। android:authoritiesAndroidManifest.xml से string.xml में मान की जाँच करें ।

<provider
        android:authorities="@string/content_authority"
        android:name=".data.Provider"
        ... />

String.xml में मान आपके पैकेज नाम के समान होना चाहिए, जो कि प्रकट में घोषित किया गया है।

<string name="content_authority">com.whatever.android.sunshine.app</string>

यह भी एक अच्छा समाधान है लेकिन अनुप्रयोग में प्रत्येक प्रदाता के लिए मूल्यों में नई स्ट्रिंग बनाने के लिए समय + स्थान लेता है।
लुकासोस

8

प्राधिकरण + प्रदाता का नाम जिसे आपने घोषणा पत्र में घोषित किया है


7

मूल रूप से मेरे साथ ऐसा हुआ, जब मैंने ऐप के पैकेज का नाम बदलने की कोशिश की।

इसलिए, एमुलेटर में, पहले एक ही ऐप इंस्टॉल किया गया था। जब मैंने पैकेज नाम बदलने के बाद ऐप को स्थापित करने की कोशिश की, तो यह कहा गया, डिवाइस में पुराने एप्लिकेशन द्वारा पहले से उपयोग किया गया प्राधिकरण।

बस आवेदन की स्थापना रद्द करने के बाद, इसने मेरी समस्या हल कर दी।

इसके अलावा, प्राधिकरण नाम हमेशा होना चाहिए: your.package.name.UNIQUENAME;

उदाहरण :

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />

मैंने प्रदाता को 'टूल्स: रिप्लेस = "एंड्रॉइड: अथॉरिटीज" जोड़ा।
क्रिस्टीन

7

जब मैं कई अनुप्रयोगों में एक पुस्तकालय का उपयोग करता था तो मुझे एक समान समस्या थी। नीचे दिए गए इस सटीक प्रदाता घोषणा के साथ बस अपने AndroidManifest.xml को अपडेट करना आवश्यक था।

<manifest ...>
    <application ...>
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.here.this.library.provider" android:exported="false" android:grantUriPermissions="true" tools:replace="android:authorities">
        </provider>
    </application>  
</manifest> 

6

मैंने कई समाधान की कोशिश की है, लेकिन समाधान नहीं खोज सका ... लेकिन इस लिंक से मुझे मदद मिली ... मैं मुद्दे के बारे में विस्तार देना चाहता हूं ...

मैं इंस्ट्रूमेंटेड टेस्ट केस चला रहा था, इसलिए मेरा ऐप लॉन्चर में दिखाई नहीं दे रहा था ... लेकिन इसे इंस्टॉल किया गया और इस तरह से सेम कंटेंट प्रोवाइडर का उपयोग किया गया । इसलिए, मुझे इसे किसी तरह अनइंस्टॉल करना चाहिए। इसलिएSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

अब, चलाने की कोशिश करें ... यह काम करेगा ...


6

मैंने सोचा था कि अपने आइकन को "अनइंस्टॉल" करने के लिए उसका आइकन खींचकर ऐप को अनइंस्टॉल करने से समस्या हल हो जाएगी, लेकिन ऐसा नहीं हुआ।

यहाँ समस्या हल क्या है:

  1. सेटिंग्स में जाओ
  2. ऐप्स चुनें
  3. अपना एप्लिकेशन ढूंढें (हां मैं अभी भी इसे यहां पाकर आश्चर्यचकित था!) ​​और इसे दबाएं
  4. शीर्ष-दाएं में, 3 डॉट्स दबाएं
  5. "का चयन करें सभी उपयोगकर्ताओं के लिए स्थापना रद्द करें "

फिर से कोशिश करें, यह अब काम करना चाहिए।


5

अगर आप AndroidManifestफ़ाइल के अंदर प्रदाता टैग के लिए ऐप के अंदर फेसबुक का उपयोग कर रहे हैं और जांच करें project Idकि आपके लिए सही हैandroid:authorities

<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />

4

इस मुद्दे का सामना किया।

इसे इसके द्वारा हल किया गया:

1 - AndroidManifest.xml खोलें

2 - ctrl + f "प्रदाता" ढूंढें

3 - प्रदाता खोजें और वहां अपना रूट डायरेक्टरी नाम अपडेट करें।

परियोजना चलाएं। उम्मीद है कि मुद्दा तय हो जाएगा!


2

कमांड के साथ एडीबी का उपयोग करके ./adb install -r abc.apkसमस्या को हल करें (यह डिवाइस के उच्च एप्लिकेशन संस्करण होने पर भी इसे अधिलेखित कर देगा)


1

यदि आप Xamarin पर हैं और आपको यह त्रुटि मिलती है (शायद Firebase.Crashlytics के कारण):

INSTALL_FAILED_CONFLICTING_PROVIDER
Package couldn't be installed in [...]
Can't install because provider name dollar_openBracket_applicationId_closeBracket (in package [...]]) is already used by [...]

जैसा कि यहां बताया गया है , आपको Xamarin.Build.Download को अपडेट करना होगा:

  1. Xamarin.Build.Download Nuget Package को 0.4.12-pred3 में अपडेट करें
    • मैक पर, आपको ऐड पैकेज विंडो में प्री-रिलीज़ पैकेज दिखाना होगा
  2. Visual Studio को बंद करें
  3. NuGet संकुल के सभी कैश्ड स्थानों को हटाएं:
    • विंडोज पर, विजुअल स्टूडियो खोलें लेकिन समाधान नहीं:
      • उपकरण -> विकल्प -> नुगेट पैकेज मैनेजर -> सामान्य -> ​​सभी नुगेट कैश को साफ़ करें
    • मैक पर, निम्न फ़ोल्डरों को पोंछें:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages समाधान में फ़ोल्डर
  4. समाधान में बिन / obj फ़ोल्डर हटाएँ
  5. समाधान लोड करें
  6. समाधान के लिए Nuget पैकेज पुनर्स्थापित करें (स्वचालित रूप से चलना चाहिए)
  7. फिर से बनाना

0

अपने एंड्रॉइड डिवाइस में मेरे पास एक ही ऐप इंस्टॉल के अलग-अलग फ्लेवर थे । इससे मुझे INSTALL FAILED CONFLICTING PROVIDER की त्रुटि हुई । इसलिए मैं एक ही ऐप के अपने सभी स्वादों की स्थापना रद्द करता हूं। और कोशिश की

adb install -r /Users/demo-debug-92acfc5.apk

इसने मेरी समस्या हल कर दी।


0

आप डिवाइस से पैकेज नाम "com.example" को अनइंस्टॉल कर सकते हैं जिसमें आप ऐप चलाने के बाद ऐप को चलाते हैं। इसने मेरे लिए काम किया

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