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
0
750
今のうちからできる_Android_14準備
verno3632
March 07, 2023
Tweet
Share
More Decks by verno3632
See All by verno3632
2022年のポリシー変更を振り返る
verno3632
0
140
Credential Managerを使ってパスワードを入力する
verno3632
0
540
Kotlin化をやりきる / Done Kotlinize
verno3632
0
3.5k
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
Optimizing for Happiness
mojombo
370
69k
The Cost Of JavaScript in 2023
addyosmani
16
3.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
243
12k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
It's Worth the Effort
3n
180
27k
Unsuck your backbone
ammeep
663
57k
Visualization
eitanlees
136
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
20
1.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
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にする