ManifestMergerのログを見てみる
ManifestMergerとは
Android Gradle Pluginが提供するビルド時に自身のマニフェストファイルやライブラリプロジェクトのマニフェストファイルをマージしてくれる機能です。
だから、私たちはbuild.gradleに数行追加するだけで、ライブラリのダウンロードから依存解決・参照設定まで何も気にせず開発できます。
ただ、ManifestMergerが全てやってくれるので、ManifestMergerのことを知っておかないと、意図せぬパーミッション追加や(依存解決による)ライブラリダウンロードに気づけなくなるのです。
テストアプリを作ってみる
確認用テストアプリの為、build.gradleを書きます。
build.gradle
dependencies { compile 'com.google.android.gms:play-services:7.5.0' }
上記でビルドしてみます。すると、書いた覚えのないパーミッションがマージ後のマニフェスに現れます。
module/build/outputs/intermediates/manifest/full/flavor/buildType/AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
それでは、マージのログを見ていきましょう
ログは
module/build/outputs/logs/manifest-merger-buildVariant-report.txt
です。
以下はログの一部ですが、play-services-ads7.5.0
からandroid.permission.INTERNET
が付与されていることが分かります。
uses-permission#android.permission.INTERNET ADDED from [com.google.android.gms:play-services-ads:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-ads/7.5.0/AndroidManifest.xml:20:5-66 MERGED from [com.google.android.gms:play-services-analytics:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/7.5.0/AndroidManifest.xml:21:5-67 MERGED from [com.google.android.gms:play-services-analytics:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/7.5.0/AndroidManifest.xml:21:5-67 MERGED from [com.google.android.gms:play-services-appinvite:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-appinvite/7.5.0/AndroidManifest.xml:19:5-67 MERGED from [com.google.android.gms:play-services-maps:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/7.5.0/AndroidManifest.xml:21:5-66 MERGED from [com.google.android.gms:play-services-maps:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/7.5.0/AndroidManifest.xml:21:5-66 MERGED from [com.google.android.gms:play-services-maps:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/7.5.0/AndroidManifest.xml:21:5-66 MERGED from [com.google.android.gms:play-services-wallet:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-wallet/7.5.0/AndroidManifest.xml:20:5-66 MERGED from [com.google.android.gms:play-services-maps:7.5.0] app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/7.5.0/AndroidManifest.xml:21:5-66
また、このmanidest-merger-buildVariant-report.txtは、ダウンロードしたライブラリとそのバージョンも見られるので、確認にとても便利です。
ちなみにtools:node=“remove"属性でマージから除ける
xmlns:tools="http://schemas.android.com/tools"
を記載した上でtools:node="remove"
を指定すればOKです。
<uses-permission android:name="android.permission.INTERNET" tools:node="remove" />
参考
Merge Multiple Manifest Files | Android Studio
Android Studioの落とし穴 ライブラリプロジェクト - リスクファインダーブログ