Google Play APP DOJO #38 に参加してきた


Google Play APP DOJO #38に参加してきたので、その内容を自分なりにまとめてみました。
テーマは、「Android Q 新機能詳細 -ダークテーマから共有機能まで-」です。

概要

Google I/O 2019で発表されたAndroid関連のアップデートについて

Android Q

YouTubeにプレイリストあり。
Android @ Google I/O 2019
現在、「Android Q Beta 4」が出ている(API Level 29)

プライバシー

Android Q privacy checklist | Android Developers

位置情報

バックグラウンドでの利用権限が分離され、バックグラウンド時には別のパーミッション「ACCESS_BACKGROUND_LOCATION」が必要になる。

Scoped Storage

/sdcard以下へのアクセス制限が以下の通りに変更される。

  • 自分のファイルはアクセスできる
  • 写真・音声・動画はMediaStoreでアクセス
  • 他のアプリが作ったファイルはDocumentsProvider(Intent.ACTION_OPEN_DOCUMENT)でアクセス

位置情報へのアクセスには「ACCESS_MEDIA_LOCATION」権限が必要。
Android R(Qの次のOS)になった時、FileSystemでアクセスできなくなるらしい。

その他の変更

  • バックグラウンドからユーザの操作なしにUI起動できない
  • カメラの情報を取得するのにもカメラの権限が必要
  • バックグラウンドからクリップボードへのアクセス禁止
  • etc

ダークテーマ

システムの設定でダークテーマの切り替えが可能になった。

対応方法

DayNight

values/styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
...
</style>

-night

values/styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
</style>
values-night/styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents">
...
</style>

Force Dark

values/styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
    <item name="android:forceDarkAllowed">true</item>
</style>

一部を除外

layout.xml
<xxxView 
    ...
    android:forceDarkAllowed
    ...
/>

注意事項

色をlayout.xml上でベタ書きしていると、ダークモードにしたときにうまくいかないことがあるかもしれない。
colorPrimaryに設定しておけば、テーマの切り替えで対応が可能。

その他

Android Q未満でも、AppCompatを利用すればダークテーマに対応はできる。
だからといって特に対応する必要はない。

Gesture Navigation

Android Qから完全ジェスチャーモードが加わった。
Android R移行時、完全ジェスチャーモードのみになるかも。
とはいえ、DrawerLayoutは無くならないと思われる。
ただ、Gesture Navigationが入った時にどういう挙動になるかは確認したほうがいい。

Bubbles

他のアプリの上に描画する機能。(Facebook Messengerなどで利用されている)
これをSYSTEM_ALERT_WINDOWというが、これを無くしたいがためにBubblesが誕生した。
SYSTEM_ALERT_WINDOWでは、たくさんアプリが起動してしまうため、低スペックのアプリには厳しい。

Android Qでは、ユーザ向けの機能にはならない。
この機能はあくまでPreview Releaseである。
開発オプションの中で有効にすれば使える。

Sharing

マシュマロでDirect Shareができたが、不評であった。
(Direct Shareに関しては以下参照)
Direct Shareを試してみる - Qiita

今回のバージョンアップにより改善された。
Settings Panel(Android Qでしか使えない)を使えばよりGood。

Jetpack 最新情報

以下にバージョン一覧がある。
AndroidX Versions | Android Developers

LiveData(KTX)

Android KTXによって、よりKotlinらしく書くことができる。

LiveData Overview | Android Developers

ViewModel(KTX)

Android KTXによって(ry

ViewModel Overview | Android Developers

DataBinding

Data Binding Library | Android Developers

Android Studio 3.5

  • ビルドが20%高速化
  • XMLとコード間の即時連携
  • インクリメンタルアノテーションプロセッサー(プレビュー)

View Binding(Android Studio 3.6から)

  • DataBindingと同様、ただし値のバインディングはしない
  • findViewByIdの置き換え
  • 型安全、早い

Savedstate

Savedstate | Android Developers

Android 1からある機能。
アクティビティの現在の状態を覚えておくもの。
ViewModelで十分に思えるが、「プロセスが殺されてしまった場合にデータが削除されてしまう」問題があり、それを解消できる。(プロセスが殺されてもデータが保持される)

WorkManager

Schedule tasks with WorkManager | Android Developers

2.2(alpha)

  • パフォーマンス・互換性の向上
  • Robolectric test、Unit test

予定

  • ForegroundでもWorkManager APIが使えるように

Room

Room Persistence Library | Android Developers

2.1(alpha)

  • コルーチン(suspend)
  • 全文検索
  • ビュー(DatabaseView)

予定

  • インクリメンタルアノテーションプロセッサー
  • Relationの強化
  • マイグレーションを簡単に
  • コルーチンChannelとFlow

Paging

Paging library overview | Android Developers

予定

  • ネットワークから取得するのを簡単にする
  • ヘッダー・フッター
  • RxJavaサポート

Navigation

Navigation | Android Developers

2.1(alpha)

  • スコープ
  • URIによるナビゲーション
  • ダイアログフラグメントのサポート

予定

  • Dynamic featureのサポート

CameraX

CameraX の概要 | Android Developers

Camera機能のこれまで

Camera APIは非推奨となり、単純な機能・単純なAPIしかできない。
Camera2 APIで高機能、低水準なAPI(ハードウェアに近い)が用意されたが、マニアックすぎて敷居が高いのがネック。

CameraXとは

カメラを利用するアプリに必要な機能を使いやすいAPIであり、API Level 21まで後方互換性がある。
実行時権限は扱わない。

その他の機能

  • プレビューに対する顔認識
  • Firebaseとの連携
  • Extension Camera2 APIを使って機能を拡張
  • さらに簡単なAPIを目指し中

Benchmark

Benchmark app code | Android Developers

インストゥルメンタルテストの中でベンチマークを取る。
CIでアプリやライブラリのパフォーマンスを継続的に監視したい時に利用。

何をBenchmarkするか

  • ただ単に遅いコードを早くしたいとき
  • 継続的に一定のパフォーマンスを保証したい時

Security

Security | Android Developers

比較的簡単に導入ができる。
EncryptedFileやEncryptedSharedPreferencesがある。
簡単にファイルを暗号化できる。
しかも、暗号化のキーは端末から取り出すことができない。

ぜひ読んで欲しい記事

Google Developers Japan: アプリの品質を改善してGoogle Play で見つけてもらいやすくする