2013-04-28 21 views
92

Android SDKのNotesListサンプルプログラムを試しています。私はプログラムを少し変更しましたが、編集したバージョンをインストールすると、元のノートプログラムがすでにデバイスにインストールされているときに、コンソールにINSTALL_FAILED_CONFLICTING_PROVIDERというメッセージが表示され続けます。固有のデータベースにするためにプロバイダで何を変更する必要がありますか?元のノートプログラムをアンインストールしてから編集したバージョンをインストールするとうまくいきます。コンソールにインストールエラーが表示されます。インストール失敗FAX番号

答えて

134

権限マニフェストで宣言されている認証局+プロバイダ名。 the documentation for this attribute引用:

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

+2

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

+1

@jamal:Androidスタジオなど、Android用Gradleを使用している場合は、マニフェストマージオプションを使用してオーソリティストリングを調整できます。それ以外の場合は、ライブラリのマニフェストから ' 'を削除し、固有の権限文字列でアプリケーションレベルで定義します。 CommonsWare先生@ – CommonsWare

+0

あなたは(独自の権限文字列を使用してアプリケーションレベル)をマージする方法私を導いてくださいすることができ、実際に私はアンドロイドのスタジオに新しいです – Jamal

8

一意でなければなりませんandroid:authoritiesに記載されているあなたは、おそらく

20

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

+1

同じです。私はgenymotion仮想デバイスを使用していて、以前にインストールされたアプリケーションを削除しなければなりませんでした。 – ibaralf

+1

それは感謝 –

+0

を働いたこれがこれがまた良い解決策であるが、アプリケーション内の各プロバイダの値に新しい文字列を作成するために時間+スペースを取り、私の問題 – Kushal

14

パッケージの名前を変更した後に同じエラーが発生することがあります。 AndroidManifest.xmlのstring.xmlにあるandroid:authoritiesの値を確認してください。

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

string.xmlの値は、マニフェストで宣言されているパッケージ名と同じにする必要があります。あなたは別の味を持っていて、機関名での衝突を回避したい場合

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

。これは私をたくさん助けた私のため – viper

+0

を解決しました。 – lukassos

77

あなたは、このように、種類を構築し、自分のマニフェストに結果applicationIdを使用するようapplicationIdSuffixを追加することができます。

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

あなたは私の問題を解決するのを助けてくれますか?私は異なる味のために同じ問題に直面している。 –

+0

各製品のフレーバー定義に独自の 'applicationId'を定義することができます。 https://developer.android.com/studio/build/build-variants.html#product-flavors –

+0

私はあなたがこれを行う場合は、とにかくそれぞれの味のために異なる 'applicationId'を作成するために持っているとして、それは異なる製品の風味を修正すると思います。異なるbuildTypesがある場合は、それらの間で 'applicationId'を異ならせてください。これが' applicationIdSuffix'プロパティがすることです。 – chubbsondubs

30

の場合ライブラリプロジェクト内でGoogleマップとGoogle Playサービスを使用している場合(特に最近EclipseからAndroid Studioに移行した場合)、ライブラリを使用するアプリを実行しようとするとこのエラーが発生する可能性があります。同じライブラリが既にデバイスにインストールされています。

修正: あなたのライブラリーを使用してdefaultConfig.applicationIdは、プロジェクトごとにbuild.gradleファイルのアンドロイドセクションで定義されていることを確認し

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

私は、特定のアプリのパッケージ名を使用することをお勧めします。この修正により、プロバイダー名はもはや競合しなくなり、アプリケーションは期待どおりに実行されます。

症状

1)ユーザーはPlayストアからのアプリをインストールするときにエラーをインストール恐ろしい「-505」を見ています。

2。

:あなたのコンソールで

Conflicting Provider

、あなたがこのようなメッセージが表示されます。)あなたは[INSTALL_FAILED_CONFLICTING_PROVIDER] Androidのメーカーを経由して、あなたのライブラリーを使用する第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 { 
    defaultConfig.applicationId = "com.company.appname" 
} 

もっと読書は、元のバグレポートにここで見つけることができます:私はアプリのパッケージ名を変更しようとしたときIssue 784: Multiple apps using same authority provider name

+0

EclipseからAndroid Studioへプロジェクトを「単純に」移動した後にこのエラーが発生し、このヒントがこの問題を解決しました。ありがとう –

+0

@PhilippeGirolamiは "単純に"確かに。非常に大きなプロジェクトをEclipseからStudioに完全に移行するには約1か月かかりましたが、Eclipseでは10〜15秒と比較して4分以上のビルド時間で罰せられました。 – DiscDev

+0

残念なことに、ここで非常に似たような経験です。私はこのことについてウェブ上で遭遇していることを少し驚いています... –

5

は、基本的にこれは、私と一緒に起こりました。

エミュレータでは、同じアプリが以前にインストールされていました。私は、パッケージ名を変更した後にアプリケーションをインストールしようとしたとき、デバイス内の古いアプリケーションがすでに使用している権限があると言いました。

アプリケーションをアンインストールしただけで、問題が解決しました。

また、権限名は常に次のとおりです。your.package.name.UNIQUENAME;

例:あなたはFacebookのSDKを使用している場合

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

、問題はあなたがFacebookのプロバイダを提供する「当局」の値であるかもしれません。

はREPLACE - WITH

<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を変更する必要があります。

2

私は私のアプリではなかったので、私は計装のテストケースを実行していた...私は、問題についての詳細を与えたい...

を多くの解決策を試してみましたが、解決策を見つけることができませんでした...しかし、このlinkが助けてくれましたランチャーに表示されていますが、インストールされているため、同じコンテンツプロバイダを使用しています。だから、私は何とかそれをアンインストールする必要があります。だから、Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

さて、これは動作します...実行しよう...

2

コマンド./adb install -r abc.apkでADBを使用してインストールすることで問題を解決します(これは、デバイスが高いアプリのバージョンを持っている場合でも、上書きされます)

3

あなたがAndroidManifestファイル内のプロバイダタグのためのアプリのチェック内のFacebookを使用している場合とandroid:authorities

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

のためにあなたのproject Idが正しいか確認してください、私は場合にも同様の問題を抱えていました私はいくつかのアプリケーションで1つのライブラリを使いました。 AndroidManifestを更新するだけでした。xmlの下にこの正確なプロバイダ宣言があります。私は同じアプリの異なる味をインストールしたAndroidデバイスで

<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> 
0

。これは私にエラーFAILED対処プロバイダをインストールします。 同じアプリのすべてのフレーバーをアンインストールします。

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

と試みたがそれは私の問題を解決しました。

関連する問題