Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Overview of Google I/O 2019 for Android

Overview of Google I/O 2019 for Android

Yuki Anzai

May 18, 2019
Tweet

More Decks by Yuki Anzai

Other Decks in Technology

Transcript

  1. Yuki Anzai • Android App Developer (2009~) • CEO of

    uPhyca Inc. (2011~) • Google Developer Expert for Android • Organizer of GTUG Girls and droid girls • Twitter : @yanzm
  2. Google I/O • 年1回開催される Google の技術者向けイベント • 会場はカリフォルニア州の Mountain View

    にある Shoreline Amphitheatre • Mountain View : いわゆるシリコンバレーにある街の⼀つ • Shoreline Amphitheatre : 屋外コンサート会場 • 今年はサングラスをくれなかった!
  3. Kotlin • Androidの公式サポート⾔語の⼀つ(他は Java, C++) • Google I/O 2017で発表 •

    Java と相互運⽤性がある • 標準ライブラリで⽤意されている関数群がリッチ • Null 安全性(Nullable 型と NonNull 型が別)
  4. Kotlin Sessions • What's New in Kotlin on Android, 2

    Years In (Google I/O'19) • https://www.youtube.com/watch?v=ldM6QZy9e0s • Kotlin Under the Hood: Understand the Internals (Google I/O'19) • https://www.youtube.com/watch?v=Ta5wBJsC39s • Understand Kotlin Coroutines on Android (Google I/O'19) • https://www.youtube.com/watch?v=BOHK_w09pVA
  5. Android Q • Share sheet • Bubbles • Notification Action

    • Dark Theme • Magnifier • Privacy • ...
  6. Share sheet session • What's new in the Android OS

    User Interface (Google I/O'19) • https://www.youtube.com/watch?v=nWbW58RMteI
  7. Bubbles • 新しい multitasking way • 画⾯にアイコンが floating で表⽰され、タップすると expand

    する • 使えるとき • Messaging, Calling, User initiated • https://developer.android.com/preview/features/bubbles
  8. What's new in the Android OS User Interface (Google I/O'19)

    https://www.youtube.com/watch?v=nWbW58RMteI
  9. Bubbles session • What's new in the Android OS User

    Interface (Google I/O'19) • https://www.youtube.com/watch?v=nWbW58RMteI
  10. Dark Theme • Dark Theme & Gesture Navigation (Google I/O'19)

    • https://www.youtube.com/watch?v=OCHEjeLC_UY&t=22s
  11. Dark Theme • theme を Dark/Light に切り替える System theme setting

    が追加された • デバイスがバッテリーセーバーモードに⼊ったら、システム UI は⾃動で Dark Theme になる • Dark Theme のサポートは強く推奨されている • Material Design : https://material.io/design/color/dark-theme.html https://developer.android.com/preview/features/darktheme
  12. Force Dark • ⾃動でアプリを dark theme に変換する • opt-in するには

    • Force Dark よりも Custom の Dark Theme を⽤意したほうがよい • とりあえず force dark の⾒た⽬を確認したい → developer options の force dark を有効にする <style name="AppTheme" parent="..."> <item name="android:forceDarkAllowed">true</item> </style>
  13. AppCompat and MDC • DayNight <style name="AppTheme" parent="Theme.AppCompat.DayNight"> ... </style>

    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> ... </style>
  14. class MyApplication : Application() { override fun onCreate() { super.onCreate()

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) // MODE_NIGHT_YES // MODE_NIGHT_NO // MODE_NIGHT_FOLLOW_SYSTEM // MODE_NIGHT_AUTO_BATTERY // MODE_NIGHT_UNSPECIFIED } } class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM } }
  15. アプリ内設定 • ユーザーがアプリのテーマを選べるようにすべき • Dark → MODE_NIGHT_YES • Light →

    MODE_NIGHT_NO • System default → MODE_NIGHT_FOLLOW_SYSTEM • Auto battery → MODE_NIGHT_AUTO_BATTERY
  16. Dark Theme 対応まとめ • AppCompat or MDC の DayNight を利⽤し、ユーザーが設定できるよう

    にする • AppCompat と MDC を v1.1.0 にアップデートする • Force Dark でとりあえずの dark theme 対応ができる • ⾊の直接指定をやめ、Theme attribute を利⽤する
  17. Privacy • パーミッション関係の変更 • Mac address のランダム化 • foreground service

    に関する変更 • Shared Storage アクセスに関するの変更 • ...
  18. Privacy • Overview of Privacy Changes in Android Q (Google

    I/O'19) • https://www.youtube.com/watch?v=bFp2n5OxYEE
  19. Overview of Privacy Changes in Android Q (Google I/O'19) https://www.youtube.com/watch?v=bFp2n5OxYEE

    Location のパーミッションに、アプリが foreground にある間だけ許可、というのが増えた
  20. Overview of Privacy Changes in Android Q (Google I/O'19) https://www.youtube.com/watch?v=bFp2n5OxYEE

    不変なデバイス識別⼦(IMEIとか)が READ_PHONE_STATE パーミッションで取得でき なくなった
  21. Overview of Privacy Changes in Android Q (Google I/O'19) https://www.youtube.com/watch?v=bFp2n5OxYEE

    MAC アドレスのランダム化がデフォルトになった (P ではオプション)
  22. Overview of Privacy Changes in Android Q (Google I/O'19) https://www.youtube.com/watch?v=bFp2n5OxYEE

    MAC アドレスのランダム化がデフォルトになった (P ではオプション)
  23. Overview of Privacy Changes in Android Q (Google I/O'19) https://www.youtube.com/watch?v=bFp2n5OxYEE

    foreground service になるときにタイプを指定 しなくてはいけなくなった
  24. Shared Storage • external storage として知られているもの • storage permission によって管理される

    storage pool • What’s New in Shared Storage (Google I/O'19) • https://www.youtube.com/watch?v=3EtBw5s9iRY
  25. Shared Storage in Q • MediaStore にデータを追加するときや、以前追加したデータにアクセス するときは permission が不要になった

    • MediaStore の他のアプリが追加したデータにアクセスするときは permission が必要 • MediaStore 外のファイルにアクセスするときは system picker 経由でな ければならない
  26. Android Studio sessions • What's New in Android Studio UI

    Design and Debugging Tools (Google I/ O'19) • https://www.youtube.com/watch?v=oWTG5g5rT4s • What's New in the Android Studio Build System (Google I/O'19) • https://www.youtube.com/watch?v=LFRCzsD7UhY • Android Studio: Tips and Tricks (Google I/O'19) • https://www.youtube.com/watch?v=ihF-PwDfRZ4
  27. Android Studio sessions • What's New in Android Studio UI

    Design and Debugging Tools (Google I/ O'19) • https://www.youtube.com/watch?v=oWTG5g5rT4s • What's New in the Android Studio Build System (Google I/O'19) • https://www.youtube.com/watch?v=LFRCzsD7UhY • Android Studio: Tips and Tricks (Google I/O'19) • https://www.youtube.com/watch?v=ihF-PwDfRZ4 ↓ 便利機能とか、ショートカットキーとかがたくさん紹介されている   オススメ
  28. Resource Manager • Android Studio 3.4 • リソース管理の新しい window •

    Batch import • Bulk import SVG and convert them to VectorDrawable • Preview all layouts • Integration with Layout Editor
  29. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  30. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  31. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  32. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  33. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  34. What's New in Android Studio UI Design and Debugging Tools

    (Google I/O'19) https://www.youtube.com/watch?v=oWTG5g5rT4s
  35. Emulator • Foldables • Headless emulator build • UIなしでエミュレータを起動 •

    CIでエミュレータを利⽤する場合に適している • https://androidstudio.googleblog.com/2019/02/emulator-2818- canary.html
  36. Emulator • Best Practices in Using the Android Emulator (Google

    I/O'19) • https://www.youtube.com/watch?v=Up3hyBSDAMA
  37. CameraX • alpha • Camera2 ベース • Android 5.0 (API

    Level 21) 以降をサポート • ML Kit など機械学習との連携が簡単 • Extension という optional add-on 機能で、ポートレイトモードやHDR などデバイス独⾃の機能をサポート
  38. CameraX • Android Jetpack: Understand the CameraX Camera-Support Library (Google

    I/O'19) • https://www.youtube.com/watch?v=kuv8uK-5CLY
  39. Android Jetpack: Understand the CameraX Camera-Support Library (Google I/O'19) https://www.youtube.com/watch?v=kuv8uK-5CLY

    動画の撮影は対応していない そこまで優先度⾼くなさそう...
  40. Jetpack Security Library • ファイル・SharePreferences の暗号化 • Android 6.0 (API

    Level 23) 以降をサポート • 保管時のデータの読み書き、キーの作成と検証に関連するセキュリティの ベストプラクティスの実装 • security best practices : https://developer.android.com/topic/ security/best-practices
  41. Jetpack Security Library • Security on Android: What's Next (Google

    I/O'19) • https://www.youtube.com/watch?v=0uG_RKiDmQY • https://developer.android.com/topic/security/data.md • https://developer.android.com/jetpack/androidx/releases/security
  42. Jetpack Benchmarking Library • Android Studio から Kotlin ベースまたは Java

    ベースのコードをすばや くベンチマークすることができるライブラリ • https://developer.android.com/studio/profile/benchmark.html androidTestImplementation "androidx.benchmark:benchmark:1.0.0-alpha01"
  43. Jetpack Benchmarking Library • Improving App Performance with Benchmarking (Google

    I/O'19) • https://www.youtube.com/watch?v=ZffMCJdA5Qc
  44. ConstraintLayout 2.x • Flexibility • Virtual Layouts • Helpers &

    Decorators • Programming APIs • Optimizer • MotionLayout • Design Tools: UI Builder, Motion Editor
  45. ConstraintLayout 2.x • What's New in ConstraintLayout (Google I/O'19) •

    https://www.youtube.com/watch?v=29gLA90m6Gk implementation "androidx.constraintlayout:constraintlayout:2.0.0-beta1"
  46. Programming APIs • ConstraintProperties val properties = ConstraintProperties(findViewById<View>(R.id.text)) properties.visibility(View.INVISIBLE) .apply()

    val set = ConstraintSet() set.clone(constraintLayout) set.setVisibility(R.id.textView, View.INVISIBLE) set.applyTo(constraintLayout)
  47. MotionLayout • ConstraintLayout のサブクラス • constrains (制約) を xml file

    に分離 • 最初と最後の ConstraintSet を指定することで、その間を⾃動でアニメー ションをさせることができる • KeyPosition, KeyAttribute, KeyTimeCycle
  48. Documentation • Reference : https://developer.android.com/reference/androidx/ constraintlayout/classes • Medium : Introduction

    to MotionLayout part I ~ IV • Sample : https://github.com/googlesamples/android- ConstraintLayoutExamples
  49. Kotlin First! • ktx • Kotlin だけの機能 • Kotlin 向けの

    API デザイン • coroutines サポート • ...
  50. Data Binding • コンパイルが⾼速化 • Distributed build cache をサポート •

    Incremental annotation processing • experimental 機能 : android.databinding.incremental = true • Android Studio 3.5 でより⾼機能な Refactoring support • Better error message
  51. by viewModels() class MainActivity : AppCompatActivity() { private lateinit var

    viewModel: MainViewModel override fun onCreate(savedInstanceState: Bundle?) { ... viewModel = ViewModelProviders.of(this) .get(MainViewModel::class.java) implementation "androidx.activity:activity-ktx:1.0.0-alpha08" implementation "androidx.fragment:fragment-ktx:1.1.0-alpha09" class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModels()
  52. WorkManager • On-demand initialization • 必要になったときだけ WorkManager を初期化 • WorkManage

    2.1.0 alpha • Google Play Services integration • totally optional, No API changes • Coming soon
  53. WorkManager • Robolectric support • stable • Worker unit testing

    • TestWorkerBuilder, TestListenableWorkerBuilder • 2.1.0 alpha
  54. 次の version の Paging では... • エラー処理含めた built in のネットワークサポート

    • headers & footers • RxJava & Coroutines 対応の改善 • Soon in EAP, alpha this summer
  55. 次の version の Navigation では... • ViewModels scoped Navigation Graphs

    • Navigated by URI • Dialog destinations • Future: Better support for dynamic features
  56. • What's New in Google Play (Google I/O'19) • https://www.youtube.com/watch?v=o_oUeciBknU

    • Customizable Delivery with the App Bundle and Easy Sharing of Test Builds (Google I/O'19) • https://www.youtube.com/watch?v=flhib2krW7U Google Play sessions
  57. App Bundle • apk とは別の publishing format • 拡張⼦は .aab

    • デバイスが必要とするリソースだけをアプリにダウンロード&インストー ル • Google のアプリも多くが App Bundle に移⾏した
  58. Customizable Delivery with the App Bundle and Easy Sharing of

    Test Builds (Google I/O'19) https://www.youtube.com/watch?v=flhib2krW7U
  59. Customizable Delivery with the App Bundle and Easy Sharing of

    Test Builds (Google I/O'19) https://www.youtube.com/watch?v=flhib2krW7U
  60. Conditional delivery • dynamic feature modules を指定した条件を満たすデバイスにのみ配信 する機能 • Country(国),

    minSDK version, Device の機能(カメラがあるかな ど)で指定できる • https://developer.android.com/studio/projects/dynamic-delivery/ conditional-delivery
  61. On-demand delivery • 特定の dynamic feature module を on-demand にインストール・削除

    する機能 • https://developer.android.com/studio/projects/dynamic-delivery/ on-demand-delivery • 例)Contact support 機能を必要になってからインストールする • 例)オンボーディング処理が終わったら、オンボーディング機能を削除す る
  62. Customizable Delivery with the App Bundle and Easy Sharing of

    Test Builds (Google I/O'19) https://www.youtube.com/watch?v=flhib2krW7U
  63. Internal app sharing • apk や App Bundle を Google

    Play にアップロードすることで、リンク 経由で社内チームやテスターがダウンロード&インストールできる機能 • https://support.google.com/googleplay/android-developer/ answer/9303479 New Tools to Optimize Your App's Size and Boost Installs on Google Play (Google I/O'19) https://www.youtube.com/watch?v=rEuwVWpYBOY
  64. Internal app sharing • アップロードする⼈は Play Console のメンバーでなくてもよい • production

    key で署名しなくてもよい = デバッグビルドでもよい • version code 制限がない • メーリングリストで配信先を制限 or リンクを知っている⼈は誰でもダウ ンロード可能
  65. Internal app sharing • https://play.google.com/apps/publish/internalappsharing/ にビルド した apk/aab をアップロード •

    ⽣成されたリンクからアプリをインストールできる • インストールする側は PlayStore アプリで開発者モードになり、 Internal app sharing を有効にする必要がある
  66. Customizable Delivery with the App Bundle and Easy Sharing of

    Test Builds (Google I/O'19) https://www.youtube.com/watch?v=flhib2krW7U
  67. Installs on Google Play • Google Play でのインストールに関する改善 • Uninstall

    Wizard • Optimized downloads • Optimized native libraries • Peer-to-peer • Data at no cost
  68. Installs on Google Play • New Tools to Optimize Your

    App's Size and Boost Installs on Google Play (Google I/O'19) • https://www.youtube.com/watch?v=rEuwVWpYBOY
  69. App size • App upload size • App download size

    → インストール率に影響する • App size on device [new] → アンインストール率に影響する
  70. Google Play の統計に app download size と app size on

    device が含まれる ようになった
  71. Google Play console に app download size と app size

    on device に関する 情報が含まれるようになった
  72. Google Play console でアプリのサイズ (app download size と app size

    on device) の時間変化が⾒れるようになった
  73. Play Billing • What's New with Google Play Billing (Google

    I/O'19) • https://www.youtube.com/watch?v=N4004Set4F8
  74. Play Billing Library 2.0 • Kotlin と C++ 版は coming

    soon • Billing Library が official way に • AIDL/Billing Library 1.x は deprecated • https://developer.android.com/google/play/billing/ billing_library_releases_notes
  75. What's New with Google Play Billing (Google I/O'19) https://www.youtube.com/watch?v=N4004Set4F8 Install

    時に Subscribe(フリートライアル → Subscribe) するプランが追加された
  76. What's New with Google Play Billing (Google I/O'19) https://www.youtube.com/watch?v=N4004Set4F8 in-app

    での購⼊に任意の data を添付できるようになった A/B テストや、ユーザーの identify に便利
  77. Subscription • Subscribe & Install • one time promotion codes

    • Pause subscription • Subscription を Pause できるようになっ た(今まではキャンセルのみ)
  78. Subscription • Subscribe & Install • one time promotion codes

    • Pause subscription • Cancel Survey report on console •
  79. Subscription • Subscribe & Install • one time promotion codes

    • Pause subscription • Cancel Survey report on console • Longer Grace Period 課⾦処理の失敗で Subscription が⽌まった ときの猶予期間を⻑くできるようになった (今までは 3 - 7⽇)
  80. Modularize sessions • Build a Modular Android App Architecture (Google

    I/O'19) • https://www.youtube.com/watch?v=PZBg5DIzNww • Build Testable Apps for Android (Google I/O'19) • https://www.youtube.com/watch?v=VJi2vmaQe6w