Android SDK の NotesList サンプル プログラムを試しています。プログラムにわずかな変更を加えましたが、編集したバージョンをインストールすると、元のメモ プログラムが既にデバイスにあるときにインストールしようとすると、コンソールに INSTALL_FAILED_CONFLICTING_PROVIDER というメッセージが表示され続けます。プロバイダーを一意のデータベースにするには、プロバイダーで何を変更する必要がありますか? 元のメモ プログラムをアンインストールしてから、編集したバージョンをインストールすると、問題なく動作します。
29 に答える
に記載されている機関はandroid:authorities
一意である必要があります。この属性のドキュメントを引用する:
競合を避けるために、機関名は Java スタイルの命名規則 (com.example.provider.cartoonprovider など) を使用する必要があります。通常、プロバイダーを実装する ContentProvider サブクラスの名前です。
これは、古いバージョンのアプリがインストールされていて、(サポート) ライブラリまたはマニフェスト ファイルに変更を加えた場合にも発生する可能性があります。デバイスから古いアプリケーションを削除すると ( Settings --> Application --> <your application> --> Uninstall
)、問題が解決します。
基本的に、アプリのパッケージ名を変更しようとしたときに、これが発生しました。
そのため、エミュレーターでは、同じアプリが以前にインストールされていました。パッケージ名を変更した後にアプリをインストールしようとすると、デバイス内の古いアプリケーションによって権限が既に使用されていると表示されました。
アプリケーションをアンインストールしただけで、問題は解決しました。
また、機関名は常に : your.package.name.UNIQUENAME
;にする必要があります。
例 :
<provider
android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
android:authorities="your.package.name.AviaryCdsProvider"
/>
おそらくマニフェストで宣言した機関 + プロバイダー名
明らかなことを述べますが、applicationId
in への参照を黙って台無しにしないようにしてくださいandroid:authorities
。
私の場合、私はタイプミスをして、いまいましいドル記号を省略しました:
android:authorities="{applicationId}.myprovider"
それ以外の :
android:authorities="${applicationId}.myprovider"
これにより、すぐにエラーが発生することはありませんでした (有効な機関名であるため)。しかし、数日後、アプリケーションのさまざまなバリエーションをインストールしようとしたとき、何が問題なのかを理解するのに本当に苦労しました。エラー メッセージには、コンテンツ プロバイダーの問題点に関する情報があまり含まれていないからです。
これをトラブルシューティングする別の方法は、マージされたマニフェストを比較して、同一の権限を探すことです。
私はこの問題を抱えていました:
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER
しかし、それはマニフェストのプロバイダーからのものではありませんでした。私のアプリの以下のライブラリは他のアプリと競合しており、他のアプリはインストールできません:
implementation 'com.iceteck.silicompressorr:silicompressor:2.2.1'
<providerタグの下のandroid:authorities属性を確認してください
パッケージ名が正しいかどうかを確認してください