#経緯
android manifestでいらないパーミッションを消したい
>間違いなく消してるのにどっかから検出されてる
>別ライブラリで使ってるオチ
普通に全部検索して消せばOKなのですが、それをやってられない時用の対応メモ
#参考サイト
http://blog.riskfinder.co.jp/2015/10/android-studio.html
https://mrtry.hatenablog.jp/entry/2017/12/07/000000
https://developer.android.com/studio/build/manifest-merge.html
一番最後のは公式
#対応方針
上記参考サイトによると、ライブラリとか使ってて複数manifestがあるときはビルドの時に統合されるらしい。
今回いじるアプリは大量のライブラリを使ってるので確かにこの中にあってもおかしくない…
この統合ツールは結構いろんなことができるらしいので、今回はそれを使って「特定のパーミッションは統合しない」という対応
ひとまず現状確認
ちなみに今回消したいのはC2D_MESSAGEです。GCM用のものなので不要
./build/intermediates/manifests/full/debug/AndroidManifest.xml
が統合結果とのこと。確かに
<permission
android:name="{パッケージ名}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
の記述がある。これを見て削除できたかどうかのチェックをする。逐一クリーンビルドして確認
#対応
>applicatonタグにxmlns:tools="http://schemas.android.com/tools"
を追加したのち、
<{消したいパーミッションと全く同じ記述} tools:node="remove"/>
をmanifestに追加で消えるはず
#引っかかったところメモ
パッケージ名はもちろん、タグ名や他のプロパティまで全く同じ記述にしないと消えないようです。
下記は実際の事例
<uses-permission android:name="{パッケージ名}.permission.C2D_MESSAGE" tools:node="remove"/>
を追加
>消えない
>他のプロパティを記述してなかったので、
<uses-permission
android:name="{パッケージ名}.permission.C2D_MESSAGE"
android:protectionLevel="signature"
tools:node="remove"/>
に変更
>消えない
>統合結果をよーーーく見ると、
<permission
android:name="{パッケージ名}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
だった…(uses-permissionじゃない。)
<permission
android:name="{パッケージ名}.permission.C2D_MESSAGE"
android:protectionLevel="signature"
tools:node="remove"/>
に変更
>消えた!が、
<uses-permission android:name="{パッケージ名}.permission.C2D_MESSAGE"/>
が生き残ってた…
<uses-permission android:name="{パッケージ名}.permission.C2D_MESSAGE" tools:node="remove"/>
を追加
>これで全部消えた!!
#所感
記述は簡単(今回は消したいパーミッションの末尾にtools:node="remove"
をつけるだけ)
結構いろんなことやってくれて便利そう。
ただ記述は正確にしないとはまる。