Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

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の落とし穴 ライブラリプロジェクト - リスクファインダーブログ