同じコンテンツプロバイダーを使用する2つのアプリケーションがありますが、両方のアプリケーションに同じコンテンツプロバイダーを配置できません。INSTALL_FAILED_CONFLICTING_PROVIDERエラーが表示されます。コンテンツプロバイダーを3番目の.apkに配置し、2つのアプリケーションからこれを使用したところ、問題なく動作しています。
今問題は-これらの2つのアプリのいずれかをデバイスにインストールする前に、コンテンツプロバイダーapkをインストールする必要があります。それ以外の場合は、インストール中にプロバイダーが見つかりませんというエラーが表示されます。
それで、他のapkがインストールされる前に、プロバイダーapkがインストールされていることをどのように確認できますか?
コンテンツプロバイダーapkを他の両方のapkと個別にマージする方法はありますか?それらは2つのアプリケーションとして一緒にインストールされ、INSTALL_FAILED_CONFLICTING_PROVIDERエラーを表示しませんか?
ユーザーが両方のアプリケーションをインストールできないか、1つのデバイスに両方をインストールする可能性があるため、コンテンツプロバイダーのapkと両方のアプリケーションをマージする必要があります。
私が考えることができる1つの解決策は、コンテンツプロバイダーを内部的に異なるパッケージIDを持つ両方のアプリケーションの一部にし、Android:exported = trueを使用してそれをエクスポートすることです。ただし、どちらも同じコードを使用している可能性があります。
アプリケーションの開始時に、デバイスに他のコンテンツプロバイダーが存在するかどうかを確認します。存在する場合はそれを使用し、それ以外の場合はローカルコンテンツプロバイダーにフォールバックします。他のアプリケーションをインストールすると、同じチェックを実行できます。
他のすべてのユーザーからコンテンツプロバイダーを保護するには、それを保護するためのカスタムアクセス許可を定義して、アプリケーションがそれを使用できるようにするか、シークレットキーなどのカスタム認証を配置してコンテンツプロバイダーにアクセスすることもできます。この認証コードは、コンテンツプロバイダーのすべてのメソッドで使用できます。
Android:authorities
ファイルのAndroidManifest.xml
の値を変更することで解決できます。エラーの理由は、デバイスにインストールされている別のアプリケーションがAndroid:authorities
に同じ値をすでに使用しているためです。
このエラーを解決するには:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
Android:authorities
AndroidManifest.xmlファイル内デバイスにインストールされている別のアプリケーションがすでにAndroid:authoritiesに対して同じ値を使用しています。
両方のプログラムのマニフェストファイル(AndroidManifest.xml)で、Facebook API登録番号などの1つのunicデータを使用します。これは、すでにインストールされているものと、インストールしようとできないものです。必要なもの:
Android:authorities = "com.facebook.app.FacebookContentProvider23473465463573466" Android:name = "com.facebook.FacebookContentProvider" Android:exported = "true" />
それはあなたの電話がすでに別のアプリケーションによって登録された同じ権限を持つプロバイダーを持っていることを意味します(あなたの他の例かもしれません)プロバイダーの権限を変更してくださいAndroid:authorities
とあなたは大丈夫です。