Tabelog Tech Blog

食べログの開発者による技術ブログです

Android14(APIレベル34)への対応について

この記事は 食べログアドベントカレンダー2023 の17日目の記事です。

初めまして、食べログのアプリ基盤チームでAndroidアプリを担当しているtomotakasgです。
普段はAndroidアプリのリファクタリングや開発環境(IDEやCI/CDなど)の整備、ライブラリ選定等の業務をしています。

今回は私が担当している、Android14(APIレベル34 - Upside Down Cake)対応について、食べログアプリで実際に影響のあったもの、修正が必要になったものをいくつかご紹介します。
本当はリリース後の記事にしたかったのですが対応中の情報となっています。 情報源にはなると思いますので、ご参考になれば幸いです。

目次

前置き

米Googleは10月4日(現地時間)、モバイル向け新OS「Android 14」を正式にリリースしました。
昨今の更新にならい、セキュリティ強化・厳格化が中心となっているようでした。

本記事を書くにあたり以下URLを参考にしています。
本記事を一読した後に、以下の記事もご覧いただけるとより理解が深まるかと思います。

対応内容

OpenJDK 17による動作確認

正規表現の変更にある通り、java.util.regex.Matcherが変更を加えられています。
場合によってはIllegalArgumentExceptionをスローするようになったため、正規表現を使用する領域についてアプリを必ずテストしてくださいという内容があります。

アプリを確認したところ、関連しそうな部分はあったものの問題なく動作していることもあり、修正対応は不要そうでした。

Androidシステム上のGooglePlayからデータセーフティ

データセーフティの観点が追加されています。 一部の権限ダイアログに、アプリの権限を許可する理由をユーザに提示するようになります。
対象の場合、今までの権限ダイアログにクリックできるセクションが追加されています。
権限ダイアログ以外にも通知まわりに影響があるため影響がある場合、デザイナーと共有だけしておいた方が良いでしょう。

BroadcastReceiver の変更

Billingライブラリの更新

BroadcastReceiverの登録の厳格化によりPlay Billing Library(以下、PBL)の更新対応が必要になりました。
利用中のライブラリが古かったため、更新対応しつつ進めることにしました。
Google Play Billing Library リリースノートを見て、5系から6.0.1にすることにました。
影響箇所が少なく少し調整するだけで動くようになったため、対応自体は難しくなかったです。
移行ガイドの概要に以下の記載があった通り、5系の時の実装のまま動作するものが多かったため、対応自体は難しくなかったです。

Google Play Billing Library 6 は、バージョン 5 で導入された新しい定期購入機能を基盤とし、いくつかの改善を行っています。

想定外の課題

Hyperion周りのエラーが発生しました。
デバッグツールのHyperionがAPI34の対応ができていないため、デバッグビルド時にクラッシュするようになります。
issueは報告されておりますが、放置されているように見えました。
メンテナンスも長いことされなくなっているため、一旦ライブラリの利用はやめて代替ツールについて検討する形にしました。

写真や動画への部分的なアクセス権を付与する

写真アクセスの新しい権限で、READ_MEDIA_VISUAL_USER_SELECTEDが追加されました。
システムダイアログの「写真と動画を選択」を利用し、権限選択が写真個別に当てられるようになりました。
以下のようなダイアログが出るようになります。

photo_permission

実はこれ、実装以上にUI変更の影響が大きく既存の権限導線を見直す必要が出てくる可能性があります。

仕様調査

「写真と動画を選択」の動作について、以下のような仕様があるようです。

  • 「写真と動画を選択」を選択すると、設定では「毎回確認する」に該当する
  • 「写真と動画を選択」を選択する
    • 「毎回確認する」に該当するため、権限ダイアログがでるようになる
    • ピッカーが自動で起動する
    • ピッカーで写真を個別に指定し権限を加えると、MediaStore.Images.Mediaが権限を加えたものだけを、返してくれるようになる
    • 権限ダイアログがでる時と、直接ピッカーが開いていくる時がある(?)
      • 最初のメディア選択時の動作にある通り、最初の1回はワンタイムパーミッションとして扱われるようで、2回目のダイアログで「写真と動画を選択する」を選択しないと、権限確認時(requestPermissionのlaunch時)ピッカーが出るような動作にはならないようです
  • ピッカーを直接立ち上げるには?

世情調査

GoogleMapの挙動を見て判断する

挙動だけ確認するとREAD_MEDIA_VISUAL_USER_SELECTEDをスタンダードの権限にしてそうです。
Android13で追加されたPhotoPickerを使うと実装が楽になりそうだなという印象を受けました。

GoogleMapのアプリ情報の権限設定から設定変更すると、Mapアプリの投稿画面の見た目が変わります。

  • 常に全て許可
    • 投稿画面の「写真を追加」のUIが表示されない
    • 画像を直接、写真選択できるようになる
    • この状態から、設定画面で「毎回確認する」を選択する
      • ピッカーが自動で起動する(権限の方ではなくPhotoPickerが起動する)
        • 閉じると、画像を直接選択ができなくなり、「写真を追加」が表示される
    • この状態から、設定画面で「許可しない」を選択する
      • 権限ダイアログが表示される
  • 毎回確認する
    • 権限ダイアログは表示されない
    • 標準のピッカー(PhotoPicker)が表示される
      • 許可ではなく「追加」となるので、権限はコントロールされずに、ピッカーで選択した写真が返ってくる
      • 「写真を追加」が表示されており、PhotoPickerを使っていると思われる
    • 「写真を追加」が表示されるようになる
      • 押下で、標準のピッカー(PhotoPicker)が表示される
    • この状態から、設定画面で「常に全て許可」を選択する
      • 投稿画面の「写真を追加」のUIが表示されず、画像を直接選択できるようになる
    • この状態から、設定画面で「許可しない」を選択する
      • 権限ダイアログが表示される
  • 許可しない
    • 権限ダイアログは表示される
      • この状態で「許可しない」を選択すると、権限ダイアログは表示されない
        • この状態でも「フォルダ」や「写真を追加」から画像の操作は可能
      • 「写真を追加」が表示されており、おそらくPhotoPickerを使っていると思われる
    • この状態から、設定画面で「常に全て許可」を選択する
      • 投稿画面の「写真を追加」のUIが表示されず、画像を直接選択できるようになる
    • この状態から、設定画面で「毎回確認する」を選択する
      • ピッカーが自動で起動する(権限の方ではなくPhotoPickerが起動する)
        • 閉じると、画像を直接選択ができなくなり、「写真を追加」が表示されるようになる
所感

許可しようがしまいが「常に全て許可」と同じような挙動が取れているようにも見えるし、
"許可しない"が失われているようにも見えます。
違和感はありますが、PhotoPickerを利用することによりUX的には一応これが正の形なんだと思います。
権限ダイアログを沢山出さないというのは、ユーザにとっては嬉しいことなので改善になっているのかもしれません。

食べログAndroidはどうしていくのか?

食べログではiOS14対応で先に個別パーミッション対応していることもあり、基本的にはそちらに準拠する形にしようと思います。
ただ、Android仕様の部分もあるため企画・デザイナー含めどうしていくべきか相談は必要になりそうです。
権限の追加だけでなく、UI/UXに関わってくる可能性のある部分なので、皆さんもなるべく早く事前の連携だけでも済ませておいた方が良いと思います。

今後の予想

今後ピッカーは独自実装せずにAndroid13で追加されたPhotoPickerに任せた方が、昨今の厳格化の流れを吸収してくれそうなので運用・保守観点で良いと思います。
移行ガイドのページには権限の状態を永続的に保存しないでくださいや、写真やビデオへのフルアクセスを想定しないでくださいといった内容もあり、権限の取り扱いが繊細になっています。
メディア再選択時の動作 にも、フォトピッカーを使うか、READ_MEDIA_VISUAL_USER_SELECTEDを使用する事が推奨されています。

現状PhotoPickerを自由にカスタマイズするのはできないようです。
今後のアップデートで機能拡張される可能性はありますが、PhotoPickerを利用しない選択をする場合、引き続き写真権限周りの更新は注意しておきたいです。

まとめ・感想

食べログに大きな影響がありそうなのはPBLと写真の権限周りでした。
残念ながら今も格闘中です。
食べログアプリは画像の導線が多いため、対応に時間はかかりそうです。
権限周りはUI/UXに関わってくるので関係ありそうな場合、早めに認識だけはした方がいいと思います。

最近のOS更新については「権限周りの調整ばっかりで面白くないなぁ」と思ってしまうんですが、少しマインドを変え、複雑度は上がるもののユーザにとっては安心できるものになるなら、ユーザのためにも頑張って行くことが大事だなと思考を変えたのが作業のモチベーション向上に繋がりました。
作業難易度の割には評価されないイメージのある更新作業ですが、前向きにOS更新乗り切りましょう!

明日は @sato-tatsuaki-biz の「持続可能な開発組織に必要な文化 6選」です。お楽しみに!

採用情報ページ

食べログはAndroidエンジニアを募集しています。
興味を持っていただいた方はぜひ下記リンクよりご応募お待ちしております!