• スポンサードリンク

マージしたAndroidライブラリが勝手に付与するパーミッションを取り除く

Android Android Studio

どこぞのバカタレAndroidライブラリが使ってもないREAD_PHONE_STATEを勝手に付与するのでライブラリからマージされるパーミッションを取り除く方法を調べてみた。
もちろんマージするAndroidライブラリを好き勝手にいじれるのならそっちを変える方が簡単やねんけど世の中そう都合よくいかんことがあるやろ?

ネットをウロウロするとStackoverflowでAndroidManifest.xmlのヘッダーに

のようにしてtoolsネームスペースを追加しておいて

を付与しろと書いてありました。

まぁこんな感じですね。

しかぁーしこれではREAD_PHONE_STATEを除去できるどころか

という役に立たないエラーを吐いてビルドすら通りません。ガーン😨 既に役に立たなくなったworkaroundでした(T_T)

しょうがないのでAOSPのマニフェストマージャー(カタカナで書くと少し間抜けな気がする😁)のソースを見てきました。たぶんXmlElement.javaです。

じゃじゃぁーん。

その結果、

をくっつけると良さそうです。試してみるとうまくいきました\(^o^)/

Android Studio 2.2.1
Gradle plugin 2.2.1
Android SDK: Build Tool: 24.0.3, Compiler: 24
で確認しました。まぁ将来また仕様が変わるかもしれへんけど。

という事でマージしているAndroidライブラリからパーミッションを除去するにはこんな風にしましょう(^o^)/

ちなみにtools:nodeの後ろは

  1. merge(マージする, デフォルト)
  2. remove(除去する)
  3. replace(すげ替える)
  4. strict(全く同じじゃない時はエラーにする)

の4つらしいです。
マニフェストマージャーのソース(XmlElement.java)のコメントにはこんな風に書いてありました。

Handle 2 elements (of same identity) merging.
higher priority one has a tools:node=”remove”, remove the low priority one
higher priority one has a tools:node=”replace”, replace the low priority one
higher priority one has a tools:node=”strict”, flag the error if not equals.
default or tools:node=”merge”, merge the two elements.

別にパーミッションでなくてもService, Activity, BroadcastReceiver等でもいけるみたいです。
まぁ今のところパーミッション以外に使う用途を思いつかんけど。

と言うかさぁAndroidライブラリにDangerous Permission入れんなよって(。・_・。) ドキュメントに書けばええやん。特にAndroid6以降は動的パーミッションの処理せなあかんねんやし。

お疲れ様でした^^/~

« »

  • スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

%d人のブロガーが「いいね」をつけました。