目的
Google I/O で発表された新機能について、アプリ開発者向けに説明していただけそうだったため(IOの動画をちゃんと見てない・・・)。英語動画が厳しい自分でもキャッチアップできるかなと思った
全体の感想
内容のボリュームや難易度がちょうどよく、非常にわかりやすかった。なんとなく技術記事で見たような気がする話題も、改めて人に説明してもらうことで理解が深まった気がする。
第 1 部 Android Q 新機能詳細
プライバシー
チェックリストを確認しよう
位置情報
バックグラウンドで位置情報を取得するためには追加でパーミッションが必要になる
Scoped Storage
- /sdcard以下へのアクセス制限
- ただし、自分で作成したファイルへはアクセス可能
- Android Rからは、FileSystemでアクセスできなくなる予定
ダーク テーマ
- 以前から存在するが、OS設定としてできるようになった
- 非対応アプリが少数派になったときに、ダークモード設定で未対応アプリを起動したときに悪目立ちする
対応方法
下記のような対応で、ある程度自動でやってくれるとのこと。
- テーマ変更 ->
Theme.AppCompat.DayNight
- 細かく設定することもできる ->
values/styles.xml
とvalues-night/styles.xml
を用意 - テーマそのまま、プロパティ追加でも -> これでも結構いい感じになるらしい
<style name="AppTheme" parent="Theme.hogehoge.Light"> <item name="android:forceDarkAllowed">true</item> # hogehoge </style> # 一部を除外したいとき <ImageView android:layout_width="match_parent" android:forceDarkAllowed="false" # これ
もちろんxmlファイル上で色を直接指定している場合は変換されない。UIの内容をxml側で表現している場合、ひとまずstyleにまとめていくなどして、きたるべき日に備えていくのが良さそうだと感じた
ジェスチャー ナビゲーション
- Android Qからは見た目iosのようなジェスチャー操作になる
- ジェスチャーで、これまでの3ボタンの機能を呼び出すイメージ
- 現在のシステム設定では既存の3ボタン or 戻る/ホームバーの2ボタンが存在するが、Android R以降は 3ボタン or ホームバー1ボタン の2種類になる
- ジェスチャーの下までコンテンツを表示してるといい感じ
<style name="AppTheme" parent="hogehoge"> <item name="android:navigationBarColor">@color/red</item> <item name="android:statusBarColor">@color/blue</item>
view.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- 既存のスワイプ操作とのコンフリクトは、コード側で対応可能
- 標準のドロワーレイアウトであれば、ライブラリのアップデートでOK
Bubbles
- FacebookMessenger等で表示される、アプリ長押しで表示できる画面
- Androidチーム的にはシステムアラートウィンドウは将来消したいらしい
- フリーダムすぎるらしい
- Goでも非搭載なので、消えるのは確定みたい
- Bubblesはそれの代替手段として用意された機能
- ただし、Android Qでもプレビュー版しか提供されないので、開発者オプションで設定する
共有機能の強化
- Android Mから搭載された、共有パネルが改善
- DirectShare(名前あってるか自信ない)の領域の表示遅延が改善
SettingsPanel
- 画面遷移しなくても設定画面を表示できる
- パーミッション取得時に設定に飛ばしてる画面があるので、そこで活用できそう
- 表示できるのは設定項目4種類
- 表示しているのはあくまで設定項目であって、パーミッションではない(QAにて)
QA
- NavigationDrowerとジェスチャーは動作がコンフリクトするが、NavigationDrowerがなくなるというわけではない
- ジェスチャーUIになったときに、クリック要素がナビゲーションバーとかぶるのは避けたほうが良い(bottomBarとか広告とか)
addApplyInsetsListener
(?)の引数で必要な高さが取得できるので、それを活用してマージンを設定するのが良い
第 2 部 Jetpack 最新情報
- とても便利なバージョン情報
- 自動で出力されているらしい。すごい・・・
既存のライブラリの新機能
ここはコードが多かったので概要だけ
LiveData & ViewModels
kotlin firstの一環で、いろんな構文がより短くスマートにかけるようになった
DataBinding
Android Studio 3.5で書きやすくなった -> インクリメンタルアノテーションプロセッサー
savedState
ViewModelはメモリ上にデータを保持するので、プロセスが中断されるとデータが消えてしまう。そういう場合もデータを保持したい場合はviewModelで SavedStateHundle
を使おう
WorkManager
foregroundでもつかえるようにする予定(WorkManager自体よくわかっていないので記憶が薄い)
Room
Paging
- ネットワークからの取得を用意に
- ヘッダー、フッダー
- RxJava
Navigation
CameraX
- 内部でcamera2apiを使っているが、抽象化して簡単になっている
ベンチマークライブラリ
- Junit等で結果を出力できる
- これだけでよくなるわけではないが、CIで監視することで品質が一定であることを証明できる
セキュリティ
端末から抜き出せないようになっている秘密鍵を使って暗号化することで、万が一データを見られても解読できないようにする
- EncryptedFile
- EncryptedSharedPreferences
- tokenなどをSharedPreferencesに保存してたので、これはめちゃくちゃ便利そう
QA
- 今後cameraXの機能追加はあるのか
- フォーラムから要望を出してくれれば、検討して実装されるかもしれない。実際今もどんどん改善されている
APP DOJO プログラムマイナーチェンジについて
- Playストア表示ロジックが変更される
- 良いアプリはより目立つ位置に掲載され、それが反映されるようなランキングロジックになる
- これに則した活動になるように改善される予定とのこと