Slide 1

Slide 1 text

Google I/O 2018 に⾒見見る これからの Android アプリ開発⽅方法 あんざいゆき @yanzm

Slide 2

Slide 2 text

• blog : Y.A.M の雑記帳 • y-anz-m.blogspot.com • twitter : @yanzm (やんざむ) • uPhyca Inc. (株式会社ウフィカ) • Google Developer Expert for Android あんざいゆき

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

10 years • いろんな UI の流⾏行行り → OS のデザイン変遷 → Material Design → Material Theming • 新しい機能のバックポートが欲しい → Support Library • ユースケースに対し様々な実現⽅方法 → ベストプラクティス → Jetpack • いろんなアプリが電池を消費 → OS で制限 → Doze, App Standby • アプリのサイズがどんどんでかくなって⼤大変 → Android App Bundle • アプリがどんどん複雑になって⼤大変 → Android Architecture Components

Slide 5

Slide 5 text

Google Play upload 要件 • targetSdkVersion を最新の stable(今だと 26)にしない と Google Play に apk を upload できなくなる • 2018年年8⽉月 〜 : 新規のアプリ • 2018年年11⽉月〜 : 既存のアプリ • https://android-developers.googleblog.com/2017/12/ improving-app-security-and-performance.html

Slide 6

Slide 6 text

Google Play upload 要件 • native libraries は 64-bit version を提供しないと Google Play に apk を upload できなくなる • 2019年年8⽉月 〜 • https://android-developers.googleblog.com/2017/12/ improving-app-security-and-performance.html

Slide 7

Slide 7 text

IDE : Android Studio • https://developer.android.com/studio/ • IntelliJ IDEA ベース • 最新の stable : Android Studio 3.1

Slide 8

Slide 8 text

IDE : Android Studio Preview • https://developer.android.com/studio/preview/ • Canary Channel : ⼀一番最新の開発バージョン • Dev Channel : Canary の次 • Beta Channel : Dev の次 • Stable Channel : 安定版

Slide 9

Slide 9 text

Channel Setting • [Android Studio] - [Preferences…] - [Appearance & Behavior] - [System Settings] - [Updates]

Slide 10

Slide 10 text

Emulator • 今のエミュレータはめちゃ速い(昔は遅かった) • Play Store ⼊入りも作れる

Slide 11

Slide 11 text

⾔言語 • Java • Kotlin • https://developer.android.com/kotlin/ • https://codelabs.developers.google.com/codelabs/build- your-first-android-app-kotlin/ • https://codelabs.developers.google.com/codelabs/taking- advantage-of-kotlin/ • C++

Slide 12

Slide 12 text

デザイン

Slide 13

Slide 13 text

Material Design • https://material.io/ • Material Design is a visual language that synthesizes the classic principles of good design with the innovation of technology and science. • Google I/O 2014 で発表 • Google が⼈人とお⾦金金と時間をかけてリサーチ • Develop : https://material.io/develop/

Slide 14

Slide 14 text

Material Theming • プロダクトのブランドをよりよく反映させるために、体 系的に Mateiral Design をカスタマイズする機能 • https://material.io/design/material-theming/#material- theming • Tools • Material Theme Editor • Gallery

Slide 15

Slide 15 text

Material Theme Editor • Sketch Plugin • Sketch https://www.sketchapp.com/ • https://material.io/tools/theme-editor/ • コードラボ • https://codelabs.developers.google.com/codelabs/ theme-editor-designlab/

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Gallery • https://gallery.io/login • デザインした画⾯面のストック&共有 • Google Account でログイン • バージョン管理理 • コメント • Inspect, Material Components へのリンク • Material Theme Editor 連携

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Upload from Sketch to Gallery

Slide 29

Slide 29 text

Material Gallery App (Android, iOS) • https://gallery.io/apps • Gallery Project の各 image を デバイスで表示 • コメント⼊入⼒力力 https://www.youtube.com/watch?v=TIB3q68ZHYw

Slide 30

Slide 30 text

レイアウト • ConstraintLayout • 制約(Constraint)を指定して View を配置 • レイアウトエディタ対応 • https://developer.android.com/training/constraint-layout/ • CoordinatorLayout • Behavior を指定して View の動きを制御

Slide 31

Slide 31 text

レイアウトエディタ • GUI でレイアウトを編集 • Android では XML で レイアウトを定義 • GUI での変更更は XML に適⽤用される • https:// developer.android.com/ studio/write/layout-editor

Slide 32

Slide 32 text

Support Library To AndroidX

Slide 33

Slide 33 text

AndroidX • 今までの Support Library の package と artifact が変わる • android.support.* → androidx.* など • https://developer.android.com/topic/libraries/support- library/refactor • https://android-developers.googleblog.com/2018/05/hello- world-androidx.html • いままでの package での Support Library は 28.0.0 が最後 のリリースになる

Slide 34

Slide 34 text

AndroidX • ⾃自分のアプリのソースコードだけでなく、利利⽤用している ライブラリ内も変更更が必要 • [Refactor] - [Refactor to AndroidX…] • Android Studio 3.2 Canary • compileSdkVersion 28 以上 • 28はまだないので “android-P”

Slide 35

Slide 35 text

Android Jetpack

Slide 36

Slide 36 text

What is Android Jetpack? • Android Jetpack はすぐれた Android アプリを作るための コンポーネント・ツール・ガイダンスのセット • https://android-developers.googleblog.com/2018/05/ use-android-jetpack-to-accelerate-your.html • 使う使わないは⾃自由 • 使いたいものだけ使えばよい

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Jetpack : Foundation

Slide 39

Slide 39 text

Foundation • AppCompat : 必須 • Android KTX : Kotlin で開発するなら⼊入れると便便利利 • Multidex : 必要になれば必須 • Test : 必須

Slide 40

Slide 40 text

Jetpack : UI

Slide 41

Slide 41 text

Animation & Transition • ほぼ必須 • ObjectAnimator • Transition Support Library • DynamicAnimation implementation 'com.android.support:transition:28.0.0-alpha1' implementation 'androidx.transition:transition:1.0.0-alpha1' implementation 'com.android.support:support-dynamic-animation:28.0.0-alpha1' implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0-alpha1'

Slide 42

Slide 42 text

Emoji • アプリとして必要なら implementation 'com.android.support:support-emoji-appcompat:28.0.0-alpha1' implementation 'com.android.support:support-emoji-bundled:28.0.0-alpha1' implementation 'com.android.support:support-emoji:28.0.0-alpha1' implementation 'androidx.emoji:emoji-appcompat:1.0.0-alpha1' implementation 'androidx.emoji:emoji-bundled:1.0.0-alpha1' implementation 'androidx.emoji:emoji:1.0.0-alpha1'

Slide 43

Slide 43 text

Fragment • ほぼ必須 • Framework の Fragment は Deprecated • Support Library の Fragment を使う implementation 'com.android.support:support-fragment:28.0.0-alpha1' implementation 'androidx.fragment:fragment:1.0.0-alpha1'

Slide 44

Slide 44 text

Layout • AppCompat : 必須 • ConstraintLayout : 必須 • CoordinatorLayout : ほぼ必須 implementation 'com.android.support:appcompat-v7:28.0.0-alpha1' implementation 'com.android.support.constraint:constraint-layout:28.0.0-alpha1' implementation 'com.android.support:coordinatorlayout:28.0.0-alpha1' implementation 'androidx.appcompat:appcompat:1.0.0-alpha1' implementation 'androidx.constraintlayout:constraintlayout:1.1.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0-alpha1'

Slide 45

Slide 45 text

Design Support Library • 必須 • Material Design に対応した Components 集 implementation 'com.android.support:design:28.0.0-alpha1' implementation 'com.google.android.material:material:1.0.0-alpha1'

Slide 46

Slide 46 text

Palette • アプリの機能として必要なら • 画像から⾊色をピックするライブラリ implementation 'com.android.support:palette-v7:28.0.0-alpha1' implementation 'androidx.palette:palette:1.0.0-alpha1'

Slide 47

Slide 47 text

Jetpack : Behavior

Slide 48

Slide 48 text

Behavior • Download Manager : ダウンロード機能が必要なら • Media & Playback : ⾳音楽や動画再⽣生機能が必要なら • Permissions : ランタイムパーミッション対応は必須 • Notifications : Channel 対応は必須 • Sharing : 共有機能はユーザビリティ的にほぼ必須

Slide 49

Slide 49 text

Slices • New • https://developer.android.com/guide/slices/ • ⾃自分のアプリの情報を他のアプリに表示する仕組み • Google Search が 2018 summer 対応予定 implementation 'androidx.slice:slice-core:1.0.0-alpha2' implementation 'androidx.slice:slice-builders:1.0.0-alpha2'

Slide 50

Slide 50 text

Jetpack : Architecture

Slide 51

Slide 51 text

Architecture • Data Binding : 使いたければ • Lifecycles : LiveData を使うなら • LiveData : 便便利利 • ViewModel : すごい便便利利 • Room : 使いたければ

Slide 52

Slide 52 text

Navigation • New • 遷移関係を XML で宣 ⾔言的にかける • 実際の遷移時には結局 コードが必要 • 便便利利度はまだよくわか らない

Slide 53

Slide 53 text

Navigation • https://developer.android.com/topic/libraries/architecture/ navigation/ • コードラボ • https://codelabs.developers.google.com/codelabs/ android-navigation/ implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha01' implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha01'

Slide 54

Slide 54 text

WorkManager • New • API Level 14 以降に対応 • 内部で JobScheduler や (あれば) FirebaseJobDispatcher や AlarmManager を利利⽤用 • Background Service がシステムによって終了了させられる ようになったので、WorkManager に切り替える

Slide 55

Slide 55 text

WorkManager • ⼀一度切りの⾮非同期処理理、定期的なタスク、両⽅方サポート • 実⾏行行を保証 • 制約(ネットワークに接続した時、電源につながった時 など)をサポート • Work(処理理)の組み合わせ(並列列、直列列)をサポート • Google Play Services が使えないデバイスもOK

Slide 56

Slide 56 text

WorkManager • https://developer.android.com/topic/libraries/architecture/ workmanager • コードラボ • https://codelabs.developers.google.com/codelabs/ android-workmanager/ implementation 'android.arch.work:work-runtime:1.0.0-alpha02'

Slide 57

Slide 57 text

リリース

Slide 58

Slide 58 text

APK • Android アプリの配布形 式 • [Build] - [Build Bundle(s) / APK(s)] - [Build APK(s)] • [Build] - [Generate Signed Bundle / APK] - [APK]

Slide 59

Slide 59 text

APK analyzer • [Build] - [Analyze APK…] • APK のサイズ、リソース、 Manifest などが⾒見見れる

Slide 60

Slide 60 text

Android App Bundle • 解像度やCPUなどデバイ スのスペックに必要なリ ソースだけインストール する仕組み • [Build] - [Build Bundle(s) / APK(s)] - [Build Bundle(s)] • [Build] - [Generate Signed Bundle / APK] - [Bundle]

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

Android App Bundle • https://developer.android.com/guide/app-bundle/ • https://developer.android.com/platform/technology/app- bundle/ • コードラボ • https://codelabs.developers.google.com/codelabs/ your-first-dynamic-app/

Slide 63

Slide 63 text

まとめ

Slide 64

Slide 64 text

まとめ • 今後 targetSdkVersion は最新の stable に • Material Theme Editor、Gallery を使ってみよう • Kotlin で書いてみよう • Jetpack の機能を把握しておこう • アプリのサイズが⼤大きいなら Android App Bundle の利利⽤用 を検討しよう