Android MenifestでApplicationIdを動的に参照し、INSTALL_を解決FAILURE_CONFLICTION_PROVIDER
2785 ワード
複数のチャネルパケットを打つ際に異なるパケット名を使用する必要がある場合がありますが、同じ携帯電話で異なるアプリケーションIdのインストールパケットをインストールできない場合はadbコマンドでインストールし、エラーの原因を見つけることができます.例えば私が今日出会った問題Failure[INSTALL_FAILURE_CONFICTION_PROVIDER]で、リストファイルに行ってbuglyのproviderに問題が発生したことを発見しました.
providerのauthoritiesはパッケージ名+fileProviderの形式で書かれていますが、ここのパッケージ名は実際には動的であるべきで、チャネルによって異なります.この場合、gradleでアプリケーションIdを指定するように
またmenifestヘッダにも
ビルド完了後のAndroid Menifestファイルはapp/build/intermediates/menifests/full/チャネル名/buildTypeの下に表示されます
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.***.***.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
provider>
providerのauthoritiesはパッケージ名+fileProviderの形式で書かれていますが、ここのパッケージ名は実際には動的であるべきで、チャネルによって異なります.この場合、gradleでアプリケーションIdを指定するように
android:authorities="${applicationId}.fileProvider"
に変更することができます.ここでも変わります.<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
provider>
またmenifestヘッダにも
package="***.***.***"
があり、パッケージ名はbuildが完了した後もapplicationIdに従って変動するのでpackageで引用する可能性もあるので、読者は試してみてください.ビルド完了後のAndroid Menifestファイルはapp/build/intermediates/menifests/full/チャネル名/buildTypeの下に表示されます