Cài đặt hiển thị lỗi trong bảng điều khiển: CÀI ĐẶT CUNG CẤP CONFLICTING FAILED


164

Tôi đang thử nghiệm chương trình mẫu NotesList trong SDK Android. Tôi đã thực hiện một biến thể nhỏ trong chương trình, nhưng khi tôi cài đặt phiên bản đã chỉnh sửa của mình, tôi vẫn nhận được thông báo INSTALL_FAILED_CONFLICTING_PROVIDER trong bảng điều khiển khi tôi cố gắng cài đặt nó khi chương trình ghi chú ban đầu đã có trên thiết bị. Tôi cần thay đổi gì trong Nhà cung cấp để biến nó thành một cơ sở dữ liệu duy nhất? Nó hoạt động tốt nếu tôi gỡ cài đặt chương trình ghi chú gốc và sau đó cài đặt phiên bản chỉnh sửa của mình.

Câu trả lời:


198

Các cơ quan, như được liệt kê trong android:authoritiesphải là duy nhất. Trích dẫn tài liệu cho thuộc tính này :

Để tránh xung đột, tên cơ quan nên sử dụng quy ước đặt tên theo kiểu Java (chẳng hạn như com.example.provider.cartoonprovider). Thông thường, đó là tên của lớp con ContentProvider thực hiện nhà cung cấp


5
@ CommonsWare Tôi đã sử dụng android:authoritiesthuộc tính trong AndroidManifest providerthẻ của mình . Tôi đã sử dụng dự án đó như dự án thư viện Android của tôi bằng dự án thư viện này. Tôi đã phát triển một vài dự án. Làm thế nào để giải quyết install_failed_conflicting_providervấn đề nếu chúng ta sử dụng dự án thư viện chung.
Jamal

1
@jamal: Nếu bạn đang sử dụng Gradle cho Android, chẳng hạn như từ Android Studio, các tùy chọn hợp nhất tệp kê khai sẽ cho phép bạn điều chỉnh chuỗi quyền hạn. Mặt khác, xóa <provider>tệp kê khai của thư viện và xác định nó ở cấp ứng dụng bằng một chuỗi quyền hạn duy nhất.
CommonsWare

4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/ mẹo - nếu bạn có thêm câu hỏi và bạn không thể tìm thấy câu trả lời qua tìm kiếm, vui lòng hỏi câu hỏi mới về Stack Overflow.
CommonsWare

11
nếu bạn sử dụng thư viện trong hai dự án có cùng tên nhà cung cấp thì điều đó có thể gây ra lỗi này
Mohammed Subhi Sheikh Quroush

1
Tôi không có những thứ như android:authoritieshoặc<provider> trong thư viện của tôi và nhận được lỗi này.
lef

142

Nếu bạn có các hương vị khác nhau và bạn muốn tránh va chạm trong tên cơ quan, bạn có thể thêm một kiểu applicationIdSuffixđể xây dựng và sử dụng kết quả applicationIdtrong bảng kê khai của mình, như sau:

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

Bạn có thể định nghĩa của riêng bạn applicationIdtrên mỗi định nghĩa hương vị sản phẩm. developer.android.com/studio/build/
Jose L Ugia

Tôi nghĩ rằng nếu bạn làm điều này, nó sẽ khắc phục các hương vị sản phẩm khác nhau vì bạn phải tạo ra sự khác biệt applicationIdcho từng hương vị. Nếu bạn có các bản dựng khác nhau, bạn cũng muốn applicationIdkhác nhau giữa các bản đó và đó là những gì applicationIdSuffixtài sản sẽ làm.
chubbsondub

Cảm ơn, sử dụng Android mã hóa cứng: các nhà chức trách trong fileprovider chính xác là vấn đề của tôi!
Bruce

Câu trả lời chính xác! Trước khi thêm chúng và chạy, hãy dọn sạch phiên bản cũ của ứng dụng của bạn.
Eren Utku

30

Nếu bạn đang sử dụng Google Maps + Google Play Services trong dự án thư viện (đặc biệt nếu gần đây bạn đã di chuyển từ Eclipse sang Android Studio), bạn có thể gặp phải lỗi này khi bạn cố chạy một ứng dụng sử dụng thư viện của mình, trong khi một ứng dụng khác sử dụng cùng một thư viện đã được cài đặt trên thiết bị của bạn.

Khắc phục: đảm bảo rằng defaultConfig.applicationId được xác định trong phần android của build.gradletệp cho mỗi dự án bằng thư viện của bạn

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

Tôi sẽ khuyên bạn nên sử dụng tên gói của ứng dụng cụ thể. Với sửa lỗi này, tên nhà cung cấp sẽ không còn xung đột và ứng dụng của bạn sẽ chạy như mong đợi.

Triệu chứng

1.) Người dùng của bạn đang thấy lỗi cài đặt "-505" đáng sợ khi cài đặt ứng dụng của bạn từ Cửa hàng Play.

2.) Bạn sẽ thấy thông báo lỗi này khi bạn cố gắng cài đặt ứng dụng thứ hai sử dụng thư viện của mình qua Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Nhà cung cấp xung đột

Trong bảng điều khiển của bạn, bạn sẽ thấy một thông báo như thế này:

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

Cách khắc phục là đảm bảo defaultConfig.applicationId được xác định trong phần android của build.gradletệp cho mỗi dự án bằng thư viện của bạn

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

Đọc thêm có thể được tìm thấy ở đây trong báo cáo lỗi ban đầu: Vấn đề 784: Nhiều ứng dụng sử dụng cùng tên nhà cung cấp thẩm quyền


Tôi đã gặp phải lỗi này sau khi "đơn giản" chuyển các dự án của mình từ Eclipse sang Android Studio và mẹo này đã giải quyết được vấn đề. Cảm ơn
Philippe Girolami

@PhilippeGirolami "đơn giản" chắc chắn. Chúng tôi mất khoảng một tháng để chuyển đổi hoàn toàn một dự án rất lớn từ Eclipse sang Studio và bây giờ chúng tôi bị phạt với thời gian xây dựng hơn 4 phút, so với 10-15 giây trong Eclipse.
DiscDev

@PhilippeGirolami android studio 2.0 đang được xây dựng đặc biệt để giải quyết sự chậm chạp - chúng đang ở giai đoạn thử nghiệm 5. Tuy nhiên, hãy sử dụng phần mềm beta studio, đôi khi nó hoạt động rất tốt, đôi khi thật kinh khủng và sẽ phá hỏng buổi tối của bạn.
DiscDev

27

Điều này cũng có thể xảy ra khi bạn cài đặt phiên bản cũ hơn của ứng dụng và thực hiện các thay đổi đối với thư viện (hỗ trợ) hoặc tệp kê khai. Xóa các ứng dụng cũ khỏi thiết bị của bạn ( Settings --> Application --> <your application> --> Uninstall) sẽ giải quyết vấn đề sau đó.


1
Tương tự ở đây. Tôi đã sử dụng các thiết bị ảo genymotion và phải gỡ bỏ ứng dụng đã cài đặt trước đó.
ibaralf

22

Nếu bạn đang sử dụng SDK Facebook thì vấn đề có thể nằm ở giá trị "chính quyền" bạn cung cấp cho nhà cung cấp Facebook.

THAY THẾ -

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

VỚI ->

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

Bạn có thể cần phải thay đổi defaultConfig.ApplicationIdcũng như đề xuất trong các câu trả lời khác.


upvote, tôi đề nghị sử dụng cái này: android: cơ quan = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh

15

Lỗi tương tự có thể xảy ra sau khi đổi tên gói. Kiểm tra giá trị trong chuỗi XML cho android:authoritiestừ AndroidManifest.xml.

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

Trong chuỗi XML, giá trị phải giống với tên gói của bạn, được khai báo trong tệp kê khai.

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

Đây cũng là một giải pháp tốt nhưng cần có thời gian + không gian để tạo chuỗi mới trong các giá trị cho mỗi nhà cung cấp trong ứng dụng.
lukassos

8

Tên Nhà cung cấp + Nhà cung cấp mà bạn đã khai báo trong tệp kê khai có thể


7

Về cơ bản điều này đã xảy ra với tôi, khi tôi cố gắng thay đổi tên gói của ứng dụng.

Vì vậy, trong trình giả lập, ứng dụng tương tự đã được cài đặt trước đó. Khi tôi cố gắng cài đặt ứng dụng sau khi thay đổi tên gói, nó nói, quyền đã được sử dụng bởi ứng dụng cũ hơn trong thiết bị.

Đơn giản sau khi gỡ cài đặt ứng dụng, nó đã giải quyết vấn đề của tôi.

Ngoài ra, tên cơ quan phải luôn luôn là : your.package.name.UNIQUENAME;

thí dụ :

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

Tôi đã thêm 'tools: thay = "android: cơ quan"' cho nhà cung cấp.
Christine

7

Tôi gặp vấn đề tương tự khi tôi sử dụng một thư viện trong một số ứng dụng. Điều cần thiết là chỉ cần cập nhật AndroidManifest.xml của bạn với tuyên bố nhà cung cấp chính xác này bên dưới.

<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

Tôi đã thử nhiều giải pháp nhưng không thể tìm thấy giải pháp ... nhưng liên kết này đã giúp tôi ... Tôi muốn cung cấp chi tiết về vấn đề ...

Tôi đã chạy các trường hợp kiểm tra Cụ để ứng dụng của tôi không hiển thị trong trình khởi chạy ... nhưng nó đã được cài đặt và do đó sử dụng cùng một Nhà cung cấp nội dung . Vì vậy, tôi nên gỡ cài đặt nó bằng cách nào đó. Vì thếSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Bây giờ, hãy thử chạy ... Điều này sẽ hoạt động ...


6

Tôi nghĩ gỡ cài đặt ứng dụng bằng cách kéo biểu tượng của nó vào "Gỡ cài đặt" sẽ giải quyết được vấn đề, nhưng không được.

Đây là những gì đã giải quyết vấn đề:

  1. Chuyển đến Cài đặt
  2. Chọn ứng dụng
  3. Tìm ứng dụng của bạn (vâng tôi rất ngạc nhiên khi vẫn tìm thấy nó ở đây!) Và nhấn nó
  4. Ở trên cùng bên phải, nhấn 3 dấu chấm
  5. Chọn " Gỡ cài đặt cho tất cả người dùng "

Hãy thử lại, nó sẽ hoạt động ngay bây giờ.


5

Nếu bạn đang sử dụng Facebook bên trong ứng dụng, hãy kiểm tra thẻ nhà cung cấp bên trong AndroidManifesttệp và kiểm tra xem bạn project Idcó đúng khôngandroid:authorities

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

4

Gặp phải vấn đề này.

Đã giải quyết nó bằng cách:

1 - mở AndroidManifest.xml

2 - ctrl + f tìm "nhà cung cấp"

3 - tìm nhà cung cấp và cập nhật tên thư mục gốc của bạn ở đó.

chạy dự án. Hy vọng vấn đề sẽ được khắc phục!


2

cài đặt bằng adb với lệnh ./adb install -r abc.apksẽ giải quyết vấn đề (nó sẽ ghi đè ngay cả khi thiết bị có phiên bản ứng dụng cao hơn)


1

Nếu bạn đang sử dụng Xamarin và bạn gặp phải lỗi này (có thể là do 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 [...]

Như đã đề cập ở đây , bạn cần cập nhật Xamarin.Build. Tải xuống:

  1. Cập nhật Xamarin.Build. Tải xuống Gói Nuget lên 0.4.12-preview3
    • Trên Mac, bạn có thể cần kiểm tra Hiển thị các gói phát hành trước trong cửa sổ Thêm Gói
  2. Đóng Visual Studio
  3. Xóa tất cả các vị trí được lưu trong bộ nhớ cache của Gói NuGet:
    • Trên Windows, mở Visual Studio nhưng không phải là giải pháp:
      • Công cụ -> Tùy chọn -> Trình quản lý gói Nuget -> Chung -> Xóa tất cả (các) Bộ đệm ẩn Nuget
    • Trên máy Mac, xóa các thư mục sau:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages thư mục trong giải pháp
  4. Xóa các thư mục bin / obj trong giải pháp
  5. Tải giải pháp
  6. Khôi phục các gói Nuget cho Giải pháp (sẽ tự động chạy)
  7. Tái tạo

0

Trong thiết bị Android của tôi, tôi có các hương vị khác nhau của cùng một cài đặt ứng dụng . Điều này mang lại cho tôi lỗi CÀI ĐẶT CUNG CẤP CONFLICTING FAILED . vì vậy tôi gỡ cài đặt tất cả các hương vị của cùng một ứng dụng. và đã thử

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

Nó giải quyết vấn đề của tôi.


0

Bạn có thể gỡ cài đặt tên gói "com.example" khỏi thiết bị mà bạn chạy ứng dụng sau khi bạn chạy ứng dụng. Điều này làm việc cho tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.