インストールでコンソールにエラーが表示される:INSTALL FAILED CONFLICTING PROVIDER


164

Android SDKのNotesListサンプルプログラムを実験しています。プログラムに若干の変更を加えましたが、編集したバージョンをインストールすると、元のノートプログラムが既にデバイスにあるときにインストールしようとすると、コンソールにメッセージINSTALL_FAILED_CONFLICTING_PROVIDERが表示され続けます。プロバイダーを一意のデータベースにするためにプロバイダーで何を変更する必要がありますか?オリジナルのノートプログラムをアンインストールして、編集したバージョンをインストールすると、問題なく動作します。

回答:


198

に記載されている権限はandroid:authorities一意である必要があります。この属性のドキュメントを引用すると

競合を回避するために、権限名はJavaスタイルの命名規則(com.example.provider.cartoonproviderなど)を使用する必要があります。通常は、プロバイダーを実装するContentProviderサブクラスの名前です。


5
@ CommonsWare タグでandroid:authorities属性を使用しましたAndroidManifest provider。私はいくつかのプロジェクトを開発したこのライブラリプロジェクトを使用して、このプロジェクトをAndroidライブラリプロジェクトとして使用しました。install_failed_conflicting_provider共通ライブラリプロジェクトを使用した場合の問題の解決方法。
Jamal

1
@jamal:Android StudioなどからGradle for Androidを使用している場合、マニフェストマージオプションを使用して、認証文字列を調整できます。それ以外の場合は<provider>、ライブラリのマニフェストからを削除し、アプリケーションレベルで一意の権限文字列を使用して定義します。
CommonsWare 2014年

4
@jamal:tools.android.com/tech-docs/new-build-system/user-guide/…-さらに質問があり、検索で回答が見つからない場合は、新しいStack Overflowの質問をしてください。
CommonsWare 2014年

11
同じプロバイダー名の2つのプロジェクトでライブラリを使用すると、このエラーが発生する可能性があります
Mohammed Subhi Sheikh Quroush '19 / 11/14

1
私のようなものを持っていないandroid:authoritiesか、<provider>自分のライブラリーのマニフェストと、このエラーを取得中。
lef 7/7

143

異なるフレーバーがあり、機関名の衝突を避けたい場合は、applicationIdSuffixを追加してタイプをビルドしapplicationId、次のようにマニフェストで結果を使用できます。

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

applicationId各製品のフレーバー定義に独自のものを定義できます。developer.android.com/studio/build/...
ホセ・L Ugia

applicationIdとにかく、フレーバーごとに異なるものを作成する必要があるため、これを行うと、異なる製品フレーバーが修正されると思います。異なるbuildTypeがあるapplicationId場合、それらの間でも異なるようにしたいので、それがプロパティの役割ですapplicationIdSuffix
chubbsondubs 2016年

おかげで、ハードコーディングされたandroid:authoritiesをfileproviderで使用することがまさに私の問題です!
ブルース

正解です。これらを追加して実行する前に、アプリケーションの古いバージョンをクリーンアップしてください。
Eren Utku 2017

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]を介してライブラリを使用する2つ目のアプリをインストールしようとすると、このエラーメッセージが表示されます。

競合するプロバイダー

コンソールに、次のようなメッセージが表示されます。

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に完全に移行するのに約1か月かかりましたが、Eclipseでは10〜15秒でしたが、ビルド時間は4分以上になりました。
DiscDev 2016

@PhilippeGirolami android studio 2.0は、特に速度の低下に対処するためにビルドされています。ベータ5を使用しています。ただし、自己責任でベータスタジオソフトウェアを使用してください。
DiscDev 2016年

27

これは、古いバージョンのアプリをインストールし、(サポート)ライブラリまたはマニフェストファイルに変更を加えた場合にも発生する可能性があります。デバイスから古いアプリケーションを削除すると(Settings --> Application --> <your application> --> Uninstall)、問題が解決します。


1
こっちも一緒。私はgenymotion仮想デバイスを使用していて、以前にインストールしたアプリケーションを削除する必要がありました。
ibaralf

22

Facebook SDKを使用している場合、問題はFacebookプロバイダーに提供する「権限」の値にある可能性があります。

交換-

<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他の回答で提案されているように、を変更する必要がある場合もあります。


投票したので、これを使用することをお勧めします:android:authorities = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh

15

パッケージの名前を変更した後も同じエラーが発生することがあります。string.xmlでandroid:authoritiesAndroidManifest.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

複数のアプリケーションで1つのライブラリを使用した場合も、同様の問題が発生しました。以下の正確なプロバイダー宣言で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 Package Manager-> General-> Clear All Nuget Cache(s)
    • Macでは、次のフォルダーをワイプします。
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages ソリューションのフォルダー
  4. ソリューションのbin / objフォルダーを削除する
  5. ソリューションを読み込む
  6. ソリューションのNugetパッケージを復元する(自動的に実行する必要があります)
  7. 再構築

0

私のAndroidデバイスでは、同じアプリインストールのさまざまなフレーバーがありました。これにより、エラーINSTALL FAILED CONFLICTING PROVIDERが発生します。同じアプリのすべてのフレーバーをアンインストールします。そして試しました

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

それは私の問題を解決しました。


0

アプリを実行した後、アプリを実行したデバイスからパッケージ名「com.example」をアンインストールできます。これは私のために働いた

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.