多くの異なるアプリケーションで使用されているライブラリプロジェクトに対して、private(exported = false)のContentProviderを使用できますか?アンドロイドライブラリプロジェクトのContentProvider
CPがエクスポートされていない場合でも、CPには独自の権限が必要です。一意でない場合は、同じライブラリの複数のアプリを同じ電話(INSTALL_FAILED_CONFLICTING_PROVIDER)にインストールすることはできません。
私は、このようなAndroidManifestでプロバイダを定義するためのアプリケーションIDを使用することができることを知っている:
<provider
android:authorities="${applicationId}.provider.test"
android:name=".storage.db.MyContentProvider"
android:exported="false" />
が、私はきちんとUriMatcherを初期化するために、実行時にコード内で権限を生成するための解決策を見つけることができません。
BuildConfig.APPLICATION_ID
は、アプリケーションではなくライブラリプロジェクトのIDを返します。 アプリのコンテキストからpackageIdを取得しようとする可能性がありますが、アプリが異なるappIdsのフレーバーを使用する場合は最適な解決策ではありません。
だから、これを解決するために、私のアイデアは、次のとおりです。(異なるアプリケーションIDと味が使用されている場合も)
- は、実行時に自分のライブラリコード内の適切appplicationIdを見つける
- 適切にURIを一致させる方法を見つけます私のUriMatcher権限の知識なし。
に見え、ここhttp://stackoverflow.com/を見ます質問/ 6120025 /制限する方法 - コンテンツプロバイダデータ - アプリケーション全体 - ここではhttp://stackoverflow.com/questions/23281860/how-do-i-restrict-access-to-my-contentprovider-to -only-my-apps、私は詳細を使用したり読んだりしませんでしたが、主なアイデアは、同じ鍵で署名されたアプリケーションだけがプロバイダにアクセスできるようにすることです – Yazan
私は自分のライブラリを使用するアプリケーションを所有していないので、アプリのデベロッパーにとって透明でなければなりません。 – LR89