Open27

Google I/O 2021のAndroid関連動画メモ

tomoya0x00tomoya0x00

What's new in Android | Keynote

https://www.youtube.com/watch?v=D2cU_itNDAI&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=2

  • Android12ではUI全体を大きくオーバーホールしたよ
  • Pixelデバイスでは壁紙からカラーパレットが自動で選択され、システムUIで使用されるよ
    • このカラーパレットはデバイスのデフォルトとして、各アプリからも取得できるよ
    • でも、Pixel以外のデバイスが同様な動きをするとは限らないよ
  • Widget作成のための全くあたら良いAPIを用意したよ
  • スプラッシュ画面のお話し
  • Notificationsのテンプレートを再設計したよ
  • Toastについて
    • 文字数制限とlate limitを導入するよ
  • P-in-Pの改善について
  • コンテンツのぼかしAPI追加
    • setRenderEffectというAPIを追加したよ
  • リップルアニメーションをキラキラさせたよ
    • デフォルトで有効だよ
  • スクロールのストレッチエフェクトを追加したよ
    • これもデフォルトで有効だよ
    • ただし、これはリップルアニメーションと違ってアプリに影響を与える可能性があるよ
  • AVIFという画像フォーマットをサポートしたよ
  • ビデオに関しては自動トランスコード機能を導入したよ
  • Audio-coupled Haptic Playback
    • オーディオトラックから振動パターンを生成できるよ
      • 雨とか足音とか
      • 全部のデバイスで利用できるわけでは無いので注意だよ
  • プライバシー
    • Location
      • Bluetoothデバイススキャンのためだけのpermissionを追加したよ
      • アプリに正確性を下げた位置情報を渡せるようになったよ
    • クリップボード
      • クリップボードにアクセスしている事をToastで表示するようにしたよ
    • foreground restrictions
  • Drag & Drop, Copy & Paste, Keyboard Stickers のハンドル
    • これまではそれぞれ別に処理を実装してハンドルしてあげる必要があったよ
    • 一個のリスナーで処理できるようにしたよ
      • AndroidXでもサポートするけど、少し制限があるよ
  • Macrobenchmarkライブラリをリリースしたよ
  • Wear
    • タイル作成の新しいAPIの話があるよ
  • Android Tools
    • それぞれの動画を見てね!
  • Jetpack
    • それぞれの動画を見てね!
tomoya0x00tomoya0x00

What’s new in Android development tools | Session

https://www.youtube.com/watch?v=WRNWzhrl6-s&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=4

  • Android Studioのバージョン命名規則を変えたよ
    • {Year of IntelliJ Version}.{InteliJ Major Version}.{Studio Major Version}
  • Android Gradle pluginのバージョンとAndroid Studioの要求するバージョンがついに分離されたよ
  • Jetpack Composeのプレビュー表示
    • editorで変更した文字リテラルがほぼリアルタイムに反映されるよ
    • Previewの設定を事細かに設定できるよ
    • ConstraintLayout
      • Blueprint表示や制約プレビューをサポートだよ
    • Interactive modeでアニメーション再生できるよ
  • Animator Drawable、AS上でアニメを再生できるよ
  • Androidエミュレーターでフォルダブル端末の画面を折る動きを再現できるよ
  • Wear OS関係
    • デバイスエミュレーターとのペアリングが簡単になったよ
    • エミュレーターで心拍センサーなどを模倣できるようになったよ
  • Android TV
    • エミュレーターイメージが提供されるよ
    • リモコンのインターフェースも提供されるよ
  • Test Retention
    • 失敗したInstrumentation testsのエミュレータースナップショットを保持できるよ
  • Android Profiler
    • Memory Profilerが強化されたよ
  • WorkManagerのデバッグ機能が追加されたよ
  • non-transitive R classesのリファクタリング機能
    • 別moduleで同じidを使っている場合にユニークなIDに変更する機能??
tomoya0x00tomoya0x00

What’s new in Jetpack | Session

https://www.youtube.com/watch?v=xeQ9faYJktM&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=5

  • Jetpack librariesでのBetaの扱いを若干変更したよ
    • No API changesではなく、クリティカルな問題 or コミュニティーからのフィードバックがあればAPI変更もあり得るよ
  • 実験的なAPIだとわかるように専用のアノテーションを付与しているよ
  • CameraX
    • 最新のアルファバージョンではCameraViewにCameraControllerを分割したよ
  • AppSearchライブラリ
    • 全文検索とかできるよ
  • DataStore
    • データマイグレーション機能もあるよ
    • SharedPreferenceからのマイグレーションもできるよ
  • Security Crypto
    • DataStoreとのインテグレーションが予定されているよ
  • Hilt
    • ViewModelでSavedStateHandleがデフォルトの依存関係として追加されたよ
    • @HiltWorker + AssistedInjectでWorkManagerでの依存性注入も楽ちんだよ
    • TestInstallInアノテーションでUninstallModulesアノテーションに比べてテストのパフォーマンス改善だよ
  • WorkManager
    • 2.7からAndroid Sのforeground restrictionsの対応が入っているよ
    • InspectorがArcticFoxで利用できるよ
  • Room
    • enumとRxJava3のビルトインサポートがあるよ
    • QueryCallbackクラスを導入したので、ロギングなどに使えるよ
    • TypeConverterの制約が緩和されたよ
  • ConstraintLayout
    • What's New in Design Toolsを見てね!
  • Fragment
    • 既存のonAttachFragmentを置き換えるFragmentOnAttachListenerを導入したよ
  • Navigation
    • マルチバックスタックをサポートしたよ
  • Google Shortcuts
    • Google Assistantとのインテグレートができるよ
  • EmojiCompat
    • 新しいメジャーバージョンとして2系が出たよ
    • AppCompat 1.4.0 以上に自動で含まれるよ
    • 新しいemojiを動的に読み込み&最新のUnicode仕様に追従するよ
  • Paging
    • 3.0でKotlinに全部書き換え&Flowもサポートだよ
  • Macrobenchmark
    • アプリに起動やスクロールパフォーマンスなどの計測に向いているよ
  • Composeとのインテグレーション
    • Use Jetpack Libraries in Composeを見てね!
  • フォルダブルなどの大画面とWear OSのビデオもぜひ見てね!
tomoya0x00tomoya0x00

State of Kotlin on Android | Session

https://www.youtube.com/watch?v=etLUpHvhNZw&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=7

  • https://developer.android.com/courses/android-basics-kotlin/course を提供しているよ
  • IDEのパフォーマンス改善に力を注いでいるよ
    • Kotlin 1.5ではauto-importの提案が20倍高速になったよ
    • 複雑な依存関係があるプロジェクトではコード補完が2倍高速になったよ
    • 最新バージョンのAndroid StudioとKotlin IDE pluginを使うのがおすすめだよ
  • Compiler
    • Kotlin1.5では新しいJVM IR Backend compilerが有効だよ
  • Libraries
    • Kotlin gRPC implementation
    • Kotlin Protobuf bindings
    • Coroutines Debuggerを導入するよ
    • Kotlin Android Extensionsは段階的に廃止されていくよ
      • parcelizeはkoltin-parcelizeという別のプラグインを作ったので、そっちに移行してね
  • Javaの新しい機能もAndroidで使えるようにしていくよ
  • Android12からART単体でアップデート可能になるよ
tomoya0x00tomoya0x00

What’s new in Android privacy | Session

https://www.youtube.com/watch?v=gTUt9mwfPS8&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=8

  • マイクとカメラへのアクセスインジケーター
    • アクセスしているアプリを簡単に表示出来る
    • そこからApp Permissionページに遷移してpermissionをoffにする事も可能だよ
    • アプリは本当に必要なタイミングになるまでマイクとカメラにアクセスしないことをオススメだよ
  • Privacy dashboard
    • マイク・カメラ・位置情報のアクセス履歴を24時間分、リストで表示できるよ
    • なので、アプリはサードパーティーSDKなどでも不要なデバイスアクセスが無いか確認しようね
      • Android 11で追加したData Access Auditing APIsが便利だよ
  • Clipboard notification
    • アプリがクリップボードからデータを読み取る度にToastで通知するよ
      • データ元が同じアプリであれば、Toastは表示されないよ
  • Approximate location
    • アプリに渡す位置情報を正確なものではなく近似したもの(位置の精度を下げたもの)にできるよ
  • Microphone and camera toggles
    • ユーザーが簡単にマイクとカメラをオフにできるよ
    • 関連して、マイクがミュートの気はモーションセンサーのサンプリングレートが200Hzまでに制限されるよ
  • Guest mode switching
    • 多くの人がデバイスを自分以外と共有するという調査結果があるよ
    • ロック画面から数回タップするだけでゲストモードにできるよ
  • Nearby device permission
    • Bluetootheのスキャンパーミッションと位置情報のパーミッションを分離できるようにしたよ
  • App hibernation
    • 長時間使われていないアプリは、パーミッションだけでは無く他の機能も制限するよ
    • バックグラウンドジョブの実行やプッシュ通知の受信も出来なくなるよ
    • ユーザーがアプリが起動すると、この状態は解除されるよ
  • Scoped storage
    • 特別なアプリ用に、共有ストレージのすべてのファイルの管理を許可するパーミッションを用意したよ
    • 申告フォームで申請しないと、Play Storeから削除されるよ
  • Package visibility
    • QUERY_ALL_PACKAGESパーミッションを宣言していない限り、インストールされているアプリのリストは取得できないよ
    • 詳細はPlay ConsoleのWebサイトを見てね
  • Private Compute Core
    • Android OSの中で分離された場所だよ
      • 他のアプリやネットワークからも分離されているよ
    • ここでセンシティブなデータを安全に処理できるよ
    • 例えばSmart Replyの提案機能はPrivate Compute Coreの中に有るよ
    • オープンソースのAPKと通信するよ
      • オープンソースなので研究者などが調査できるよ
tomoya0x00tomoya0x00

Now is the time: What's new with Wear

https://www.youtube.com/watch?v=kYIb9g1r4lw&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=9

  • Major improvements
    • Task switching
      • ボタンのショートカットで簡単に一般的なタスクにアクセスできるよ
    • Tiles
    • Googleアプリの改善
      • Google Mapsはターンバイターン方式のナビで案内してくれるよ
        • 家にスマホを置いたまま、Wear単体でナビを継続可能になるよ
      • Google Pay
        • for Wearは26ヶ国で利用できるようになるよ
      • YouTube Music
        • オフライン&スマホが無くても音楽再生可能だよ
      • Fitbit
        • Wear上で使えるようになるよ
  • Samsungとの協働
    • ウォッチフェイスのデザイン機能をWearに持ってきてくれるよ
  • Performance boost
    • アプリの起動が最大30%高速化するよ
    • アニメーションがよりスムーズになるよ
  • New APIs
    • Tiles
    • Ongoing Activity
      • アプリ間の行き来を楽にするよ
      • バックグラウンドでのアプリの動作をサポートするよ
    • Watch Faces
      • Kotlin-first な APIを提供するよ
    • Complications
      • Kotlin-first な APIを提供するよ
    • Input
    • Curved Text
    • Health Services
      • 一貫した健康に関するデータの収集・提供をおこなうよ
      • 将来的には運動履歴へのアクセスなどもできるようになるよ
    • Remote Interactions
      • Kotlin-first な APIを提供するよ
  • Wearエミュレーター
    • Android Studioから簡単にペアリングできるようになったよ
    • 心拍センサーなどのエミュレートもできるよ
  • Google Play
    • Wear用のアプリを検索して簡単にインストールできるようになるよ
  • Spotifyの事例
    • 外でWearで音楽を聴いたまま、家に返ってきたらスピーカーで再生するといったシームレスな体験ができるよ
tomoya0x00tomoya0x00

What’s new in foldables, tablets, and large screens | Session

https://www.youtube.com/watch?v=Qkiz3QIPJzk&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=10

  • Why Large Screens
    • モバイルの急速な発展と共に、画面サイズはエルゴノミクスの限界に到達したよ
    • フォルダブルによって、タブレットサイズの画面がポケットに入るようになるよ
    • 大画面に対応したアプリを作ることで、フォルダブル以外にもChrome OSでも便利に使えるよ
    • 大画面ではアプリがマルチウインドウで使われることが多くなるよ
    • フォルダブルではテーブルトップモードで使われる事もあるよ
      • 動画を見たりビデオ通話したり
    • 例としてDisney+アプリがフォルダブル対応しているよ
    • 他の例は goo.gle/large-screens-case-studies をご参照だよ
  • Large Screen Ready
    • 大画面対応と見なされるための三つのポイント
      • Design for Large Screens
        • Landscapeで使われることが多いから、ちゃんとサポートしようね
        • 600dpi以上の解像度、AdaptiveなMaterial Componentの利用
      • Multi-tasking
        • folding/unfoldingのサポート
        • マルチインスタンス、マルチレジュームのサポート
      • Input Modes
        • キーボード、マウス、スタイラスのサポート
  • Component Updates
    • SlidingPaneLayout
      • Windowサイズを元に、コンテンツを横に並べて表示出来るよ
      • デバイスの折り目やヒンジに合わせてコンテンツを自動配置できるよ
    • Navigation Rail
      • ナビゲーションのボタン達を適切に画面の下に配置したり横に配置したりできるよ
    • Max Width Additions
      • ボタンなどの最大幅を指定できるよ
  • WindowManager Jetpack
    • フォルダブルなどに対応するため、折り目やヒンジなどの変化に関してコールバックを提供するよ
  • ConstraintLayout 2.1
    • ReactiveGuide
      • 折り目の位置を実行時に挿入できるよ
      • レイアウトがこれに合わせて調整できるよ
    • MotionLayout
      • 折り目の位置に合わせたアニメーションができるよ
    • Testing
      • Jetpack Window ManagerのAPIを再構築してテストしやすくしたよ
tomoya0x00tomoya0x00

デザインツールの新機能

https://www.youtube.com/watch?v=B1u7JZ1rLyE&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=11

  • Design Tools
    • Layout Editor
      • アクセシビリティに関する警告がリアルタイムに表示されるよ
    • Layout Validation
      • 一度に複数のロケールを確認できるようになったよ
      • WearやTabletのプリセットを追加したよ
    • Layout Inspector
      • Jetpack Composeをサポートしたよ
    • Animated Vector Drawable
      • アニメーションをプレビューできるようになったよ
  • ConstraintLayout & MotionLayout
    • ConstraintLayout 2.0
      • VirtualLayoutsとFlowで複雑な画面を作れるようになったよ
      • MotionLayout
      • Motion Editor
    • ConstraintLayout 2.1
      • マイナスのmarginをサポートしたよ!!
      • ヘルパーオブジェクトが色々有るよ
        • Carousel
        • Rotation Support
        • Motion Effect
        • View Transitions
        • Motion Label
          • テキストを簡単に色付けたりアニメーションできるよ
        • Foldable Support
          • ReactiveGuide
      • ConstraintLayout in Compose
        • 制約を可視化できるよ
        • 制約はDSLでも書けるし、JSONでも書けるよ
        • MotionLayout Light
  • Compose Visual Tools
    • Compose Preview
      • 背景の色やプレビューのサイズなども変更できるよ
        • @Preview アノテーションの左の歯車をクリックすると表示されるダイアログで、設定できるよ
    • Live Literals
      • 色や文字列の変更をリアルタイムにプレビューとエミュレーター上で反映できるよ
    • Sample Data
      • @PreviewParameter でサンプルデータのプロバイダーを指定できるよ
    • Interactive Preview
      • アニメーションの確認などに便利だよ
      • プレビュー関数横にあるデバイスアイコンをクリックすると、デバイスでも実行できるよ
    • Animation Preview
      • Interactive Previewモードで、Motion Editorの用にアニメーションを確認できるよ
tomoya0x00tomoya0x00

What's new in Android testing tools | Session

https://www.youtube.com/watch?v=juEkViDyzF8&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=12

  • Android instrumented test runner
    • これまではAndroid Gradle PluginとAndroid Studioで異なるテストランナーを使っていたよ
    • これからはAndroid Gradle Pluginに委譲するよ
      • これで、CIは失敗するのにローカルでテストが成功する、といった現象が減るはずだよ
    • Arctic Foxではユニットテストのみ、Canaryでは全てのテストをAGP経由でおこなうよ
      • Android StudioのTestingオプションでGradleを使うことになっているかを確認してね
  • Unified Test Platform(UTP)
    • 以前にNitrogenと呼ばれていたモノだよ
    • Gradle Managed Devices
      • Gradle DSLでデバイスを定義できるよ
      • この仮想デバイスはテスト実行中にAGPから管理されるよ
        • システムイメージのDLやデバイスの作成もやってくれるよ
        • これで、仮想デバイスでのテスト結果が安定するよ
      • デバイスのグループを作って、パラレルにテスト実行もできるよ
      • Android Studioから仮想デバイスと物理デバイスを混在させてパラレルでテスト実行も出来るよ
      • エミュレータースナップショット
        • テスト失敗時のスナップショットを保存して復元できるよ
        • デフォルトでは2つまでのスナップショット作成に制限されているので、これを緩和することができるよ
tomoya0x00tomoya0x00

What's new in Android Media | Session

https://www.youtube.com/watch?v=pX00lybwwIk&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=13

  • Video Quality
    • キャプチャとアップロードでは、高いビットレートを使用しようね
      • MediaRecorerオブジェクトを作成するときに指定できるよ
    • アップロードとキャプチャの解像度を同じにしようね
      • それが無理な場合は、アスペクト比を一緒にしようね
    • Codecは上位プロファイルを使用しようね
    • コーデック
      • 長期的にはAV1が良いと考えているよ
      • ハードウェアの制限はあるけど、HEVCがオススメだよ
        • Android 12以上だと、多くのデバイスでHEVCがデフォルトのビデオキャプチャフォーマットとなるよ
        • なので、アプリでのHEVCサポートが必要だよ
          • すぐには難しいと思うので、Androidプラットフォームでメディアトランスコーディング機能を導入するよ
  • Performance Class
    • CPUやRAMを直接アプリで参照しなくても、デバイスのパフォーマンスを区別できるよ
    • 要求はCDDで定義され、CTSでテストされるよ
    • 新しいAndroidバージョンがリリースされるごとに、要件も追加されるよ
    • Androidのバージョン自体とPerformance Classは紐付いていないよ
    • Buildクラスの一部として利用できるよ
      • APIレベルのチェックと同じように使えるよ
      • JetpackでもこのAPIを使えるようにする予定だよ
  • ExoPlayer
    • Playlist APIs
      • メディアソースを連結する必要がなくなったよ
      • 代わりにPlaylistのAPIで作れるよ
    • UI components
      • 2つのViewを追加したよ
        • StyledPlayerView
        • StyledPlayerControlView
      • APIは既存のプレイヤーと同等だけど、より良い体験をユーザーに提供できるよ
        • アニメーション
        • 字幕とオーディオトラック選択
        • 再生速度の選択
        • などなど
    • Transformer API
    • Low latency live streaming
      • Low-Latency DASH
      • Low-Latency HLS extension from Apple
  • Real-time Audio
    • ここ4年でOEMメーカーとの協力もありポピュラーなデバイスでのオーディオ遅延は40msec以下になったよ
    • 低レイテンシーなオーディオに関してはOboeが推奨ライブラリだよ
tomoya0x00tomoya0x00

What’s new in Android Gradle plugin | Session

https://www.youtube.com/watch?v=AZBW5StgF8o&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=14

  • Performance Improvements
    • Configuration Cache
    • AGP 7.0
      • Non-transitive R
        • どのリソースを使っているか明確になるよ
          • Android Studio Previewにリファクタリングツールがあるよ
      • Lint
        • Lint結果のキャッシュに取り組んでいるよ
  • New DSL
    • Documentation
      • developer.android.com から利用できるようになったよ
    • 古いAPIをすぐには削除しないよ
    • アップグレードアシスタンスがパワーアップしたよ
      • 追加・削除・リネームがわかりやすくなったよ
      • どのように変更するかも提案してくれるよ
  • Variant API
  • ASM API
    • バイトコード変換用の新しいAPIを導入したよ
tomoya0x00tomoya0x00

Refreshing widgets | Session

https://www.youtube.com/watch?v=cHv84zXZf6E&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=15

  • Why Widgets?
    • Useful
    • Personal
    • Engaging
  • What's New in Android 12
    • Get More Don with Widgets
      • チェックボックス、スイッチ、ラジオボタンなどを追加したよ
    • More Personalizable Widgets
      • ウィジェットの構成変更を簡単にしたよ
      • 初期の構成変更はデフォルト設定によりスキップ可能にしたよ
    • Improved Widget Picker
      • よりリアルなプレビューを表示出来るようになるよ
    • More Widgets in More Places
      • オンデバイス検索、Assistant、 Auto
    • Extend your widget with voice
      • Capabilities APIで、Google Assistantと協調して動作できるようになるよ
    • Enable voice-forward interactions
    • Consistent Designs
      • システムレベルリソースを導入することでパディングやコーナー半径を統一できるよ
    • Responsive layouts and optimal sizing
      • 例えば最小幅や最大幅を指定できるよ
    • Personalized Themes and Colors
      • 動的カラーAPIも導入されたよ
    • Smoother Transitions
      • IDを追加するだけで、ウィジェット - アプリ間の遷移をアニメーションでスムーズにできるよ
    • Modern Look and Feel
      • 改新版のガイドラインを作成中だよ
  • Jetpack Compose
    • 今年後半にライブラリをリリースする予定だよ
tomoya0x00tomoya0x00

Using Jetpack libraries in Compose | Session

https://www.youtube.com/watch?v=0z_dwBGQQWQ&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=16

  • viewModel() でViewModelのインスタンスを取得できるよ
    • スコープは自動で決定されるよ
    • HiltでViewModelに対して依存性注入もできるよ
    • Composableのデフォルト引数として使用すると、Composableをステートレスに保て良いよ
  • collectAsState() でflowの変化を監視してrecomposeのトリガーにできるよ
    • observerAsState()subscribeAsState() でLiveDataとRxJavaも同様に監視できるよ
  • collectAsLazyPagingItems()Flow<PagingData<*>> を監視して、LazyColumnなどで簡単に表示出来るよ
    • loadStateで読み込み状態も簡単に取得できるよ
  • State Holders
    • ViewModel type
      • HomeScreenなどのハイレベルなComposable(ActivityやFragmentで使う物)は、ViewModelでステートを保持するのが良いよ
      • Regular class
        • ExpandableCardなどの再利用可能なComposableの場合、ViewModelを使わずに普通のクラスで状態を保持するのが良いよ
  • Migration steps
    • 一画面ずつComposeに移行していくのがいいよ
    • Navigation with Fragments -> Navigation with Fragments with Compose code -> Navigation Compose
  • Navigation Compose
    • Kotlin DSLでナビゲーショングラフを定義できるよ
    • hiltNavGraphViewModel() でViewModelを取得すると、ナビゲーショングラフのスコープでViewModelのインスタンスを取得できるよ
    • SaveStateHandle
      • Navigationで渡されたパラメーターを簡単に取得できるよ
tomoya0x00tomoya0x00

Top 12 tips to get ready for Android 12 | Session

https://www.youtube.com/watch?v=IgeuXF60Ins&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=18

  • その前に互換性チェックのお話しだよ
    • 開発者向けオプション、もしくはADBから個別に変更点をON/OFFできるから試して見てね
  • バックグラウンドからのフォアグラウンドサービスの起動が禁止されるよ
    • targetSDKがAndroid12以上の場合
    • 短い時間で終了するタスクの場合、Expedited Jobsを使えるよ
  • マイクとカメラのトグル、ユーザーが任意にオフに出来るよ
    • ベストプラクティスにしたがっている場合、アプリ側で特にすることは無いよ
    • オフになっている場合、blankをアプリは受け取るよ
    • targetSDKは関係ないよ
  • App Hibernation
    • 未使用のアプリを休止状態にするよ
      • パーミッション許可が全て取り消されるよ
      • アプリのキャッシュがクリアされるよ
      • 全てのジョブとプッシュメッセージも止まるよ
  • Nearby device permission
    • targetSDKがAndroid12以上の場合
    • Bluetooth scanningを位置情報のパーミッションから分離して要求できるよ
    • Bluetooth接続だけのパーミッションも追加されたよ
  • Network MAC address
    • targetSDKがAndroid12以上の場合、getHardwareAddressのAPIはnullを返すよ
      • それ以外の場合、固定の値を返すよ
    • 低レベルなAPIではなく、ConnectivityManagerを使うのがオススメだよ
    • 固定の識別子が必要な場合、ユーザーがリセット可能なIDを使おうね
      • SSAIDなどの利用を検討してね
  • Safe component exporting
    • targetSDKがAndroid12以上の場合
    • インテントフィルターを使用する全てのコンポーネントで、明示的にAndroidManifestでexportedを宣言する必要があるよ
      • 宣言しないとビルドが通らないよ
  • Custom notifications deprecation
    • targetSDKがAndroid12以上の場合
      • システムが標準テンプレートを適用するよ
    • secCustomContentViewなどで独自の通知を作っている場合、影響を受けるよ
    • targetSDKがAndroid12以上にして、通知が正しく表示されるか確認するのを強くオススメするよ
  • App Link improvements
    • 間違えた実装により起動するアプリを問い合わせるダイアログが表示されることが発生しており、これの検証を簡単にできるようにしたよ
    • デフォルトのアプリがインストールされていない場合、Webブラウザで直接開くよ
    • ドメイン検証の状態を確認するAPIを追加したよ
      • 必要に応じて、ドメイン承認の設定にユーザーを促すよ
  • WebView
    • targetSDKがAndroid12以上の場合
    • サードパーティーCookieの処理に変更があるよ
    • なので、ログインとか支払いが動作するかチェックをオススメするよ
  • New Stretch overscroll
    • targetSDKがAndroid12以上の場合
    • スクロールの終わりにコンテンツが全体的に伸びるエフェクトになっているよ
      • これは、よりわかりやすくスクロールの終わりを示すためだよ
    • スクロールが意図取りに動くかチェックをオススメするよ
tomoya0x00tomoya0x00

Macrobenchmark を使用したジャンクとスタートアップの測定

https://www.youtube.com/watch?v=0adLO2VRJtc&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=19

  • パフォーマンスの良いアプリは重要ですが、実現が困難な点がいくつかあるよ
    • 単純に市場からの分析だけに頼ることはできないよ
      • ユーザーに使って貰い、データが集計されるのを待つ必要があるためだよ
    • パフォーマンスの測定が難しいよ
      • ローカルで測定したいよ
      • 既存のライブラリでは難しいよ
      • 安定した方法で計測がむずかしよ
  • そこでMacrobenchmarkだよ
    • 現在は起動時間とスクロールの測定をサポートしているよ
    • JUnitでMacrobenchmarkRuleを使う事で利用できるよ
      • rule.measureRepeated でテストしたい内容を記述し、複数回計測するよ
    • コンパイルのモードやホット/コールドスタートなどを指定できるよ
    • 結果はjsonやtraceファイルとして保存できるし、Android Studioにサマリーも送れるよ
  • tracing-ktxで独自のトレースポイントを追加することで、より便利に分析ができるよ
tomoya0x00tomoya0x00

What's new in Android TV and Google TV | Session

https://www.youtube.com/watch?v=8rMPZlwvb5c&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=19

  • スマートTVの拡大のお話し
    • スマートTVの利用は2020に157%拡大したよ
    • Android TV OSのデバイスは月間で8,000万台がアクティブだよ
  • Google TV
    • コンテンツが大量にある時代、オススメのコンテンツをGoogle TVが提案するよ
  • RedbullがローンチしたARアプリの例「THE LAST ASCENT」
  • WatchNext API
    • コンテンツの継続視聴をサポートするよ
  • Cast Connect
    • Stream Transfer
      • あるデバイスから別のデバイスでの同じコンテンツの視聴継続をサポートするよ
        • Googleアシスタントで「Move this to the bedroom display」と言うだけだよ
      • デフォルトの実装があるのでコード変更不要で対応できるよ
        • カスタマイズも可能だよ
    • Stream Expansion
      • 現在のストリームで再生しているものにスピーカーを追加できるよ
  • Emulator Updates
    • Google TV Emulator
    • Android 11 Emulator
    • Expanded Remote Control
      • Google Assistantへの入力を直接文字で入力も可能だよ
  • Firebase Test Lab Device Support
    • Virtual Devices
      • もうBetaで使えるよ!
      • 大規模に使えるので、例えば一日で何千ものエピソード再生も出来るよ
    • Physical Devices
  • Android 12 Beta 1 on ADT-3
    • 使えるようになったよ!
      • もうすぐ利用できるようになるよ
tomoya0x00tomoya0x00

What’s new with Android for Cars | Session

https://www.youtube.com/watch?v=FKaBhUue-nE&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=20

  • Google Assistant Driving Mode
    • アメリカで使えるようになったよ
    • 数ヶ月で他の国でも使えるようになっていくよ
  • Android Auto
    • ポルシェでも使えるようになるよ
    • ワイヤレス接続も広がってきているよ
  • Android Automotive OS
    • 車と統合されているので、エアコンの温度も声でコントロールできるよ
    • 2021年末までに、10種類以上の車に搭載されるよ
  • Car App Library
    • ユーザーの注意を逸らさない、テンプレートを提供するよ
      • 現在は9つのテンプレートがあるよ
        • ナビや検索、メッセージなど
    • ナビ、駐車、充電のアプリをまずはサポートするよ
    • Android AutoとAndroid Automotive OSの両方でコードを共有できるよ
    • 今年後半にリリースする1.1では、Android Automotive OSで動作するスタンドアローンアプリ開発にフォーカスするよ
      • サインインとロングメッセージのテンプレートを追加予定だよ
      • デザインガイドラインもぜひ見てね
  • Emulators
tomoya0x00tomoya0x00

Effective background tasks on Android | Session

https://www.youtube.com/watch?v=IqnCqHyu1E4&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=22

  • Striking a balance
    • User Attention
      • ただ、ユーザーの邪魔をするだけではダメだよ
    • Resource Usage
  • Forground Services
    • What are they for?
      • Multitasking
        • 音楽を聴きながらWebブラウジングをするなど
      • Completing a user action
        • 大きな添付ファイルのメール送信など
  • What are they NOT for?
    • 緊急では無いタスクには向かないよ
    • ユーザーが意識する必要の無い作業にも向かないよ
    • アプリをメモリに常駐するためだけに使うのもNGだよ
    • なぜ向いてないのか?
      • ユーザーが操作できない
      • ユーザーの邪魔をする可能性がある
      • リソースを消費するから
      • OSが効果的にタスクの優先順位を付けられない
        • ユーザーにとって重要なタスクが終わらない可能性があるよ
  • フォアグランドについて調査をおこなったよ
    • ほとんどのタスクは10秒以内に完了
    • 約半分のフォアグラウンドサービスはバックグラウンドから起動
  • What's changing in Android 12
    • バックグラウンドからのフォアグラウンド起動を制限するよ
    • いくつかのケースで、フォアグランドサービスの通知表示を10秒間遅延させるよ
      • アプリの設定でこの挙動は上書きできるよ
    • Expedited Jobs
      • すぐに実行したいタスク向けの機能だよ
      • ただし、数分程度しかタスクは実行できないよ
      • Dozeとバッテリーセーバーモードでも実行されるよ
      • しかし、利用頻度が低いアプリはタスクを実行できる機会は少なくなるよ
      • Work Manager APIsも提供されるよ
  • Forground Service Exemptions
    • アプリ画面が表示されているときや、通知のユーザータップなどから起動できるよ
    • BOOT_COMPLETEDやMY_PACKAGE_REPLACEDなどのブロードキャスト起因でも起動できるよ
    • ジオフェンシング、優先度高のFCMメッセージによるコールバックでも起動できるよ
  • User
    • ナビゲーションや音楽、フィットネストラッカーなどは引き続きフォアグラウンドサービスが適切だよ
    • 大きな添付ファイルのEメール送信もフォアグラウンドサービスが適切だよ
    • ほとんどのバックグランドタスクはWorkManagerが適切だよ
    • すぐに実行した&すぐに終わるのであれば、Expedited Jobを考えてみてね
tomoya0x00tomoya0x00

The state of Android security | Session

https://www.youtube.com/watch?v=qHFsMRfnOWk&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=22

  • AndroidシステムのプログラミングでRustの利用を促進しているよ
    • Keystore ComponentはRustで完全に書き換えられたよ
  • Android12からLinux KFenceのサポートが組み込まれているよ
    • 低いオーバーヘッドでメモリーエラーを検出出来るよ
  • Android Ready SE(Secure Elements)
  • Jetpack security libraries
    • Jetpack Security Cryptoが1.0になったよ
      • ファイルとSharedPreferenesを安全に暗号化できるよ
    • App-to-app authentication
    • mDL Mobile Drivers License
    • KeystoreとEncrypted DataStoreはもうすぐリリースされるよ
  • New Security APIs for developers
    • 不正使用防止のanti-abuse API
    • Perspective API
      • 有害な言語の特定
    • オーバーレイを非表示にする機能
    • autehtication required flag
      • 通知に設定することでロックされたデバイスの通知表示を制御出来るよ
tomoya0x00tomoya0x00

What's new in Android Machine Learning | Session

https://www.youtube.com/watch?v=uTCQ8rAdPGE&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=23

  • オンデバイスでの推論
    • オフラインでも動作するし、プライバシー情報を送信しなくて良いよ
    • Google Meetの背景ぼかし機能はオンデバイスMLで実行しているよ
    • Live Captionもオンデバイスだよ
    • ML Kitでリアルタイム姿勢検知、オフライン翻訳、デジタルインクもオンデバイスで実行できるよ
  • Common challenges
    • アプリのサイズ制限
    • 色々なパフォーマンスのデバイス
    • 使える機能もデバイスに依存して様々
    • これらの問題を解決するためアップデート可能なML推論スタックを提供するよ
  • Built-in essentials: TensorFlow Lite for Android
    • Google Playサービスが使えるAndroidデバイスにプリインしたよ
    • つまり、あなたのアプリにTensorFlow Liteのバンドルが不要となるよ
  • Performance: Accelerator allowlisting
    • 色々なデバイスがあり、最大のパフォーマンスを発揮させるのは難しいよ
    • 部分的な解決策として、GPUアクセラレーション用の許可リストがあるよ
      • これを使って、GPUデリゲートが使えるか簡単にチェックできるよ
    • 今年、 Automatic Acceleration という機能を追加するよ
      • モデルが正しく動作するかチェックできるよ
      • アクセラレーターでCPUより高いパフォーマンスが発揮できるかもチェックできるよ
      • CPUとGPU以外のアクセラレーターも考慮されるよ
  • Updatability one NNAPI across the ecosystem
    • Neural Networks API
      • NPUとDSPに対して標準的なアクセスを提供するものだよ
      • ただし、AndroidのバージョンとAPIが紐付いているのが欠点だったよ
        • なので、Android12以上ではNNAPIをAndroid OSから切り離し、Google Play Servicesで更新可能とするよ
tomoya0x00tomoya0x00

Google Play 開発者サービスを使用した信頼性の高い高性能なアプリのビルド

https://www.youtube.com/watch?v=K-j47JDQQdQ&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=24

  • Google Play System Updates
    • Improved updatability for core AOSP components
  • Google Play Services
    • Consistent access to Google APIs and services
  • Jetpack
    • Best practices and reduced boilerplate code
  • Compose
    • Fater and easier UI development
  • Google Play Services
    • アプリ側はシンクライアントのSDKを利用し、オンデバイスのGoogle Play servicesとプロセス間通信するよ
    • Google Play services自体は自動で更新されるよ
    • PhoneだけでなくTablet、Wear、TVなどでも提供されているよ
  • What's new
    • 都市でデバイスの位置・向きが正しく検知できないことがある問題
      • 3D建物モデルを利用する事で、衛星信号の反射を考慮したより正しい位置情報を算出できるようになったよ
      • 最初のバージョンで50%、2番目のバージョンで75%のエラー発生低減率だよ
      • 3番目のバージョンでは90%のエラー発生低減ができる予定だよ
      • アプリはFusedLocation Providerを使っていればOKだよ
    • ML Kit in Google Play services
      • QRコードや文字認識を、アプリサイズを小さく保ったまま実現できるよ
      • それに、Google Playサービス経由で自動更新もされるよ
    • Play Games Services
      • 近いうちに新しいSDKがリリースされるよ
      • Playゲームサービスをアプリに統合するのを簡単にするよ
      • アカウント作成とサインインフローも最適化するよ
        • 自動サインインでシームレスにゲームを開始出来るよ
      • Kotlinサポートの強化をしたよ
        • Nullability annotations
          • 最初は警告がでるだけだよ
          • ただし、将来的にはコンパイルエラーになるから、気をつけてね
        • Coroutines with the Tasks API
tomoya0x00tomoya0x00

New tools to help you build safer apps on Google Play | Session

https://www.youtube.com/watch?v=apHcQXxMUIs&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=26

  • 最近、Google PlayコンソールにPublishing overviewページを追加したよ
    • これで、レビュー中かどうかなどが見れるよ
    • 変更が承認されると「管理対象の公開」で公開できるよ
      • これにより、承認されたときでは無く自分が決めたタイミングで公開できるよ
      • この機能を使って早めにレビューを開始することをオススメするよ
  • Google Play Policies
    • いろいろな要求を貰っているよ
      • 一元管理された場所でポリシー違反などを確認
      • ポリシー違反の修正方法のガイダンス
      • 今後のポリシー変更に関する事前の通知
    • 上記の要望に応えていくつかの改善をおこなったよ
      • 新しいポリシーのステータスページで、発生している問題を管理できるよ
        • 修正方法の提案のメールも、ここから見れるよ
        • 具体的にどの画像やテキストが違反しているかもお知らせするよ
      • Google Playの措置に対して異議申し立て、状況のトラッキングもできるようになったよ
      • 今後のポリシー変更により違反となってしまうものに対して、事前に具体的な情報を提供する予定だよ
      • Inboxに関係ある情報が届くので、週一回&リリースをサブミットしたあとは確認してね
    • Privacy by design
      • ユーザーデータにアクセスする方法、またそれが本当に必要なのかを考えてね
      • アクセスするデータをユーザーがコントロールできるようにしてね
      • データが必要な理由とそれがどのように使われるか、ユーザーが理解していることを確認してね
  • Google Play Academy
  • Google Play SDK Console
    • SDKプロバイダーがSDKを登録管理するためのフロントエンドだよ
      • 例えば、特定バージョンの不具合情報なども登録できるよ
    • これにより、アプリ開発者にSDKに起因する問題のガイダンスを提供できるようになっていくよ
  • アプリ開発者が人気のライブラリについて学べる新しい公開先つくる予定だよ
    • SDKパーミッションの使用状況や既知の問題、アプリの互換性などの情報が得られる予定だよ
      • 最初は商用SDKカテゴリのみをサポートするよ
      • 将来的にはOSSのSDKもサポートしたいよ
tomoya0x00tomoya0x00

Grow your business with new engagement and monetization features | Session

https://www.youtube.com/watch?v=iBxYrEkpCac&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=26

  • Engage users
    • 新しいエンゲージメントメトリクスとベンチマーク
    • Compare to peers
       * 類似アプリとの比較ができるよ
      • 例えばアクティブユーザー率を他のアプリと比べて、まだ改善する余地があるかどうか、などの参考に出来るよ
  • Grow revenue
    • ユーザー当たりの取引額を他のアプリと比較できるよ
      • 例えば、他アプリより課金ユーザーの割合が低い場合、そこにチャンスがあるよ
  • Build your business
    • Google Playは様々な国から利用できるし、ローカルでの支払い方法や現金払いなど支払い方法の追加をおこなってきたよ
    • 超低価格(米国価格で10~30セント)の値付けに対応したよ
      • これで潜在的な購入者にアプローチできるよ
    • 複数購入機能を提供するよ
    • プリペイドプランもサポートするよ
      • ユーザーに一定期間だけのコンテンツアクセスを提供できるよ
    • Play Billing Library 4.0
tomoya0x00tomoya0x00

Optimize your Android games and apps to run on Chrome OS | Session

https://www.youtube.com/watch?v=23EnVczS0Ik&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=27

  • Android runtime what's new
    • 現在、ほとんどのChromebookはAndroid 9を実行しているよ
    • Android 11にアップデートしていく予定だよ
    • これに合わせて、コンテナから仮想マシンに実行環境を変更するよ
      • セキュリティとメンテナンス性が向上するよ
  • Designing for app quality
    • 考慮しないといけないことは下記の3つだよ
      • 大画面サポート
      • キーボード、マウス、スタイラス、ゲームコントローラーのサポート
      • ショートカットやマルチウインドウのサポート
    • Rallyデモアプリは参考になるので、ぜひ見てみてね
    • コンフィグレーションチェンジを考慮してね
      • ウインドウサイズの変更などで、より容易に発生するよ
      • AACのViewModelなどで正しくハンドリングしてね
    • Input patterns
      • Chrome OS での入力の重要性 をぜひ見てね
  • Games performance & tools
    • ARMバイナリでもx86なChromebookで動作はするけど、パフォーマンス向上のためにx86なバイナリのサポートもオススメするよ
      • 両方のバイナリをサポートしてもAppBundleのおかげでユーザーが受け取るAPKサイズは増えないよ
      • Unityでゲーム開発をしている場合、数クリックでx86バイナリをサポートできるよ
    • インターネット接続が必要な場合、ConnectivityManagerでチェックしてね
      • WiFiのチェックだけでは不十分だよ
    • 開発者モードOFFでもAPKの再度ローディングができるように
      • APKファイルをダブルクリックでインストール出来るよ
    • ARC Tracing
      • chrome://arc-overview-tracing
        • FPS, render quality nad watts
    • Perfetto
      • System tracing
      • Android and Kernel events
      • Logcat events
      • Pythonから使用できるクエリAPIがあるよ
      • Andorid10以降を実行しているデバイスで使えるよ
    • Updated gamepad mappings
      • Androidのgamepadイベントに変換するように改善を進めているよ
tomoya0x00tomoya0x00

Chrome OS での入力の重要性

https://www.youtube.com/watch?v=FPuaaYpUd5s&list=PLWz5rJ2EKKc8dQ8oYOANI4qto-0jj9CQ_&index=28

  • Text input
    • キーボードのEnterキーを押しても何も起きないことが良くあるよ
    • onKeyUpをoverrideするだけで簡単に修正できるよ
  • Beyond the minimum
    • スペースで音楽の一時停止と再生ができることや、Ctrl+Zでundoできる事が期待されているよ
    • 例としてedjing Mixはうまく物理的なキーボードをサポートしているよ
      • トラックパッドでスクラッチ操作ができるよ
    • もうすぐNDK MIDI APIも使えるようになるよ
  • Input switching
    • ユーザーのことを考え、ユーザーが入力したいときに入力できるようにするべきだよ
    • 例えば、タッチスクリーン、キーボード、ゲームパッドと接続されている入力デバイスに合わせてUIに操作ヒントを出す、などが考えられるよ
      • 実現方法の例として、Lazy state machineがあるよ
      • 例えばキーボードイベントを受信していてもタッチスクリーン操作が継続されている場合はオンスクリーンの操作UIを表示しておき、タッチ操作されなくなったら操作UIを隠す、などが考えられるよ
  • Pointer capture
    • マウスのポインタがアプリのウインドウ内に入った場合、自動でポインタが消せる機能だよ
      • そして入力イベントが直接アプリにインプットされるよ
    • うまく使ってる例として、 Minecraft: Education Edition があるよ
      • ポインタキャプチャする場面としない場面を使い分けているよ
  • Stylus
    • 例として concepts というアプリがあるよ
    • Low-latency APIがα版として利用できるようになったよ