콘솔에 설치 오류가 표시됨 : 설치 실패 충돌 제공자 설치


165

Android SDK에서 NotesList 샘플 프로그램을 실험하고 있습니다. 프로그램에서 약간의 변형이 있었지만 편집 한 버전을 설치할 때 원래 메모 프로그램이 이미 장치에있을 때 설치하려고 할 때 콘솔에 INSTALL_FAILED_CONFLICTING_PROVIDER 메시지가 계속 표시됩니다. 공급자를 고유 한 데이터베이스로 만들려면 공급자에서 무엇을 변경해야합니까? 원래 메모 프로그램을 제거한 다음 편집 한 버전을 설치하면 제대로 작동합니다.

답변:


198

에 나열된 권한 android:authorities은 고유해야합니다. 이 속성에 대한 문서 인용 :

충돌을 피하려면 권한 이름에 Java 스타일 명명 규칙 (예 : com.example.provider.cartoonprovider)을 사용해야합니다. 일반적으로 제공자를 구현하는 ContentProvider 서브 클래스의 이름입니다.


5
@ CommonsWare 태그에 android:authorities속성을 사용 했습니다 AndroidManifest provider. 이 프로젝트를 사용 하여이 프로젝트를 내 안드로이드 라이브러리 프로젝트로 사용했습니다. install_failed_conflicting_provider공통 라이브러리 프로젝트를 사용한 경우 문제 를 해결하는 방법 .
자말

1
@jamal : Android Studio와 같은 Android 용 Gradle을 사용하는 경우 매니페스트 병합 옵션을 사용하면 권한 문자열을 조정할 수 있습니다. 그렇지 않으면 <provider>라이브러리의 매니페스트에서를 제거하고 고유 한 권한 문자열을 사용하여 응용 프로그램 수준에서 정의하십시오.
CommonsWare

4
@jamal : tools.android.com/tech-docs/new-build-system/user-guide/…- 추가 질문이 있고 검색을 통해 답변을 찾을 수 없으면 새로운 스택 오버플로 질문을하십시오.
CommonsWare

11
제공자 이름이 동일한 두 개의 프로젝트에서 라이브러리를 사용하는 경우이 오류가 발생할 수 있습니다.
Mohammed Subhi Sheikh Quroush

1
내가 좋아하는 그런 일이 없다 android:authorities또는 <provider>내 라이브러리 매니페스트이 오류가 발생합니다.
lef

143

다른 플레이버가 있고 기관 이름의 충돌을 피 applicationIdSuffix하려면 다음과 같이 빌드 유형을 추가 하고 결과 applicationId를 매니페스트에 사용할 수 있습니다 .

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

applicationId각 제품 플레이버 정의에 대해 직접 정의 할 수 있습니다 . developer.android.com/studio/build/…
Jose L Ugia

나는 당신이 그렇게하면 applicationId어쨌든 각 맛마다 다른 것을 만들어야하기 때문에 다른 제품 맛을 고칠 것이라고 생각 합니다. 다른 빌드 유형이있는 경우 다른 빌드 유형을 사용하려는 applicationId경우 applicationIdSuffix속성이 수행됩니다.
chubbsondubs 2016 년

고마워, 하드 코딩 된 안드로이드를 사용하십시오 : fileprovider의 권한은 정확히 내 문제입니다!
Bruce

좋은 답변입니다! 추가하고 실행하기 전에 이전 버전의 응용 프로그램을 정리하십시오.
Eren Utku

30

라이브러리 프로젝트 내에서 Google지도 + Google Play 서비스를 사용하는 경우 (특히 최근 Eclipse에서 Android Studio로 마이그레이션 한 경우) 라이브러리를 사용하는 앱을 실행하는 동안 다른 앱을 사용하는 경우이 오류가 발생할 수 있습니다. 장치에 동일한 라이브러리가 이미 설치되어 있습니다.

수정 : defaultConfig.applicationId가 build.gradle라이브러리를 사용하여 각 프로젝트 의 파일 의 android 섹션에 정의되어 있는지 확인하십시오 .

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

특정 앱의 패키지 이름을 사용하는 것이 좋습니다. 이 수정을 사용하면 공급자 이름이 더 이상 충돌하지 않으며 앱이 예상대로 실행됩니다.

조짐

1.) Play 스토어에서 앱을 설치할 때 사용자에게 두려운 "-505"설치 오류가 표시됩니다.

2.) Android Studio [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 : 동일한 권한 제공자 이름을 사용하는 여러 앱


Eclipse에서 Android Studio로 프로젝트를 "간단하게"이동 한 후이 오류가 발생하여이 팁으로 문제가 해결되었습니다. 감사합니다
Philippe Girolami 2016

@PhilippeGirolami "간단히"확실합니다. 매우 큰 프로젝트를 Eclipse에서 Studio로 완전히 전환하는 데 약 한 달이 걸렸으며 이제는 Eclipse에서 10-15 초에 비해 4 분 이상의 빌드 시간이 부과됩니다.
DiscDev

@PhilippeGirolami android studio 2.0은 속도 저하를 해결하기 위해 특별히 제작되었습니다. 베타 5를 사용하고 있습니다. 그러나 베타 스튜디오 소프트웨어를 사용하는 경우 위험에 처할 수 있습니다.
DiscDev

27

이전 버전의 앱이 설치되어 있고 (지원) 라이브러리 또는 매니페스트 파일을 변경 한 경우에도 발생할 수 있습니다. 기기에서 이전 애플리케이션을 삭제하면 ( Settings --> Application --> <your application> --> Uninstall) 문제가 해결됩니다.


1
여기도 마찬가지입니다. genymotion 가상 장치를 사용하고 있었고 이전에 설치된 응용 프로그램을 제거해야했습니다.
ibaralf

23

Facebook SDK를 사용하는 경우 Facebook 공급자에 제공 한 "기관"값에 문제가있을 수 있습니다.

교체-

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

WITH->

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

defaultConfig.ApplicationId다른 답변에서 제안한대로도 변경해야 할 수도 있습니다 .


upvoted, 나는 이것을 사용하는 것이 좋습니다 : android : authorities = "$ {applicationId} .com.facebook.FacebookContentProvider"
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>

이것은 좋은 솔루션이지만 응용 프로그램의 각 공급자에 대한 값으로 새 문자열을 만들려면 시간 + 공간이 필요합니다.
lukassos


7

기본적으로 이것은 앱의 패키지 이름을 변경하려고 할 때 나와 함께 발생했습니다.

따라서 에뮬레이터에서는 이전에 동일한 앱이 설치되었습니다. 패키지 이름을 변경 한 후 앱을 설치하려고 할 때 장치의 이전 응용 프로그램에서 이미 사용 권한이 있다고 말했습니다.

응용 프로그램을 제거한 후 내 문제가 해결되었습니다.

또한 권한 이름은 항상 다음과 같아야합니다. your.package.name.UNIQUENAME;

예 :

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

제공자에 'tools : replace = "android : authorities"'를 추가했습니다.
Christine

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

앱에서 Facebook을 사용하는 경우 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 명령 ./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 패키지를 0.4.12-preview3으로 업데이트
    • Mac의 경우 패키지 추가 창 에서 시험판 패키지 표시 를 확인해야 할 수 있습니다
  2. Visual Studio 닫기
  3. NuGet 패키지의 모든 캐시 된 위치를 삭제하십시오.
    • Windows에서는 Visual Studio를 열지 만 솔루션은 열지 마십시오.
      • 도구-> 옵션-> Nuget 패키지 관리자-> 일반-> 모든 Nuget 캐시 지우기
    • Mac에서 다음 폴더를 정리하십시오.
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages 솔루션의 폴더
  4. 솔루션에서 bin / obj 폴더 삭제
  5. 솔루션로드
  6. 솔루션 용 Nuget 패키지 복원 (자동 실행)
  7. 재건

0

내 안드로이드 장치 에서 동일한 앱 설치 의 다른 맛을 보았습니다 . 이것은 INSTALL FAILED CONFLICTING PROVIDER 오류가 발생 합니다. 동일한 앱의 모든 맛을 제거합니다. 시도

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

내 문제를 해결했습니다.


0

app을 실행 한 후 앱을 실행 한 장치에서 패키지 이름 "com.example"을 제거 할 수 있습니다. 이것은 나를 위해 일했다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.