Slide 1

Slide 1 text

今から始める Android アプリ開発 七尾 貴史, 菊間 英行

Slide 2

Slide 2 text

We are 七尾 貴史 / punchdrunker 2009年 GDDでHT-03A(Android1.5)を貰っ て、Androidアプリを作り始め、同時期にiOS アプリ開発も始める 2011年 ミクシィ入社 SNS mixiの開発 2016年 家族アルバムみてねの開発 菊間 英行 / hidey 2010年 ミクシィ入社 APIの開発 2011年 mixi API SDK for Android の開発を担 当 2012年 SNS mixi Android版の開発 2015年 モンスト海外版のクライアント開発 2017年 minimoの開発

Slide 3

Slide 3 text

はじめに 本日の題材となるアプリはPlayStoreで公開されています。 hocho で検索してみてください。 また、スライド以外の資料は全てGithubにまとまっています https://github.com/punchdrunker/hocho wikiには今日話す内容が全て書かれているので、聞き逃したと ころがあれば見直してみてください

Slide 4

Slide 4 text

Index このセッションでは以下の内容について解説します ● 開発環境の準備 ● 基礎知識 ● Activity と Fragment ● レイアウト ● 通知 ● 非同期処理とネットワーク通信 ● アーキテクチャ ● テストとCI ● デバッグ

Slide 5

Slide 5 text

Environment 推奨の装備 いずれもCPUが強ければ強いほどよいです。メモリは最低16GBくらい は欲しい。 Linux ややセットアップに時間がかかるが、速いのでコスパ最強 Windows セットアップはLinuxよりは楽。Android端末のドライバインストールな ど、ちょっと面倒だがコスパは良い。 Mac セットアップが一番楽。動作スピード考えるとコスパは一番悪いが、iOS と掛け持ちなど必要であればMac一択。

Slide 6

Slide 6 text

Developer option 連打 出現 (おまけ)連打すると イースターエッグ

Slide 7

Slide 7 text

Developer option よく使う設定 ● スリープモードにしない ● USBデバッグ(必須) ● レイアウト境界を表示 ● アクティビティを保持しない

Slide 8

Slide 8 text

Basic Knowledge Android Studioの実際の画面を見ながら以下のような項目について眺 めていきましょう ● gradle ● AndroidManifest.xml ● JavaやKotlinなどのプログラム ● 画像などのリソース

Slide 9

Slide 9 text

See also ● Android Studio30分集中超絶技巧100選(day2 10:30) ● buildに関するドキュメント ○ https://developer.android.com/studio/projects/index.html ○ https://developer.android.com/studio/build/index.html ○ https://developer.android.com/studio/build/gradle-tips.html ○ https://docs.gradle.org/current/userguide/userguide.html ○ http://google.github.io/android-gradle-dsl/current/ ● アプリマニフェスト ○ https://developer.android.com/guide/topics/manifest/manifest-intro.html

Slide 10

Slide 10 text

Activity Activity ● 画面を提供するコンポーネン ト ● ライフサイクルの概念を持っ ている ● Manifest内で宣言されてい るActivityのみが有効

Slide 11

Slide 11 text

Intent Androidのコンポーネントを呼び出す時に使うメッセージ ● アプリ内の画面遷移 ● 他のアプリの機能を呼び出す(ex. camera,map,web ● 他のアプリから呼び出される定義をする(Intent Filter)

Slide 12

Slide 12 text

Runtime Permission 特定の操作を行う際にユーザーに明示的に許 可を求める必要がある場合がある ● カメラを起動する ● 位置情報を取得する ● 連絡帳にアクセスする ● 電話をかける ● etc…

Slide 13

Slide 13 text

Fragment Fragment ● スワイプ出来る画面など一 つのActivityに複数の画面 がある場合などに使う ● ハマりポイントは多いのでむ やみに使わないほうが無難

Slide 14

Slide 14 text

See also ● Activityの公式ドキュメント ○ https://developer.android.com/guide/components/activities.html ● IntentとIntent Filter ○ https://developer.android.com/guide/components/intents-filters.html ● 一般的なIntent ○ https://developer.android.com/guide/components/intents-common.html ● タスクとバックスタック ○ https://developer.android.com/guide/components/tasks-and-back-stack.h tml ● システムパーミッション ○ https://developer.android.com/guide/topics/security/permissions.html ○ PermissionsDispatcher ■ https://github.com/permissions-dispatcher/PermissionsDispatcher

Slide 15

Slide 15 text

Resource Androidアプリ開発ではリソースという言葉がよく出てきますが、一般的 にはresディレクトリ内にあるような以下のものは全てリソースです。 ● string ● drawable ● layout ● style ● color 各ディレクトリやファイルは -v21 や -ja などの語尾をつける事によって OSバージョンや言語などの優先指定をすることができます。

Slide 16

Slide 16 text

Layout サンプルアプリのLayoutActivityを例にどの ような部品を使えるのか眺めてみましょう ● レイアウト ○ LinearLayout , ConstraintLayout ... ● コンポーネント ○ Button, TextView, ImageView... ● ナビゲーション ○ DrawerLayout, TabLayout... ● リスト ○ ListView, RecyclerView... ● DataBinding

Slide 17

Slide 17 text

DataBinding 使い方 ● 外側をタグで囲む ● Make ProjectするとパスカルケースでBindingクラスが生成される ○ activity_layout.xmlならActivityLayoutBindingというクラスが 生成される ● xmlの部品にandroid:idを振っておくと、binding.likeButtonのように 参照できる ● タグの中にタグを記述すると変数をアサイン出来 る

Slide 18

Slide 18 text

See also ● DataBindingのコードを読む (day1 14:00) ● データバインディングライブラリ(公式ガイド) ○ https://developer.android.com/topic/libraries/data-binding/i ndex.html?hl=ja ● 3分で分かる?Android OのAdaptive Iconに対応しよう ○ https://qiita.com/takahirom/items/696fb5ecaa230fa8f755

Slide 19

Slide 19 text

NotificationChannel NotificationChannelGroup Notification ● 通知 ⧣ プッシュ通知 ● Android8.0から NotificationChannel必須 NotificationChannelを作成 Android8.0以上? ChannelIdを指定して通知を表 示 YES NO

Slide 20

Slide 20 text

create NotificationChannel // 通知チャンネルを作成して val channel = NotificationChannel(“channel_id”, “表示名”, impotance) notificationManager.createNotificationChannel(channel) // 通知チャンネルを指定する val builder = NotificationCompat.Builder(this, “channel_id”) .setSmallIcon(R.drawable.ic_notification) .setContentTitle("this is title") .setContentText("Hello!") // 通知を表示 notificationManager.notify(notificationAppId, builder.build())

Slide 21

Slide 21 text

See also ● 開発者が知っておきたい通知の歴史 (day2 18:30-) ● マーケティングオートメーションツールとアプリエンジニア プッシュ通 知・お知らせダイアローグの運用自動化のためのお仕事 (day2 14:50-) ● Notifications - material.io ○ https://material.io/guidelines/patterns/notifications.html ● 通知 APIガイド (日本語は内容が古いので、英語を開いてください) ○ https://developer.android.com/guide/topics/ui/notifiers/noti fications.html?#ManageChannels

Slide 22

Slide 22 text

Async process & Network access アプリの使い心地を良くするために必須となる考え方です。 UIを管理するスレッドはUIの更新だけ行い、ネットワーク通信やファイル操作など、時間 のかかる処理は別のスレッドに任せる事で、画面の描画をスムーズに行うことができま す。 実際のコードを見ながら色々な種類の非同期処理を眺めてみましょう。 メインスレッド 別のスレッド likeボタンを押す likeの数が画面に 反映される APIへPOST 通信中もユーザーの操作を 受け付ける事が可能

Slide 23

Slide 23 text

See also ● 幸せな非同期処理ライフを満喫するための基礎から応用まで ○ https://qiita.com/KeithYokoma/items/4e6e9bd4e44aab634 24d ● Coroutines ○ https://kotlinlang.org/docs/reference/coroutines.html ● RxJava ○ https://github.com/ReactiveX/RxJava

Slide 24

Slide 24 text

Architecture ● Androidで見かけるアーキテクチャ ○ MVP ○ MVVM ○ Android Clean Architecture ● アーキテクチャを導入することでやりたいこと

Slide 25

Slide 25 text

Fat Activity ● アンチパターンの一つ ● サンプル実装程度であれば困らないのでわかってやっている こともある ○ コピペ ダメ。絶対。 ● テストがやりづらい

Slide 26

Slide 26 text

MVP https://github.com/googlesamples/android-architecture/tree/todo-mvp

Slide 27

Slide 27 text

MVVM https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding

Slide 28

Slide 28 text

Android Clean Architecture https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean

Slide 29

Slide 29 text

See also ● How to improve your MVP architecture and tests (day1 11:20) ● Inside Android Architecture Components(day1 11:20) ● Android Back to the Future(day1 12:50) ● Android における Model-View-Intent アーキテクチャ(day1 12:50) ● MVVMベストプラクティス(day1 15:40) ● Kotlin版CleanArchitectureのテンプレート作ったら爆速開発になった話+α(day1 16:50) ● Flux: Utilize unidirectional data flow to think less and scale faster(day2 11:20) ● All you need is isolating the domain (How to apply DDD to Android Application Development 2) (day2 15:40)

Slide 30

Slide 30 text

See also ● Android アプリ設計パターン入門 ○ https://peaks.cc/books/architecture_patterns ● Androidアーキテクチャことはじめ ― 選定する意味と、MVP、Clean Architecture、MVVM、Fluxの特徴を理解する ○ https://employment.en-japan.com/engineerhub/entry/2018/01/17/1100 00 ● Android Architecture Blueprints ○ https://github.com/googlesamples/android-architecture ○ いくつかのアーキテクチャのサンプル実装 ● Android-CleanArchitecture ○ https://github.com/android10/Android-CleanArchitecture ● Flux ○ https://github.com/facebook/flux

Slide 31

Slide 31 text

Test & CI 自動テスト チーム開発をする上では必須の仕組みです。Androidでは主に単体テ ストとUIテストの2種類あります。 単体テスト(ユニットテスト) 特定のメソッドが、ある入力を受けると期待した出力や状態の変化をす るか、みたいな事をチェックするのが単体テストです。 通常、JUnitというフレームワークが利用されます。 UIテスト 「ある画面でテキストを入力後、投稿ボタンを押すとコメントが画面に反 映される」みたいな事を確認するのがUIテストです。 EspressoやUIAutomatorというフレームワークが利用されます。

Slide 32

Slide 32 text

Test & CI CI コードがpushされる度にアプリがちゃんとビルドできるか、テストが通る かを自動で確認してくれる仕組みです。 テスト以外にも以下のようなツールを実行することが多いです。 lint コードが汚くなると教えてくれるツール(静的解析)。 Danger CIでいろいろなチェックをするのに便利なrubyのツール。差分が大きす ぎると注意したり、差分の内容もチェックできるので、自前の静的解析み たいな事もできる。

Slide 33

Slide 33 text

See also ● はじめてのUnit Test (day1 14:00) ● UIテストの実行時間を短縮させる方法 (day2 18:30-) ● アプリのテスト(公式リファレンス) ○ https://developer.android.com/studio/test/index.html? hl=ja

Slide 34

Slide 34 text

Debug 実際にアプリの開発を進めると、半分くらいはデバッグ作業です。普段 どのようなデバッグを行っているか紹介します。 ● ログを読む/書く ○ logcat ○ Timber ● 監視 ○ Stetho ○ Leakcanary ○ プロファイラ ● クラッシュ対応 ○ Crashlytics ○ Google Play Console

Slide 35

Slide 35 text

おまけ おすすめの情報収集方法 (全部英語です ) ● https://www.reddit.com/r/androiddev/ ● https://android-developers.googleblog.com/ ● https://blog.jetbrains.com/kotlin/ ● https://blog.gradle.org/ ● https://medium.com/google-developers 英語が苦手な人は英語の情報を追いかけてる人をフォローすると よさそう

Slide 36

Slide 36 text

FIN