hamburger

主に日記

「Google Play APP DOJO #38 Android Q 新機能詳細 - ダークテーマから共有機能まで -」に参加してきた

f:id:burgerham:20190618024035j:plain

目的

Google I/O で発表された新機能について、アプリ開発者向けに説明していただけそうだったため(IOの動画をちゃんと見てない・・・)。英語動画が厳しい自分でもキャッチアップできるかなと思った

Twitter -> #appdojojp

全体の感想

内容のボリュームや難易度がちょうどよく、非常にわかりやすかった。なんとなく技術記事で見たような気がする話題も、改めて人に説明してもらうことで理解が深まった気がする。

第 1 部 Android Q 新機能詳細

プライバシー

チェックリストを確認しよう

位置情報

バックグラウンドで位置情報を取得するためには追加でパーミッションが必要になる

Scoped Storage

  • /sdcard以下へのアクセス制限
  • ただし、自分で作成したファイルへはアクセス可能
  • Android Rからは、FileSystemでアクセスできなくなる予定

ダーク テーマ

  • 以前から存在するが、OS設定としてできるようになった
  • 非対応アプリが少数派になったときに、ダークモード設定で未対応アプリを起動したときに悪目立ちする

対応方法

下記のような対応で、ある程度自動でやってくれるとのこと。

  1. テーマ変更 -> Theme.AppCompat.DayNight
  2. 細かく設定することもできる -> values/styles.xmlvalues-night/styles.xml を用意
  3. テーマそのまま、プロパティ追加でも -> これでも結構いい感じになるらしい
<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ボタン 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

CameraX

  • 内部でcamera2apiを使っているが、抽象化して簡単になっている

ベンチマークライブラリ

  • Junit等で結果を出力できる
  • これだけでよくなるわけではないが、CIで監視することで品質が一定であることを証明できる

セキュリティ

端末から抜き出せないようになっている秘密鍵を使って暗号化することで、万が一データを見られても解読できないようにする

  • EncryptedFile
  • EncryptedSharedPreferences
    • tokenなどをSharedPreferencesに保存してたので、これはめちゃくちゃ便利そう

QA

  • 今後cameraXの機能追加はあるのか
  • フォーラムから要望を出してくれれば、検討して実装されるかもしれない。実際今もどんどん改善されている

APP DOJO プログラムマイナーチェンジについて

developers-jp.googleblog.com

  • Playストア表示ロジックが変更される
  • 良いアプリはより目立つ位置に掲載され、それが反映されるようなランキングロジックになる
  • これに則した活動になるように改善される予定とのこと