Android 4.4で起こった既存アプリの不具合まとめ

自分用のメモです。

■ Bitmap.Config.ARGB_4444で読み込んだ画像が表示されない


対処:Android 4.4以降では、Bitmap.Config.ARGB_8888を使うことで解決


以下、詳細


DungeonDiaryのユーザから「ダンジョン画面が表示されない」という不具合が報告された。
エミュレータで調べてみると、Android 4.3までは問題なく表示されるが、4.4では何故か表示されない。
描画周りの挙動をデバッガで追ってみたが、おかしな挙動になっている箇所が見つからない。
そこで試しに、BitmapFactory.decodeResourceでビットマップを読み込む際に利用するオプション、Bitmap.Config.ARGB_4444 を 8888 に変えてみたら、表示されるようになった。
はて?と思って調べてみると、Bitmap.Config.ARGB_4444 そのものが、API13から「非推奨」になっている。
また、KITKAT(4.4)では、「Note: as of KITKAT, any bitmap created with this configuration will be created using ARGB_8888 instead.」と注意書きがあるので、読み込み時に設定がねじまげられ、問題が起きたものと思われる(適当です)。


同様の現象がGarden Diaryでも起きていたので(アイテムアイコン系が非表示になった)、同じように対処した。


参考:
http://developer.android.com/intl/ja/reference/android/graphics/Bitmap.Config.html

-

■ 外部メディアイメージの参照で落ちる


対処:権限 android.permission.READ_EXTERNAL_STORAGE を追加する


以下、詳細


Shortcut Imageのエラーレポートで、ウィジェットに設定した画像を開く際に落ちているものがあった。ログを見ると「android.permission.READ_EXTERNAL_STORAGE」権限で引っかかって落ちている。
android.permission.READ_EXTERNAL_STORAGE 権限は、API16から追加された比較的新しい権限で、ドキュメントを見ると、API19(Android 4.4のこと)から施行されると記載されている。つまり、Android 4.4以降では、この権限がないと、SDカード上のファイルの読み込みすらできなくなるということらしい。
私の環境の4.4エミュレータは、何故かSDへ画像をコピー→メディアを更新してもエラーになるばかりで確認できなかったが、4.3エミュレータで「Setting→Developer Options→Protect SD card」にチェックを入れたところ、落ちる現象が再現できた。
そこで、Shortcut Imageでは、4.4向けに権限を追加して対処した。


参考:
http://developer.android.com/intl/ja/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE
http://developer.android.com/intl/ja/about/versions/android-4.4.html#BehaviorStorage