답변:
에 나열된 권한 android:authorities
은 고유해야합니다. 이 속성에 대한 문서 인용 :
충돌을 피하려면 권한 이름에 Java 스타일 명명 규칙 (예 : com.example.provider.cartoonprovider)을 사용해야합니다. 일반적으로 제공자를 구현하는 ContentProvider 서브 클래스의 이름입니다.
<provider>
라이브러리의 매니페스트에서를 제거하고 고유 한 권한 문자열을 사용하여 응용 프로그램 수준에서 정의하십시오.
android:authorities
또는 <provider>
내 라이브러리 매니페스트이 오류가 발생합니다.
다른 플레이버가 있고 기관 이름의 충돌을 피 applicationIdSuffix
하려면 다음과 같이 빌드 유형을 추가 하고 결과 applicationId
를 매니페스트에 사용할 수 있습니다 .
<...
android:authorities="${applicationId}.contentprovider"/>
applicationId
각 제품 플레이버 정의에 대해 직접 정의 할 수 있습니다 . developer.android.com/studio/build/…
applicationId
어쨌든 각 맛마다 다른 것을 만들어야하기 때문에 다른 제품 맛을 고칠 것이라고 생각 합니다. 다른 빌드 유형이있는 경우 다른 빌드 유형을 사용하려는 applicationId
경우 applicationIdSuffix
속성이 수행됩니다.
라이브러리 프로젝트 내에서 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 : 동일한 권한 제공자 이름을 사용하는 여러 앱
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
다른 답변에서 제안한대로도 변경해야 할 수도 있습니다 .
패키지 이름을 바꾼 후에도 같은 오류가 발생할 수 있습니다. android:authorities
AndroidManifest.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>
기본적으로 이것은 앱의 패키지 이름을 변경하려고 할 때 나와 함께 발생했습니다.
따라서 에뮬레이터에서는 이전에 동일한 앱이 설치되었습니다. 패키지 이름을 변경 한 후 앱을 설치하려고 할 때 장치의 이전 응용 프로그램에서 이미 사용 권한이 있다고 말했습니다.
응용 프로그램을 제거한 후 내 문제가 해결되었습니다.
또한 권한 이름은 항상 다음과 같아야합니다. your.package.name.UNIQUENAME
;
예 :
<provider
android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
android:authorities="your.package.name.AviaryCdsProvider"
/>
여러 응용 프로그램에서 하나의 라이브러리를 사용할 때 비슷한 문제가 발생했습니다. 아래의 정확한 공급자 선언으로 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>
많은 솔루션을 시도했지만 솔루션을 찾을 수 없습니다 ...하지만이 링크가 도움 이 되었습니다 ... 문제에 대해 자세히 설명하고 싶습니다 ...
인스트루먼트 테스트 사례를 실행하여 내 앱이 실행기에 표시되지 않았지만 설치되어 동일한 콘텐츠 제공자를 사용했습니다 . 그래서 어떻게 든 제거해야합니다. 그래서Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package
자, 실행을 시도하십시오 ... 이것은 작동합니다 ...
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를 업데이트해야합니다.
~/.local/share/NuGet
~/.nuget/packages
packages
솔루션의 폴더
android:authorities
속성을 사용 했습니다AndroidManifest
provider
. 이 프로젝트를 사용 하여이 프로젝트를 내 안드로이드 라이브러리 프로젝트로 사용했습니다.install_failed_conflicting_provider
공통 라이브러리 프로젝트를 사용한 경우 문제 를 해결하는 방법 .