【Google I/O 2023】What's new in Android
What's new in Android
Privacy & Security (0:46~)
Android 14 での変更点について
Partial media access (1:08~)
- アプリがパーミッションをリクエストした際、ユーザーはメディアへの部分的なアクセスを許可でき、許可したもののみ MediaStore でアクセス可能
- READ_MEDIA_IMAGES, READ_MEDIA_VIDEOS, READ_MEDIA_VISUAL_USER_SELECTED
- 複雑さを回避するために、ストレージアクセスへの許可をするのではなく、Photo Picker を使うことを推奨
Safety information (1:38~)
- 位置情報のパーミッション許可のダイアログにクリック可能なセクションを表示
- アプリは位置情報データをサードパーティに共有することが概要として記載されている
- このセクション部分をクリックすると、アプリがなぜデータを共有するかが表示され、ユーザーが理由を理解できるようになっている
Full Screen Intent Notifications (2:03~)
- Android 14 から、アプリは Full Screen Intent のパーミッションのチェックとユーザーからのリクエストが必要になる
-
android.permission.USE_FULL_SCREEN_INTENT
のパーミッションが必要 - ユーザーは設定画面でパーミッションの ON / OFF ができる
-
- ターゲット SDK によらず通話アプリとアラームアプリのみが Full Screen Intent を使用する権限を持つべきというように、App store のポリシーが変更される
公開されていないコンポーネントに対して明示的な Intent を作る (2:44~)
val intent = Intent("com.example.app.PAY")
intent.setPackage("com.example.app")
startActivity(intent)
ブロードキャストレシーバーに対するエクスポート動作の指定 (2:50~)
Targte SDK バージョンが34 の場合、システムのブロードキャストのためではないレシーバーを実行時に登録する際に RECEIVER_EXPORTED
か RECEIVER_NOT_EXPORTED
を指定する。
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_EXPORTED)
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
Target SDK バージョン 23 未満のアプリはインストール不可 (3:00~)
表題の通り。
Partial Screensharing (3:20~)
画面全体を共有するのではなく、特定のアプリのみを共有できる。 何らかのアプリとビデオ通話といったマルチタスクのアプリなどに有効。
// 今まで
val manager = getSystemService<MediaProjectionManager>()
val intent = manager?.createScreenCaptureIntent()
// Android 14
val manager = getSystemService<MediaProjectionManager>()
val intent = manager?.createScreenCaptureIntent(
MediaProjectionConfig.createConfigForUserChoice()
)
// or
val intent = manager?.createScreenCaptureIntent(
MediaProjectionConfig.createConfigForDefaultDisplay()
)
Android 14 では MediaProjection のコールバックに2つのメソッドが導入された。
object : MediaProjection.Callback() {
override fun onCapturedContentResize(width: Int, height: Int) {
// ...
}
override fun onCapturedContentVisibilityChanged(isVisible: Boolean) {
// ...
}
}
Health Connect (4:11~)
アプリは Health Connect で端末上にあるユーザーのヘルスデータへアクセスできる。
これによってユーザーはヘルスデータを一箇所で見る、プライバシーコントロールを設定する、お気に入りのアプリ間でデータを教諭する、といったことができる。
詳細は What's new in Android Health のセッションを参照。
Reduce reliance on passwords with passkey support (4:52~)
- Android 14 からパスワードなしで認証できるパスキーがサポート
- Credential Manager ではパスキーに加え従来のパスワード、フェデレーションによるサインイン方式を統合
- 現状アルファ版の Jetpack Credential Manager ライブラリでは Android 5 以上からパスキーをサポート
- 詳細は How to reduce reliance on passwords in Android apps with passkey support のセッションを参照
Privacy Sandbox (6:27~)
- プライバシーサンドボックスとは、モバイルデバイスのユーザーのプライバシーを強化し、広告の品質を維持することに焦点を当てている
- 2つの developer プログラムがある
- Developer Preview
- Beta Program
- Privacy Sandbox の API の影響をテストするための新しいツールをリリース
- Privacy Sandbox を簡単に統合するための Jetpack のライブラリも提供
androidx.privacysandbox.ads:ads-adservices:1.0.0-alpha01
Attribution across mobile web browsers and Android apps (7:24~)
- Web とアプリ間のアトリビューションは現在 Chrome と Android で利用可能
- アプリでコンバージョンが発生した場合に、Web で表示された広告を評価したり、その逆も可能
- 詳細は以下のセッションを確認
Form factors (8:06~)
- ユーザーは全てのアプリをマルチウィンドウモードで表示でき、またアプリの設定に関係なくデバイスを回転させることができる
- アプリが固定の向きやリサイズできないように制限した場合、アプリは互換モードになりシステムによってレターボックス化される
- goo.gle/letterboxing
- Activity の向きは固定せずにリサイズ可能にしておくことを推奨
- 折りたたみ端末やレターボックスによって、アスペクト比や UI の向きとカメラセンサーの向きが一致するとは限らなくなった
- goo.gle/introducing-camera-viewfinder
- Jetpack の CameraX、Camera2 ではこの辺のハンドリングをサポート
- 詳細は Building high quality Android camera experiences のセッションをチェック
- 大きい画面サイズや折りたたみ端末の開発については How to build great Android apps for large screens and foldables のセッションをチェック
Activity embedding (10:16~)
- 複数の Activity を持つアプリでは、activity embedding によって一つ以上の Activity を並べて表示することができるので、アダプティブレイアウトの実装が簡単になる
- これは XML によって設定でき、変更が少なく、activity embedding がサポートされていなければ既存の動作のままになる
- Optimize activity-based apps for large screens のセッションをチェック
Keyboard support (10:49~)
Jetpack Glance (12:17~)
- Jetpack Glance は現在ベータ版
- ウィジェットを Jetpack Compose で構築できる
Jetpack Compose (12:46~)
Compose for TV がアルファ版
- コンテンツのスクロールとかフォーカスなどの TV 特有のユースケースをサポート
- What's new with TV and intro to Compose のセッションをチェック
Modifiers (14:02~)
- 昨年10月に modifier を新しくより効率的なシステムにするためのマイグレーションを開始 => 2023年5月にリリース
- 平均して22%のパフォーマンス改善
- modifier を使うにあたっての変更はなく、今まで通り使える
Text の改善 (14:24~)
- 最新の emoji バージョンのサポート
- スクロール可能なコンテナ内でキーボードを表示するとすぐに非表示になるという TextField の不具合を修正
- テキストのカスタマイズ
-
TextStyle.drawStyle
を使ったアウトラインテキスト -
TextStyle.hyphens
を使ったハイフンのサポート -
TextStyle.lineBreak
を使った改行の振る舞いの設定 -
minLines
による表示できる最小の行の設定 -
Modifier.basicMarquee
によるテキストの移動
-
新しいレイアウト (14:40~)
- Pager
- Flow Layout
Compose のライブラリ (14:58~)
- Glide
- Google Maps
Compose Material 3 (15:08~)
- バージョン1.1
- 新しいコンポーネント
- Bottom sheets
- Date/time picker
- Searchbar
- Tooltips
- など
- New codelab
- Material Design 3 in Compose
- Build modern Android apps with Material You for Compose のセッションをチェック
Compose Tools in Giraffe (15:37~)
- Live Edit がデフォルトで有効
-
@Preview
の UX の改善 - Animation Preview のサポート
Compose Tools in Hedgehog (15:49~)
- デバッガで Compose State の情報を表示
- Multipreview のテンプレート
- Visual Lint
-
@Preview
での Accessibility Test Framework のサポート -
@Preview
でのスクリーンショットテスト - Debugging Jetpack Compose のセッションをチェック
Foreground Services (16:25~)
- Android 14 をターゲットにしたアプリでは、Foreground Service の実行のためにタイプの指定と、タイプごとの Foreground Service のパーミッションが必須になった
- Android 14 では Foreground Service の代わりとして、ユーザーが開始したデータ転送を目的とした API を導入
以下は Foreground Service のタイプの指定と、タイプによるパーミッションの指定の例。
FOREGROUND_SERVICE
のパーミッションは API 28 から追加されている。
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH" />
<application ...>
<service
android:name=".MyFitnessService"
android:foregroundServiceType="health"
android:exported="false"
android:process=":trackerProcess">
</service>
</application>
</manifest>
Machine Learning
ML Kit on Android (17:38~)
- API の更新
- Barcode
- Pose detection
- Text recognition
- Digital ink recognition
- Smart Reply
- 新しい API
- Face mesh (beta)
- Document scanner (Q4)
Android's custom ML stack
カスタムの ML スタックを使うことで自身の ML モデルを導入でき、APK のサイズを減らすことができる。
3つの主な更新がある。
- TensorFlow Lite が Google Play services に
- デリゲートによる Hardware acceleration
- Acceleration Service がベータに
詳細は How to build smarter Android apps with on-device Machine Learning のセッションを参照。
Android Runtime (ART) 14 (18:27~)
- Java 17 の言語機能をサポート
- 新しいガベージコレクタ
- コードサイズを10%削減
- ヒープメモリのピークを最大50%まで削減
- 現在の ART のバージョンである ART 13 では、Android 12 の端末のアップデートに対応し、アプリの起動時間を最大30%改善した
- ART 14 では Android 12 以降の端末が最新の ART の機能を受けることができる
Kotlin (19:14~)
- 最新の情報は What's new in Kotlin for Android のセッションをチェック
- 新しい K2 コンパイラはビルド速度が2倍まで改善
- Android Studio Giraffe から Gradle のビルドスクリプトがデフォルトで Kotlin になった
- kapt より KSP (Kotlin Symbol Processing) を使うとよい
- Kotlin Multiplatform のサポートを継続して取り組んでいる
Predictive Back (19:45~)
- Android 13 からジェスチャーナビゲーションの改善のために predictive back が導入された
- スワイプで戻る際の戻り先のプレビューをユーザーに表示する
- Android 14 ではアプリに predictive back のアニメーションを追加
- Activity から Activity へ戻るアニメーションを含む
- Android 14 にマイグレーションする際に、各 Activity ごとにオプトインできる
-
android:enableOnBackInvokedCallback=true|false
を各 Activity ごとに設定していく
-
- AndroidX の Activity のバージョンを最新にし、Compose であれば
BackHandler
を、View システムであればonBackPressed
コールバックを使う - 詳細は Building for the future of Android のセッションをチェック
New design hub (20:56~)
- d.android.com/design/ui
- Android のデザインのためのドキュメントで starter kits をダウンロードできる
Ultra HDR (21:15~)
- Android 14 で HDR 10ビット圧縮静止画像がサポートされた
- これにより写真を撮影する際にセンサーからの情報をより多く保持でき、結果的に画質が向上する
- Ultra HDR のために後方互換性のある JPEG フォーマットを設計中
Media3 (21:36~)
- Jetpack の Media3 ライブラリの 1.0 が最近リリースされた
- HDR フォーマットのサポート
- ビデオ編集
- transcoding APIs
- ExoPlayer は Media3 に含まれる
- Media や Camera に関するセッションは以下をチェック
Personalization (22:22~)
Android Studio Giraffe 以降ではロケールファイルの自動生成をサポートし、Android 13 から導入されたアプリごとの言語設定機能の統合を簡単にする。
android {
androidResources {
generateLocaleConfig true
}
}
Android 14 では、新しい LocaleManager API を使ってユーザーが設定画面でより関連のある言語を設定するための設定ができる。
localeManager.overrideLocaleConfig = LocaleConfig(
LocaleList.forLanguageTags(regional_locales)
)
また Android 14 では、ユーザーは好みの気温の単位や最初の週の選択をすることができる。
LocalePreferences.getTemperatureUnit()
LocalePreferences.getFirstDayOfWeek()
Supporting Grammatical Inflection (23:22~)
Android 14 から Grammatical Inflection API が追加された。
これによって性別によって区別された文字列リソースを作成できる。
詳細は Building for the future of Android のセッションをチェック。
Sharing updates (23:59~)
- システムのシェアのシートが app actions のカスタマイズにサポート
Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS
- 新しいプレビュー UI
- カルーセルで複数の画像、ビデオサムネイルをプレビューでき、画像とリンクの両方をシェアできる
- ダイレクトシェアの共有先のランキング品質を向上
- ダイレクトシェアのランキングの改善のため、アプリは
ShortcutInfoCompat.Builder#addCapabilityBinding("actions.intent.SEND_MESSAGE")
でレポートできるようになった
- ダイレクトシェアのランキングの改善のため、アプリは
Non-linear font scaling (24:42~)
- Android 14 から最大200%までの非線形フォントスケーリングが追加された
- 大きいフォントサイズほどあまり拡大されなくなる
- テキストサイズは SP 単位で指定する
- sp と px 間の変換は TypedValue の
applyDimension()
とderiveDimension()
を使う
New Accessibility APIs (25:00~)
詳細は What's new in Android Accessibility をチェック。
Android Studio
Android Studio Giraffe (25:47~)
- Device Explorer
- New UI (Opt-in)
- 新規プロジェクト時にビルドスクリプトの Kotlin スクリプトと Gradle Version Catalog がオプトイン
- Android Gradle Plugin によるアプリごとの言語設定のサポート
- Live Edit for Jetpack Compose
- Gradle Version Catalog のサポート
- Compose Animation Preview
- バグレポートの統合
Android Studio Hedgehog (26:06~)
- Studio Bot
- Lite Mode
- Build Analyzer
- Compose Visual Lint & Accessibility Test
- Host-side Screenshot Testing
- Gradle Managed Devices on Firebase
- Baseling Profiles Gradle Plugin
- goo.gle/android-perf-news-io23
- R8 と Dex Reordering によるアプリの起動時間と全体の UI パフォーマンスの改善
- 起動時に必要となるコードをプライマリの dex ファイルに配置し、起動時以外のコードを別の dex ファイルに配置
- App Quality Insights + Android Vitals
- Espresso Device API
- Power profiler
- Layout inspector integrations into running device window
詳細は What's new in Android development tools のセッションをチェック。
Architecture
Kotlin Maltiplatform Jetpack Libraries (28:28~)
- Annotations 1.7.0-alpha02
- Collections 1.3.0-alpha04
- DataStore 1.1.0-alpha03
Architecture Guidance (28:43~)
- 新しいアーキテクチャガイドを追加
- Configuration Changes のハンドリングのベストプラクティスなど
- goo.gle/android-arch
- Best practices for saving UI state on Android のセッションをチェック
Paging Test (29:20~)
- 新しい Paging のテスト API
- goo.gle/paging-test