はじめに
こんにちは。Androidエンジニアの佐藤です。
今回は、 あすけんのアプリをAndroid16(targetSdkVersion=36)に対応しましたので、そのレポートになります。
私たちのチームでは、まずは誰かがざっと調査し、チームメンバーへ共有してブラッシュアップしていきます。
変更点の確認
ということで、まずは私が変更点のチェックから。
公式のリファレンスはこちらになります。
今回の変更に関して、あすけんで特に要チェックな事項は以下でした。
それぞれ見ていきます。
ヘルスコネクト権限変更
https://developer.android.com/about/versions/16/behavior-changes-16?hl=ja#health-fitness-permissions
私たちのアプリではヘルスコネクトを使用して、他アプリとデータ連携しています。
ただ、今回の変更はセンサー周りを扱うアプリへの変更でしたので、対応不要でした。
画面の縦固定が無視される
はい、きました。
ついにこの設定が無効化されてしまう。
あすけんも、全ての画面を縦固定にしていますので、対応が必要か、、、
と騒いでいたら、どうやら今回は大型デバイスのみのようです。
最小幅が 600 dp 以上のデバイスに適用され、次のように定義されます。 ・タブレット ・大型画面の折りたたみ式デバイスのインナー ディスプレイ ・デスクトップ ウィンドウ(すべてのフォーム ファクタ)あすけんでは、今のところ、大型デバイスでの利用は想定されず、一旦この対応は保留としました。
予測型「戻る」ジェスチャーのサポート(デフォルト有効)
https://developer.android.com/about/versions/16/behavior-changes-16?hl=ja#predictive-back
Android 16(API レベル 36)以上をターゲットとし、 Android 16 以降のデバイスで実行されるアプリの場合、 予測型「戻る」システム アニメーション(ホーム画面への戻る、タスク間、アクティビティ間) はデフォルトで有効になっています。予測型「戻る」ってなんだろう?と実際に動作確認してみると、ちらっと戻る先の画面が見えるんですね。
https://developer.android.com/about/versions/16/images/cross-activity.mp4
これがデフォルトで有効になると。
対応が必要そうです。
戻る操作への対応
予測型「戻る」への対応ですが、あすけんのアプリで動作確認すると、いくつかの画面で正常に動作しなくなっている箇所がありました。
- 戻る操作を行なっても無反応
- 戻る操作すると、戻った先の画面が空白
公式ページをよく確認すると下記の記述あり。
https://developer.android.com/about/versions/16/behavior-changes-16?hl=ja#predictive-back
また、onBackPressed は呼び出されず、KeyEvent.KEYCODE_BACK はディスパッチされなくなります。
よって、onBackPressedの箇所をonBackPressedDispatcherへ置き換えました。
// 戻る操作の制御 onBackPressedDispatcher.addCallback(this) { // ここにやりたいこと記載 }
他に、OnBackInvokedCallback を使用する方法でも対応可能なようですが、OSバージョンによって分岐が必要なことと、あすけんでは既に他箇所でonBackPressedDispatcher の使用実績があったので、こちらを採用しました。
一応、オプトアウトも可能なようです。
(時限的措置かと判断し、あすけんではこの対応は行いませんでした)
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
まとめ
以上で、無事にtargetSdkVersionを36へ対応することができました。
今までであれば、秋以降に対応していましたが、今年からOSリリースのサイクルが変更され、
少し早めの対応になりました。
今回は、大きな修正はなくシンプルに対応を進められました。
日頃から可能な限りメンテナンスを行いながら機能開発に取り組んでいるので、その点が功を奏したと思います。
ただ、OSのバージョンアップ対応は、影響が大きく不具合がでやすいので、しっかり焦らずに進めたいですね。
採用について
askenではエンジニアを絶賛募集中です。
まずはカジュアルにお話しできればと思いますので、ぜひお気軽にご連絡ください!
https://hrmos.co/pages/asken/jobs