ইনস্টলটি কনসোলে ত্রুটি দেখায়: ফেইল কনফ্লিক্টিং প্রোভাইডার ইনস্টল করুন


164

আমি অ্যান্ড্রয়েড এসডিকে নোটলিস্টের নমুনা প্রোগ্রামটি নিয়ে পরীক্ষা নিরীক্ষা করছি। আমি প্রোগ্রামটিতে কিছুটা ভিন্নতা নিয়েছি, তবে আমি যখন আমার সম্পাদিত সংস্করণটি ইনস্টল করি তখন আমি যখন নোটস প্রোগ্রামটি ইতিমধ্যে ডিভাইসে উপস্থিত থাকে তখন ইনস্টল করার চেষ্টা করার সময় কনসোলে INSTALL_FAILED_CONFLICTING_PROVIDER বার্তাটি পেতে থাকি। এটির একটি অনন্য ডেটাবেস তৈরি করতে আমার সরবরাহকারীর কী পরিবর্তন করতে হবে? যদি আমি মূল নোটস প্রোগ্রামটি আনইনস্টল করি এবং তারপরে আমার সম্পাদিত সংস্করণটি ইনস্টল করে তবে এটি দুর্দান্ত কাজ করে।

উত্তর:


198

তালিকাভুক্ত কর্তৃপক্ষটি android:authoritiesঅবশ্যই অনন্য হতে হবে। এই বৈশিষ্ট্যের জন্য ডকুমেন্টেশন উদ্ধৃত :

দ্বন্দ্ব এড়াতে, কর্তৃপক্ষের নামগুলিতে একটি জাভা-স্টাইল নামকরণ কনভেনশন ব্যবহার করা উচিত (যেমন com.example.provider.cartoonprovider)। সাধারণত, এটি কনটেন্টপ্রোভাইডার সাবক্লাসের নাম যা সরবরাহকারীকে কার্যকর করে


5
@ কমন্সওয়্যার আমি android:authoritiesআমার AndroidManifest providerট্যাগটিতে অ্যাট্রিবিউট ব্যবহার করেছি । আমি এই প্রকল্পটি আমার অ্যান্ড্রয়েড লাইব্রেরি প্রকল্প হিসাবে ব্যবহার করেছি এই লাইব্রেরি প্রকল্পটি ব্যবহার করে আমি কয়েকটি প্রকল্প বিকাশ করেছি। install_failed_conflicting_providerআমরা যদি সাধারণ লাইব্রেরি প্রকল্প ব্যবহার করি তবে কীভাবে সমস্যাটি সমাধান করবেন ।
জামাল

1
@ জামাল: আপনি যদি অ্যান্ড্রয়েডের জন্য গ্রেডল যেমন অ্যান্ড্রয়েড স্টুডিও থেকে ব্যবহার করছেন তবে ম্যানিফেস্টটি মার্জ করার বিকল্পগুলি আপনাকে কর্তৃপক্ষের স্ট্রিংয়ের উপযোগী করার অনুমতি দেবে। অন্যথায়, <provider>গ্রন্থাগারের প্রকাশটি থেকে অপসারণ করুন এবং অ্যাপ্লিকেশন পর্যায়ে একটি অনন্য কর্তৃপক্ষের স্ট্রিং সহ এটি সংজ্ঞায়িত করুন।
কমন্সওয়েয়ার

4
@ জামাল: সরঞ্জামস.অ্যান্ড্রয়েড. com/ tech - docs/ new - build - system/ user - guide/ - আপনার যদি আরও প্রশ্ন থাকে এবং যদি আপনি কোনও অনুসন্ধানের মাধ্যমে উত্তর খুঁজে না পান তবে দয়া করে একটি নতুন স্ট্যাক ওভারফ্লো প্রশ্ন জিজ্ঞাসা করুন।
কমন্সওয়্যার

11
আপনি যদি দুটি প্রকল্পে একই সরবরাহকারীর নামের সাথে লাইব্রেরি ব্যবহার করেন তবে এটি এই ত্রুটির কারণ হতে পারে
মোহাম্মদ সুহি শেখ কুরউশ

1
আমি যেমন জিনিস আছে android:authoritiesবা <provider>আমার লাইব্রেরিতে ম্যানিফেস্ট ও এই ত্রুটি পেতে।
লে

143

যদি আপনার আলাদা স্বাদ থাকে এবং আপনি কর্তৃপক্ষের নামের সাথে সংঘর্ষ এড়াতে চান তবে আপনি applicationIdSuffixটাইপ তৈরি করতে একটি যুক্ত করতে পারেন এবং ফলস্বরূপ applicationIdআপনার ম্যানিফেস্টের ফলাফলটি ব্যবহার করতে পারেন:

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

আপনি applicationIdপ্রতিটি পণ্য স্বাদ সংজ্ঞা আপনার নিজস্ব নির্ধারণ করতে পারেন । বিকাশকারী.অ্যান্ড্রয়েড.
com/studio/build/…

আমি মনে করি আপনি যদি এটি করেন তবে এটি বিবিধ পণ্যের স্বাদ ঠিক করে দেবে কারণ আপনাকে যে applicationIdকোনও উপায়ে প্রতিটি স্বাদে আলাদা করতে হবে। আপনার যদি আলাদা বিল্ডটাইপ থাকে তবে আপনি সেইগুলির মধ্যেও পার্থক্য করতে চান applicationIdএবং applicationIdSuffixসম্পত্তি এটিই করবে।
চুবসনডাবস

ধন্যবাদ, একটি হার্ডকোডযুক্ত অ্যান্ড্রয়েড ব্যবহার: ফাইলপ্রোভাইডার কর্তৃপক্ষ হ'ল আমার সমস্যা!
ব্রুস

দুর্দান্ত উত্তর! এগুলি যুক্ত করে চালানোর আগে আপনার অ্যাপ্লিকেশনগুলির পুরানো সংস্করণটি পরিষ্কার করুন।
এরেন উত্কু

30

আপনি যদি কোনও গ্রন্থাগার প্রকল্পের ভিতরে গুগল মানচিত্র + গুগল প্লে পরিষেবাদি ব্যবহার করে থাকেন (বিশেষত আপনি যদি সম্প্রতি এক্লিপস থেকে অ্যান্ড্রয়েড স্টুডিওতে স্থানান্তরিত হয়ে থাকেন), আপনি যখন আপনার লাইব্রেরি ব্যবহার করে এমন একটি অ্যাপ্লিকেশন চালানোর চেষ্টা করার সময় আপনি এই ত্রুটির মুখোমুখি হতে পারেন, যখন অন্য একটি অ্যাপ্লিকেশন ব্যবহার করে একই গ্রন্থাগারটি ইতিমধ্যে আপনার ডিভাইসে ইনস্টল করা আছে।

ফিক্স:build.gradle আপনার লাইব্রেরি ব্যবহার করে প্রতিটি প্রকল্পের জন্য ফাইলের অ্যান্ড্রয়েড বিভাগে ডিফল্টConfig.applicationId সংজ্ঞায়িত হয়েছে তা নিশ্চিত করুন

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

আমি নির্দিষ্ট অ্যাপ্লিকেশনটির প্যাকেজের নাম ব্যবহার করার পরামর্শ দেব। এই ফিক্সটি দিয়ে, সরবরাহকারীর নামগুলি আর বিরোধ করবে না, এবং আপনার অ্যাপ্লিকেশন প্রত্যাশা অনুযায়ী চলবে।

লক্ষণ

১) প্লে স্টোর থেকে আপনার অ্যাপ্লিকেশন ইনস্টল করার সময় আপনার ব্যবহারকারীরা ভয়ঙ্কর "-505" ইনস্টল ত্রুটি দেখতে পাচ্ছেন।

২) অ্যান্ড্রয়েড স্টুডিও [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

ফিক্সটি নিশ্চিত করা যায় যে build.gradleআপনার লাইব্রেরিটি ব্যবহার করে প্রতিটি প্রকল্পের জন্য ডিফল্টকনফিগ.এপ্লিকেশনআইডি ফাইলের অ্যান্ড্রয়েড বিভাগে সংজ্ঞায়িত করা হয়

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

মূল বাগের প্রতিবেদনে আরও পড়ার সন্ধান পাওয়া যাবে: ইস্যু 784: একই কর্তৃপক্ষ সরবরাহকারীর নাম ব্যবহার করে একাধিক অ্যাপ্লিকেশন


আমার প্রকল্পগুলি "সহজভাবে "গ্রহণের পর থেকে অ্যাল্রয়েড থেকে অ্যান্ড্রয়েড স্টুডিওতে সরানোর পরে আমি এই ত্রুটির মুখোমুখি হয়েছি এবং এই পরামর্শটি সমস্যার সমাধান করেছে। ধন্যবাদ
ফিলিপ গিরোলামি

নিঃসন্দেহে ফিলিপেইগিরোলামি "সহজ" একটি বৃহত্ প্রকল্পটি গ্রহন থেকে স্টুডিওতে পুরোপুরি রূপান্তর করতে আমাদের প্রায় এক মাস সময় লেগেছিল এবং এখন আমরা গ্রহের গ্রন্থে 10-15 সেকেন্ডের তুলনায় 4+ মিনিট বিল্ড টাইমের সাথে শাস্তি পেয়েছি।
ডিস্কদেভ

@ ফিলিপইগিরোলামি অ্যান্ড্রয়েড স্টুডিও ২.০ বিশেষত অলসতা দেখানোর জন্য তৈরি করা হচ্ছে - তারা বিটা ৫ এ রয়েছেন, তবে, নিজের ঝুঁকিতে বিটা স্টুডিও সফটওয়্যারটি ব্যবহার করুন, কখনও কখনও এটি দুর্দান্ত কাজ করে, কখনও কখনও এটি ভয়ঙ্কর হয় এবং আপনার রাতকে নষ্ট করে দেবে।
ডিসকদেভ

27

আপনি যখন আপনার অ্যাপ্লিকেশনটির একটি পুরানো সংস্করণ ইনস্টল করে (সমর্থন) লাইব্রেরি বা ম্যানিফেস্ট ফাইলটিতে পরিবর্তন করেছেন তখন এটিও ঘটতে পারে। আপনার ডিভাইস ( Settings --> Application --> <your application> --> Uninstall) থেকে পুরানো অ্যাপ্লিকেশনগুলি মোছা তখন সমস্যার সমাধান করবে।


1
একই অবস্থা. আমি জেনিমোশন ভার্চুয়াল ডিভাইস ব্যবহার করছিলাম এবং পূর্বে ইনস্টল থাকা অ্যাপ্লিকেশনটি সরিয়ে ফেলতে হয়েছিল।
ইবলাল্ফ

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অন্যান্য উত্তরের পরামর্শ অনুসারে আপনারও এটি পরিবর্তন করতে হবে ।


উত্সাহিত, আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি: অ্যান্ড্রয়েড: কর্তৃপক্ষগুলি = "{{অ্যাপ্লিকেশনআইডি} .com.facebook.FacebookContentProvider"
জাস্টিনকো

15

প্যাকেজগুলির নাম পরিবর্তন করার পরে একই ত্রুটি ঘটতে পারে। android:authoritiesAndroidManLive.xML থেকে স্ট্রিং.এক্সএমএলে মানটি পরীক্ষা করুন ।

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

স্ট্রিং.এক্সএমএলে মানটি আপনার প্যাকেজ নামের মতো হওয়া উচিত, ম্যানিফেস্টে ঘোষিত।

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

এটিও একটি ভাল সমাধান তবে প্রয়োগের প্রতিটি সরবরাহকারীর জন্য মানগুলিতে নতুন স্ট্রিং তৈরি করতে সময় + স্পেস লাগে।
lukassos

8

কর্তৃপক্ষ + সরবরাহকারীর নাম যা আপনি সম্ভবত ম্যানিফেস্টে ঘোষণা করেছেন


7

মূলত এটি আমার সাথে ঘটেছিল, যখন আমি অ্যাপটির প্যাকেজের নাম পরিবর্তন করার চেষ্টা করি।

সুতরাং, এমুলেটরে, আগে একই অ্যাপ্লিকেশন ইনস্টল করা হয়েছিল। আমি যখন প্যাকেজের নাম পরিবর্তন করার পরে অ্যাপটি ইনস্টল করার চেষ্টা করেছি, তখন এটি বলেছে, ডিভাইসে পুরানো প্রয়োগ দ্বারা কর্তৃপক্ষ ইতিমধ্যে ব্যবহৃত authority

কেবল অ্যাপ্লিকেশনটি আনইনস্টল করার পরে এটি আমার সমস্যার সমাধান করেছে।

এছাড়াও, কর্তৃপক্ষ নাম সবসময় হওয়া উচিত: your.package.name.UNIQUENAME;

উদাহরণ:

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

আমি সরবরাহকারীগুলিতে 'সরঞ্জামগুলি: প্রতিস্থাপন = "অ্যান্ড্রয়েড: কর্তৃপক্ষ" "যুক্ত করেছি।
ক্রিস্টিন

7

যখন আমি বেশ কয়েকটি অ্যাপ্লিকেশনগুলিতে একটি লাইব্রেরি ব্যবহার করি তখন আমারও একই সমস্যা হয়েছিল। নীচে এই সঠিক সরবরাহকারীর ঘোষণার সাথে আপনার AndroidManLive.xML আপডেট করা দরকার ছিল ml

<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 - AndroidManLive.xML খুলুন

2 - ctrl + f "সরবরাহকারীর" সন্ধান করুন

3 - সরবরাহকারীর সন্ধান করুন এবং সেখানে আপনার মূল ডিরেক্টরি নাম আপডেট করুন।

প্রকল্প চালান। আশা করি ইস্যু ঠিক হয়ে যাবে!


2

কমান্ড সহ অ্যাডবি ব্যবহার করে ইনস্টল করা ./adb install -r abc.apkসমস্যার সমাধান করবে (ডিভাইসটির উচ্চতর অ্যাপ্লিকেশন রয়েছে এমনকি এটি ওভাররাইট হবে)


1

আপনি যদি জামারিনে থাকেন এবং আপনি এই ত্রুটিটি পান (সম্ভবত ফায়ারব্যাস। ক্র্যাশলিটিক্সের কারণে):

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. জ্যামারিন.বিল্ড.ডুয়েট প্যাকেজ 0.4.12-পূর্বরূপ 3 এ ডাউনলোড করুন
    • Mac এ, আপনি না পরীক্ষা করার প্রয়োজন হতে পারে দেখান প্রাক রিলিজ প্যাকেজ মধ্যে প্যাকেজ যোগ জানালা
  2. ভিজ্যুয়াল স্টুডিও বন্ধ করুন
  3. নুগেট প্যাকেজগুলির সমস্ত ক্যাশেড অবস্থানগুলি মুছুন:
    • উইন্ডোজে, ভিজ্যুয়াল স্টুডিও খুলুন তবে সমাধানটি নয়:
      • সরঞ্জাম -> বিকল্প -> নুগেট প্যাকেজ ম্যানেজার -> সাধারণ -> সমস্ত নুগেট ক্যাশে সাফ করুন
    • ম্যাক-এ, নিম্নলিখিত ফোল্ডারগুলি মুছুন:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages সমাধান মধ্যে ফোল্ডার
  4. সমাধানে বিন / আপত্তি ফোল্ডারগুলি মুছুন
  5. সমাধান লোড করুন
  6. সমাধানের জন্য নিউজ প্যাকেজগুলি পুনরুদ্ধার করুন (স্বয়ংক্রিয়ভাবে চালানো উচিত)
  7. পুনর্নির্মাণ করা

0

আমার অ্যান্ড্রয়েড ডিভাইসে আমার একই অ্যাপ্লিকেশন ইনস্টলের বিভিন্ন স্বাদ ছিল । এটি আমাকে ত্রুটিযুক্ত ইনস্টল করা ব্যর্থ কনফ্লিক্টিং প্রোভাইডার দেয় । তাই আমি একই অ্যাপ্লিকেশনটির আমার সমস্ত স্বাদগুলি আনইনস্টল করি। এবং চেষ্টা

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

এটি আমার সমস্যার সমাধান করেছে।


0

আপনি অ্যাপটি চালানোর চেয়ে অ্যাপটি চালানোর পরে আপনি যে ডিভাইসে অ্যাপ্লিকেশনটি চালান তার থেকে "com.example" প্যাকেজ নাম আনইনস্টল করতে পারেন। এটি আমার পক্ষে কাজ করেছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.