Android MenifestでApplicationIdを動的に参照し、INSTALL_を解決FAILURE_CONFLICTION_PROVIDER

2785 ワード

複数のチャネルパケットを打つ際に異なるパケット名を使用する必要がある場合がありますが、同じ携帯電話で異なるアプリケーションIdのインストールパケットをインストールできない場合はadbコマンドでインストールし、エラーの原因を見つけることができます.例えば私が今日出会った問題Failure[INSTALL_FAILURE_CONFICTION_PROVIDER]で、リストファイルに行ってbuglyのproviderに問題が発生したことを発見しました.
<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の下に表示されます