Android @IO 19 [ja]

Android @IO 19 [ja]

Android @I/O 19 [ja]

Transcript

  1. Android @I/O’19 Wasabeef (mixi & CA).aab

  2. About me Daichi Furiya (降矢 大地) Google Developers Expert CATS,

    CyberAgent @wasabeef_jp wasabeef
  3. Android @I/O’19

  4. Keynote / Developer Keynote Kotlin Android Q Jetpack New/Updated Jetpack

    libraries Index
  5. Keynote

  6. Kotlin

  7. Kotlin

  8. Kotlin First? Java Language Kotlin Platform SDK support Yes Yes

    Android Studio support Yes Yes Lint Yes Yes Guided docs support Yes Yes API docs support Yes Yes AndroidX support Yes Yes AndroidX Kotlin-specific APIs (e.g. KTX, coroutines) N/A Yes Online training Best effort Yes Samples Best effort Yes Multi-platform Projects No Yes Jetpack Compose No Yes
  9. None
  10. コミュニティ主導で Android、GCP、MPP などで用いた Kotlin の基本とベストプラク ティスを学べるイベント郡 Kotlin/Everywhere

  11. Kotlin/Everywhere 日本だと GDG 九州 (in 大分) で開催したらしい

  12. Android -

  13. Foldable Live Caption Dark theme New location controls Android Q

    Scoped storage Bubbles Gestual Navigation And more..
  14. Foldable

  15. Foldable https://youtu.be/7r_UgNcJtzQ

  16. Foldable アプリの継続性 マルチウィンドウ マルチディスプレイ

  17. アプリの継続性 android:configChanges を考慮すること New Aspect Ratio

  18. マルチウィンドウ Nougat から android:resizeableActivity=true で有効できる。

  19. マルチウィンドウ すべてが Resume になりうるので、動画再生、カメラなどは考慮が必要

  20. マルチディスプレイ ActivityOptions.get/setLaunchDisplayId() でどのでディスプレイに表示するか指定できる

  21. Live Caption

  22. Live Caption 動画再生時の音声をリアルタイムで認識し て、画面上に字幕を表示するこができる 字幕位置の変更 オフラインでの動作

  23. Dark theme

  24. Dark theme

  25. Dark theme <style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> Force Dark (android:forceDarkAllowed) を使うと明示的にやらなくても自動的に適用 ※ただ、ちゃんと動作検証はする必要がある

  26. New location controls

  27. New location controls <manifest> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" "/> <uses-permission android:name=“android.permission.ACCESS_BACKGROUND_LOCATION" "/>

    "</manifest> バックグラウンドからアクセスする場合は、ACCESS_BACKGROUND_LOCATION も必要
  28. Scoped Storage

  29. Scoped Storage 自アプリ領域にはサンドボックスという形 でアクセスできるが、他アプリ領域は Storage Access Framework を利用する 写真、動画、音声を取得する場合は MediaStore

    を使用すること
  30. Scoped Storage ファイル場所 権限取得 アクセス方法 アンインストール時に削除 アプリ領域 - getExternalFilesDir() Yes

    メディア (写真, 動画, 音声) READ_EXTERNAL_STORAGE (他アプリのファイルを参照時) MediaStore No ダウンロード (書類など) - Storage Access Framework (システムピッカー) No
  31. Bubbles

  32. これまで、オーバーレイで何かを表示する場 合などは SYSTEM_ALART_WINDOW を使っ ていたが、それを表示しているアプリのプロ セスが動作することになるので、バッテリー などのパフォーマンスがよくない背景から Bubbles

  33. Bubbles "// Create bubble intent val target = Intent(context, BubbleActivity"::class.java)

    val bubbleIntent = PendingIntent.getActivity(context, 0, target, flags) "// Create bubble metadata val bubbleData = Notification.BubbleMetadata.Builder() .setIcon(drawable) .setIntent(bubbleIntent) .build() "// Create notification val chatBot = Person.Builder() .setBot(true) .setName("BubbleBot") .setImportant(true) .build() val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .addPerson(chatBot)
  34. Gestural Navigation

  35. Gestural Navigation これらをテーマから透過にする必要 がある android:navigationBarColor android:statusBarColor

  36. Jetpack

  37. Jetpack compose CameraX Benchmark Security SavedState (ViewModel) ViewBinding New/Updated Jetpack

    libraries LiveData/Lifecycle Coroutines ViewPager2 Biometrics Prompt Enterprise Android for Cars ConstraintLayout 2.0
  38. Jetpack compose

  39. Kotlin リアクティブ 新しい UI ツールキット マテリアルデザインとアニメーション対応 既存との互換性 Jetpack compose

  40. Jetpack compose https://android-developers.googleblog.com/2019/05/whats-new-with-android-jetpack.html

  41. CameraX

  42. カメラ実装の簡素化 Android 5.0+ (API 21+) 拡張サポート
 (Portrait、Night、HDR、Beautyなど) CameraX

  43. CameraX

  44. Benchmark

  45. Kotlin、Java を簡単にベンチマーク出来る Android Studio Integration のサポート アプリ全体のプロファイリングではない Benchmark

  46. Benchmark @RunWith(AndroidJUnit4"::class) class MyBenchmark { @get:Rule val benchmarkRule = BenchmarkRule()

    @Test fun benchmarkSomeWork() = benchmarkRule.measureRepeated { doSomeWork() } }
  47. Benchmark

  48. Security

  49. キーの作成・検証、保存データの読み書き に関するベストプラクティスの実装を提供 銀行系やチャット系アプリなどの実装をす るときに強力 Security

  50. Security val encryptedFile = EncryptedFile.Builder( File(context.getFilesDir(), "my_other_sensitive_data.txt"), context, masterKeyAlias, EncryptedFileKeyset.FileEncryptionScheme.AES256_GCM_HKDF_4KB

    ).build() "// Write to a file. try { val outputStream: FileOutputStream? = encryptedFile.openFileOutput() outputStream"?.apply { write("MY SUPER SECRET INFORMATION".toByteArray(Charset.forName("UTF-8"))) flush() close() } } catch (ex: IOException) { ""... }
  51. SavedState (ViewModel)

  52. プロセスまたいでの復帰が可能 Key-Value で簡単なデータを格納できる
 ※複雑なデータなどは DB などに SavedState (ViewModel)

  53. SavedState (ViewModel) val vm = ViewModelProvider(this, SavedStateVMFactory(this)) .get(SavedStateViewModel"::class.java) class SavedStateViewModel(

    private val state: SavedStateHandle ) : ViewModel() { "// ""... } SavedStateVMFactory を使い、SavedStateHandle をもらうだけ
  54. ViewBinding

  55. Data binding に似ている Android Gradle plugin (3.6+) レイアウトに <layout> タグを追加しない

    Annotation processors を使用しない 双方向バインディングは出来ない ViewBinding
  56. ViewPager2

  57. ViewPager2 https://android-developers.googleblog.com/2019/05/whats-new-with-android-jetpack.html

  58. ViewPager2 https://android-developers.googleblog.com/2019/05/whats-new-with-android-jetpack.html

  59. RecyclerView.Adapter が使える DiffUtil 縦方向のサポート Right-to-left (RTL) サポート offscreenPageLimit ViewPager2

  60. Biometric Prompt

  61. FingerprintManagerの機能拡張 顔、指紋、虹彩などに対応
 (端末メーカーが対応すれば) Biometric Prompt

  62. Biometric Prompt BiometricPrompt(this, executor, object : BiometricPrompt.AuthenticationCallback() { override fun

    onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) "//todo } override fun onAuthenticationSucceeded(result: AuthenticationResult) { super.onAuthenticationSucceeded(result) "// todo } override fun onAuthenticationFailed() { super.onAuthenticationFailed() "// todo } }).authenticate(promptInfo)
  63. Conclusion..

  64. References: - https://d.android.com - https://android-developers.googleblog.com/2019/05/whats-new-with- android-jetpack.html Doc Resources

  65. Image Resources Photos: - https://unsplash.com - https://www.pexels.com Illustrations: - http://www.chojugiga.com

    - https://www.irasutoya.com
  66. twitter.com/wasabeef_jp wasabeef.jp github.com/wasabeef