Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今のうちからできる_Android_14準備
Search
verno3632
March 07, 2023
1
1.2k
今のうちからできる_Android_14準備
verno3632
March 07, 2023
Tweet
Share
More Decks by verno3632
See All by verno3632
2022年のポリシー変更を振り返る
verno3632
0
170
Credential Managerを使ってパスワードを入力する
verno3632
0
700
Kotlin化をやりきる / Done Kotlinize
verno3632
0
3.7k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Code Reviewing Like a Champion
maltzj
521
39k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Optimizing for Happiness
mojombo
376
70k
How to train your dragon (web standard)
notwaldorf
88
5.8k
Side Projects
sachag
452
42k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Scaling GitHub
holman
459
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
18
2.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Building Your Own Lightsaber
phodgson
104
6.1k
Transcript
今のうちからできる Android 14準備 YUMEMI.grow Mobile #1 pixiv Inc. verno3632 2023.3.7
2 自己紹介 • ピクシブ株式会社 / pixiv • Android • 趣味
: レンタカー借りてドライブ (ペーパー10 年目) verno3632
4/6(木) 勉強会やります! 3
Android 14 Developer Preview1出ましたね 4
新バージョン対応しなきゃ 5
6 新OSがでたらやること • 新OSの端末で既存アプリが動くようにする • 新OS向けにビルドする
7 新OSの端末で既存アプリが動くようにする • targetSdkVersionは変えない • Android 14 で動くすべてのアプリに影響 の箇所を考慮 ◦
https://developer.android.com/about/versions/14/behavior-changes-all • OSが最終リリースするまでにやっておくべきこと
8 新OS向けにビルドする • targetSdkVersionを変える • Android 14 をターゲットとするアプリに影響 の箇所を考慮 ◦
https://developer.android.com/about/versions/14/behavior-changes-14 • OSが最終リリース後対応完了し次第アプリをリリースする
9 最終リリースするまでのスケジュール • Android 14はDeveloper Preview 1が出たばかり ◦ 例年通りだと半年ほど •
仕様が変更される可能性がある
10 例: Android 13 通知権限 • アプリが通知を送信するのに、ユーザーによる権限許可が必要になった • 最終リリース ◦
以前からアプリを使っていてAndroid 13にアップデートすると権限が自動的に付与さ れる仕様 • Developer Preview ◦ 一時的な通知権限が付与される ◦ その間はユーザーによる権限許可を求めるダイアログが出続ける
仕様変更あるならとりあえず置いとこ 11
12 今からできること • Developer Preview で動かしてみる • 変更が予定される箇所の影響範囲を小さくする
13 Developer Preview で動かしてみる • Android 14端末を用意 ◦ PixelにAndroid 14をダウンロードする
◦ エミュレータを使う • 既存のアプリをインストール・動作確認 • 新OSの最終リリースまで仕様が確定しない
14 変更が予想される箇所の影響範囲を小さくする • 推奨されない書き方を予め辞めておく • 両方の項目について、新OSの最終リリースを待たずにリリースできるものが存在 ◦ Android 14 で動くすべてのアプリに影響
◦ Android 14 をターゲットとするアプリに影響
Android 14 で動くすべてのアプリに影響 15
16 Android 14で動くすべてのアプリに影響 • SCHEDULE_EXACT_ALARM権限がデフォルト拒否 • アプリがキャッシュ状態でコンテキストに登録されたブロードキャストはキューイングされる • 23未満をtargetとするアプリをインストールできない •
フォントサイズが200%までサポート
17 Android 14で動くすべてのアプリに影響 • SCHEDULE_EXACT_ALARM権限がデフォルト拒否 • アプリがキャッシュ状態でコンテキストに登録されたブロードキャストはキューイングされる • 23未満をtargetとするアプリをインストールできない •
フォントサイズが200%までサポート
18 SCHEDULE_EXACT_ALARM権限がデフォルト拒否 • 対象 ◦ SCHEDULE_EXACT_ALARM権限を利用 ▪ 以下のメソッドで必要 • AlarmManager.setExact()
• .setExactAndAllowWhileIdle() • .setAlarmClock()
19 SCHEDULE_EXACT_ALARM権限がデフォルト拒否 • SCHEDULE_EXACT_ALARM ◦ Android 12で導入 ◦ 正確な時刻にアラームを出すための権限 •
Android 14ではデフォルトでdeny
20 SCHEDULE_EXACT_ALARM権限: 対応 • 場合分け ◦ 実は正確な時刻は必要ない場合 ◦ アラームやカレンダーアプリなど典型的なユースケースの場合 ◦
やはり正確な時刻でなければいけない場合
21 SCHEDULE_EXACT_ALARM権限: 対応 • 実は正確な時刻は必要ない場合 ◦ WorkManager ▪ アプリのアップデートやログのアップデート等のバックグラウンド処理 ◦
.set() .setAndAllowWhileIdle() .setWindow() といったメソッド ▪ おおよその時間でアラームを出す・アクションを起こす
22 SCHEDULE_EXACT_ALARM権限: 対応 • アラームやカレンダーアプリなど典型的なユースケースの場合 ◦ USE_EXACT_ALARM権限を使う ▪ Android 13から導入
▪ ユーザーが設定する必要がない ◦ Play Storeでの審査が存在する ▪ ユーザー向けのコア機能で利用していると認められる
23 SCHEDULE_EXACT_ALARM権限: 対応 • 正確な時刻が必要 ◦ SCHEDULE_EXACT_ALARM権限を求める ◦ 権限があるかのチェック・なかったら権限設定画面へ遷移
Android 14 をターゲットとするアプリに 影響 24
25 Android 14をターゲットとするアプリに影響 • Foreground Service に typeが必要 • 暗黙的・pending
intentに対する制限 • コンテキスト登録されたブロードキャストレシーバーに exportが必要 • Dynamic Code Loadingで読むファイルを読み取り専用に
26 Android 14をターゲットとするアプリに影響 • Foreground Service に typeが必要 • 暗黙的・pending
intentに対する制限 • コンテキスト登録されたブロードキャストレシーバーに exportが必要 • Dynamic Code Loadingで読むファイルを読み取り専用に
27 Foreground Service に typeが必要 • 対象 ◦ Foreground Serviceを利用している
• 対応 ◦ typeを指定する ◦ WorkManagerを使う
28 Foreground Service Type: typeを指定 • Android 10で定義 ◦ dataSync,
connectedDevice, location, mediaPlayback, mediaProjection • Android 11で定義 ◦ camera, microphone
29 Foreground Service Type: WorkManagerを 使う • typeに当てはまるものがない場合、可能なら WorkManagerに移行 •
それ以外はAndroid 14で導入されるものに移行 ◦ 新type ▪ fileManagement, health, phoneCall, remoteMessaging, shortService ◦ user-initiated data transfer jobs ▪ 長時間かかるユーザー初期化時のデータダウンロードなどに使える ▪ JobInfoの設定が増える
30 Foreground Service : 余談 • Android 14からそれぞれのtypeごとに権限が必要なようです
31 暗黙的intentに対する制限 • 対象 ◦ 暗黙的intentでexportedでないコンポーネントで呼び出す
32 暗黙的intentに対する制限 • 対応 ◦ 明示的インテントで呼び出す ◦ コンポーネントを外部に公開する
33 コンテキスト登録されたブロードキャストレシー バーにexportが必要 • 対象 ◦ exportのフラグを指定していないコンテキスト登録されたレシーバーを利用 ◦ ただしネットワーク状態の変更等のシステムブロードキャストは例外 •
対応 ◦ RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTEDを宣言する
34 Dynamic Code Loadingで読むファイルを ReadOnlyに • 対象 ◦ APK外のコードを読み込んでいる •
対応 ◦ そもそもDCLをやめる ◦ ファイルをReadOnlyにする
35 まとめ • Android 14端末を用意しなくてもできる準備がある ◦ SCHEDULE_EXACT_ALARMをやめる ◦ ForegroundService にtypeをつける
◦ exporedにしたコンポーネントにのみ暗黙的な intentを投げる ◦ コンテキスト登録されたブロードキャストレシーバーに exportをつける ◦ Dynamic Code Loadingをやめる/ReadOnlyにする