すでにリリース済みのアプリに対して某広告系ライブラリを入れた時に突如パーミッション関係が軒並みDENIEDを返すようになりパニックになったので自分のための備忘録として。
現象
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
もしくはその後、requestPermission
をコールした後にonRequestPermissionsResult
で戻ってきた後の第三引数が全部PERMISSION_DENIEDになる。
ちなみに勿論パーミッションは許可された状態で起きる。
今回の場合はすでにリリース済みのアプリで、このあたりは元々元気に動いていたのに急にスンッ・・・とおかしくなったので事態の把握は楽でした。
原因と対応
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest.xml
で定義しているpermissionは上記のような定義だったのだけれど・・・
Merged Manifest
のほうで確認してみると
/(^o^)\・・・
そう。ライブラリ側でuses-permission
にmaxSdkVersion
が有り難くも設定されていたのでそもそもmaxSdkVersion
を超えるSDKバージョンの場合はuses-permission
の定義は無かったことになる。
すなわちcheckSelfPermission
がDENIEDなのは当然の結果だった・・・
ということで、
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace" />
node="replase"
指定を追加して、有り難く設定されているライブラリ側のmaxSdkVersion
は無視させて頂くことにした。
教訓
新しいライブラリをリリース済みアプリに入れる時は、Merged Manifest
がどうなっているかちゃんとチェックしようね!ぜったいだよ!