web-dev-qa-db-ja.com

INSTALL_FAILED_CONFLICTING_PROVIDER in Android

MyTracksというアプリにGoogleのオープンソースコードを使用しています。

元のアプリが電話にインストールされていると、このエラーが発生します。

INSTALL_FAILED_CONFLICTING_PROVIDER

これはAndroid:authoritiesマニフェスト内。

これがマニフェストの一部です:

<provider
Android:name="com.google.Android.apps.mytracks.content.MyTracksProvider"
Android:authorities="com.google.Android.maps.mytracks"
Android:exported="true"
Android:readPermission="com.google.Android.apps.mytracks.READ_TRACK_DATA"
Android:writePermission="com.google.Android.apps.mytracks.WRITE_TRACK_DATA" />
<!-- Search suggestion provider -->
<provider
Android:name="com.google.Android.apps.mytracks.content.SearchEngineProvider"
Android:authorities="com.google.Android.maps.mytracks.search"
Android:exported="false" />

だから、私の質問です:このアプローチで問題が解決するかどうかを知りたいのですが、すべてのパッケージ名を変更してアプリ全体が壊れるのを恐れているからです。

  1. Android :authorities valueはパッケージ名です。 Android:nameは、そのプロバイダーのクラスの名前です。私は正しいですか?

パッケージ名をcom.google etxとは別の名前に変更し、そのパッケージのすべての参照/インポートの名前を変更した場合、問題は解消されますか?

18
ghostrider

Android:authoritiesの値はパッケージ名です。

この場合、パッケージ名はhappensになります。それは単にユニークでなければならない。

Android:nameは、そのプロバイダーのクラスの名前です。

正しい。

パッケージ名をcom.google etxとは別の名前に変更し、そのパッケージのすべての参照/インポートの名前を変更した場合、問題は解消されますか?

パッケージ名はそれとは関係ありません。ただし、アプリを通常の変更されていないアプリと一緒にインストールできるようにするには、それも変更する必要がある場合があります。

Android:authoritiesには一意の値を設定する必要があり、これを使用するアプリのコードContentProviderは適切なUricontent://whatever.you.change.the.authority.to/...)を使用する必要があります。

30
CommonsWare

ライブラリプロジェクト内でGoogleマップとGoogle Play開発者サービスを使用している場合、同じライブラリを使用する別のアプリがすでにデバイスにインストールされているときに、ライブラリを使用するアプリを実行しようとすると、このエラーが発生する可能性があります。

修正:defaultConfig.applicationIdがAndroidのbuild.gradleファイルのセクションごとに定義されていることを確認してくださいライブラリを使用したプロジェクト

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

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

症状

1.)Playストアからアプリをインストールすると、ユーザーに恐ろしい「-505」インストールエラーが表示されます。

2.)Android Studio:経由でライブラリを使用する2つ目のアプリをインストールしようとすると、このエラーメッセージが表示されます:

enter image description here

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

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:同じ権限プロバイダー名を使用する複数のアプリ

6
DiscDev

デバイスからhelloFacebooksampleアプリをアンインストールするだけです

6
Sourabh

ex facebook-sdkを使用する場合は、各アプリについて、マニフェストで一意のこの行が必要です

<provider Android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
            Android:name="com.facebook.FacebookContentProvider"
            Android:exported="true"/>

xxxxxxxxxx-各アプリで一意である必要があります。facebook-sdkの場合は、facebook_id番号です

5
NickUnuchek

アプリのマニフェストでパッケージ名を変更したときにも同じエラーが発生しました。これにより、(新しいパッケージ名で)アプリを再度インストールしようとすると競合が発生します。解決策は、古いバージョンのアプリ(古いパッケージ名を使用)を削除して、新しいバージョンをインストールできるようにすることです。

2

グラドルにもこれを含める必要があります

defaultConfig {
  applicationId "com.example.app"
}

完全に省いていた

1
Krupa

実行しようとしているデバイスからアプリケーションをアンインストールして、もう一度reinstallアプリケーションを試してください。既存のアプリケーションが新しいアプリケーションと競合しています。

0
apurv thakkar

CommonsWareにはそれがありますが、役立つ詳細情報があります。

私にとって、ソリューションには2つの重要な部分がありました。最初に$(applicationId)をマニフェストプロバイダーエントリに追加しました。

        <provider
            tools:replace="Android:authorities"
            Android:name="Android.support.v4.content.FileProvider"
            Android:authorities="${applicationId}.files"
            Android:exported="false"
            Android:grantUriPermissions="true">
            <meta-data
                Android:name="Android.support.FILE_PROVIDER_PATHS"
                Android:resource="@xml/fileprovider" />
        </provider>

次に、ビルドバリアントを切り替えると、私はこれを「デバッグ」と「リリース」の間で切り替え、プロジェクトをGradleファイルと同期する必要があります。プロジェクトのクリーンとリビルドだけでは不十分でした。

Android Studioでは、AndroidManifest.xmlページの下部に2つのタブがあります。編集に使用する[テキスト]タブと[マージされたマニフェスト]タブには、ビルド後の結果のマニフェストが表示されます。私にとっては、プロバイダーのAndroid:authoritiesセクションにapplicationIdを適切に挿入していることがわかります。

0
MobileMateo