Instal menunjukkan kesalahan di konsol: INSTAL PENYEDIA KONFLIK GAGAL

164

Saya bereksperimen dengan program sampel NotesList di Android SDK. Saya telah membuat sedikit variasi dalam program ini, tetapi ketika saya menginstal versi yang diedit saya tetap mendapatkan pesan INSTALL_FAILED_CONFLICTING_PROVIDER di konsol ketika saya mencoba menginstalnya ketika program catatan asli sudah ada di perangkat. Apa yang perlu saya ubah di Penyedia untuk menjadikannya basis data yang unik? Ini berfungsi dengan baik jika saya menghapus program catatan asli dan kemudian menginstal versi yang diedit.

johnsonjp34
sumber

Jawaban:

198

Wewenang, sebagaimana tercantum dalam android:authoritiesharus unik. Mengutip dokumentasi untuk atribut ini :

Untuk menghindari konflik, nama otoritas harus menggunakan konvensi penamaan gaya Java (seperti com.example.provider.cartoonprovider). Biasanya, itu adalah nama subkelas ContentProvider yang mengimplementasikan penyedia

CommonsWare
sumber
5
@ CommonsWare Saya telah menggunakan android:authoritiesatribut pada AndroidManifest providertag saya . Saya telah menggunakan proyek itu sebagai proyek perpustakaan android saya menggunakan proyek perpustakaan ini. Saya telah mengembangkan beberapa proyek. cara mengatasi install_failed_conflicting_providermasalah jika kami menggunakan proyek perpustakaan umum.
Jamal
1
@jamal: Jika Anda menggunakan Gradle untuk Android, seperti dari Android Studio, opsi penggabungan manifes akan memungkinkan Anda untuk menyesuaikan string otoritas. Jika tidak, hapus <provider>manifes perpustakaan dan tentukan pada level aplikasi dengan string otoritas yang unik.
CommonsWare
4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - jika Anda memiliki pertanyaan lebih lanjut, dan Anda tidak dapat menemukan jawaban melalui pencarian, silakan ajukan pertanyaan Stack Overflow baru.
CommonsWare
11
jika Anda menggunakan perpustakaan di dua proyek dengan nama penyedia yang sama dapat menyebabkan kesalahan ini
Mohammed Subhi Sheikh Quroush
1
Saya tidak memiliki hal seperti android:authoritiesatau <provider>di manifes perpustakaan saya dan mendapatkan kesalahan ini.
kidal
143

Jika Anda memiliki rasa yang berbeda dan Anda ingin menghindari tabrakan dalam nama otoritas Anda dapat menambahkan sebuah applicationIdSuffixuntuk membangun jenis dan menggunakan hasil applicationIddalam manifes Anda, seperti ini:

<...
 android:authorities="${applicationId}.contentprovider"/>
Jose L Ugia
sumber
Anda dapat menentukan sendiri applicationIddi setiap definisi rasa produk. developer.android.com/studio/build/…
Jose L Ugia
Saya pikir jika Anda melakukan ini akan memperbaiki rasa produk yang berbeda karena Anda harus membuat yang berbeda applicationIduntuk setiap rasa. Jika Anda memiliki buildTypes yang berbeda, Anda juga ingin applicationIdberbeda di antara mereka, dan itulah yang applicationIdSuffixakan dilakukan properti.
chubbsondubs
Terima kasih, menggunakan android hardcoded: otoritas di fileprovider adalah masalah saya!
Bruce
Jawaban bagus! Sebelum menambahkan ini dan menjalankan, bersihkan versi lama aplikasi Anda.
Eren Utku
30

Jika Anda menggunakan Google Maps + Google Play Services di dalam proyek perpustakaan (terutama jika Anda baru saja bermigrasi dari Eclipse ke Android Studio), Anda dapat mengalami kesalahan ini ketika Anda mencoba menjalankan aplikasi yang menggunakan perpustakaan Anda, sementara aplikasi lain yang menggunakan perpustakaan yang sama sudah diinstal pada perangkat Anda.

Perbaiki: pastikan defaultConfig.applicationId didefinisikan di bagian android build.gradlefile untuk setiap proyek menggunakan perpustakaan Anda

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

Saya akan merekomendasikan menggunakan nama paket aplikasi tertentu. Dengan perbaikan ini, nama penyedia tidak akan lagi bertentangan, dan aplikasi Anda akan berjalan seperti yang diharapkan.

Gejala

1.) Pengguna Anda melihat kesalahan pemasangan "-505" yang ditakuti saat memasang aplikasi Anda dari Play Store.

2.) Anda akan melihat pesan kesalahan ini ketika Anda mencoba menginstal aplikasi kedua yang menggunakan perpustakaan Anda melalui Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Penyedia Konflik

Di konsol Anda, Anda akan melihat pesan seperti ini:

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

Cara mengatasinya adalah untuk memastikan bahwa defaultConfig.applicationId didefinisikan di bagian android dari build.gradlefile untuk setiap proyek menggunakan perpustakaan Anda

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

Lebih banyak bacaan dapat ditemukan di sini di laporan bug asli: Edisi 784: Beberapa aplikasi menggunakan nama penyedia otoritas yang sama

DiscDev
sumber
Saya mengalami kesalahan ini setelah "hanya" memindahkan proyek saya dari Eclipse ke Android Studio dan tip ini menyelesaikan masalah. Terima kasih
Philippe Girolami
@PhilippeGirolami "hanya" pasti. Kami membutuhkan sekitar satu bulan untuk sepenuhnya transisi proyek yang sangat besar dari Eclipse ke Studio, dan sekarang kami dihukum dengan waktu pembangunan 4+ menit, dibandingkan dengan 10-15 detik di Eclipse.
DiscDev
@PhilippeGirolami android studio 2.0 sedang dibangun khusus untuk mengatasi kelambatan - mereka menggunakan beta 5. Namun, gunakan perangkat lunak beta studio dengan risiko Anda sendiri, kadang-kadang bekerja dengan baik, kadang-kadang mengerikan dan akan merusak malam Anda.
DiscDev
27

Ini juga dapat terjadi ketika Anda menginstal versi aplikasi yang lebih lama dan membuat perubahan pada perpustakaan (dukungan) atau file manifes. Menghapus aplikasi lama dari perangkat Anda ( Settings --> Application --> <your application> --> Uninstall) akan menyelesaikan masalah itu.

nburk
sumber
1
Sama disini. Saya menggunakan perangkat virtual genymotion dan harus menghapus aplikasi yang sebelumnya diinstal.
ibaralf
22

Jika Anda menggunakan Facebook SDK maka masalahnya mungkin dalam nilai "otoritas" yang Anda berikan untuk penyedia Facebook.

REPLACE -

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

DENGAN ->

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

Anda mungkin perlu mengubah defaultConfig.ApplicationIdjuga seperti yang disarankan dalam jawaban lain.

Ankit Aggarwal
sumber
terbalik, saya sarankan untuk menggunakan ini: android: otoritas = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh
15

Kesalahan yang sama dapat terjadi setelah mengganti nama paket. Periksa nilai dalam string.xml untuk android:authoritiesdari AndroidManifest.xml.

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

Dalam string.xml nilainya harus sama dengan nama paket Anda, dinyatakan dalam manifes.

<string name="content_authority">com.whatever.android.sunshine.app</string>
burseaner
sumber
Ini juga merupakan solusi yang baik tetapi membutuhkan waktu + ruang untuk membuat nilai string baru untuk setiap penyedia dalam aplikasi.
lukassos
8

Nama Otoritas + Penyedia yang telah Anda nyatakan dalam manifes mungkin

Benoit
sumber
7

Pada dasarnya ini terjadi pada saya, ketika saya mencoba mengubah nama paket aplikasi.

Jadi, dalam emulator, aplikasi yang sama telah diinstal sebelumnya. Ketika saya mencoba menginstal aplikasi setelah mengubah nama paket, katanya, otoritas sudah digunakan oleh aplikasi yang lebih lama di perangkat.

Cukup setelah menghapus aplikasi, itu memecahkan masalah saya.

Juga, nama Otoritas harus selalu your.package.name.UNIQUENAME:;

contoh:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Ajay P. Prajapati
sumber
Saya menambahkan 'tools: replace = "android: otoritas"' ke penyedia.
Christine
7

Saya memiliki masalah yang sama ketika saya menggunakan satu perpustakaan di beberapa aplikasi. Itu perlu hanya memperbarui AndroidManifest.xml Anda dengan pernyataan penyedia ini di bawah ini.

<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> 
Vladyslav Panchenko
sumber
6

Saya telah mencoba banyak solusi tetapi tidak dapat menemukan solusi ... tetapi tautan ini membantu saya ... Saya ingin memberikan detail tentang masalah ...

Saya menjalankan test case Instrumentasi sehingga aplikasi saya tidak terlihat di peluncur ... tetapi sudah diinstal dan menggunakan Penyedia Konten yang Sama . Jadi, saya harus menghapusnya entah bagaimana. BegituSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Sekarang, coba jalankan ... Ini akan berhasil ...

Kushal
sumber
6

Saya pikir menghapus aplikasi dengan menyeret ikonnya ke "Uninstall" akan menyelesaikan masalah, tetapi ternyata tidak.

Inilah yang memecahkan masalah:

  1. Pergi ke pengaturan
  2. Pilih Aplikasi
  3. Temukan aplikasi Anda (ya saya terkejut masih menemukannya di sini!) Dan tekan
  4. Di kanan atas, tekan 3 titik
  5. Pilih " Copot pemasangan untuk semua pengguna "

Coba lagi, itu seharusnya berfungsi sekarang.

Nicolas Raoul
sumber
5

Jika Anda menggunakan Facebook di dalam aplikasi, periksa tag penyedia di dalam AndroidManifestfile dan periksa apakah Anda project Idbenarandroid:authorities

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

Mengalami masalah ini.

Diatasi dengan:

1 - buka AndroidManifest.xml

2 - ctrl + f find "provider"

3 - cari penyedia dan perbarui nama direktori root Anda di sana.

menjalankan proyek. semoga masalah akan diperbaiki!

Ali Nawaz
sumber
2

instal menggunakan adb dengan perintah ./adb install -r abc.apkakan menyelesaikan masalah (itu akan menimpa bahkan ketika perangkat memiliki versi aplikasi yang lebih tinggi)

Quang Vĩnh Ha
sumber
1

Jika Anda menggunakan Xamarin dan Anda mendapatkan kesalahan ini (mungkin karena 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 [...]

Seperti yang disebutkan di sini , Anda perlu memperbarui Xamarin.Build. Unduh:

  1. Perbarui Xamarin.Build. Unduh Paket Nuget ke 0.4.12-preview3
    • Di Mac, Anda mungkin perlu memeriksa Tampilkan paket pra-rilis di jendela Tambahkan Paket
  2. Tutup Visual Studio
  3. Hapus semua lokasi yang di-cache dari Paket NuGet:
    • Di Windows, buka Visual Studio tetapi bukan solusinya:
      • Alat -> Opsi -> Pengelola Paket Nuget -> Umum -> Hapus Semua Cache Nuget
    • Di Mac, hapus folder berikut:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages folder dalam solusi
  4. Hapus folder bin / obj dalam solusi
  5. Muat Solusi
  6. Kembalikan Paket Nuget untuk Solusi (harus berjalan secara otomatis)
  7. Membangun kembali
gianlucaparadise
sumber
0

Di perangkat android saya, saya memiliki rasa berbeda dari pemasangan aplikasi yang sama . Ini memberi saya kesalahan INSTAL PENYEDIA KONFLIK GAGAL . jadi saya uninstall semua rasa saya dari aplikasi yang sama. dan mencoba

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

Itu memecahkan masalah saya.

Vrushali Raut
sumber
0

Anda dapat mencopot nama paket "com.example" dari perangkat tempat Anda menjalankan aplikasi setelah Anda menjalankan aplikasi. Ini berhasil untuk saya

MEGHA DOBARIYA
sumber