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

how to get started in developing Android app

punchdrunker
February 08, 2018

how to get started in developing Android app

DroidKaigi2018での発表資料です

punchdrunker

February 08, 2018
Tweet

More Decks by punchdrunker

Other Decks in Technology

Transcript

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

    View Slide

  2. 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の開発

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. 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

    View Slide

  10. Activity
    Activity
    ● 画面を提供するコンポーネン

    ● ライフサイクルの概念を持っ
    ている
    ● Manifest内で宣言されてい
    るActivityのみが有効

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. 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

    View Slide

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

    YES
    NO

    View Slide

  20. 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())

    View Slide

  21. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. 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)

    View Slide

  30. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. おまけ
    おすすめの情報収集方法 (全部英語です )
    ● 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
    英語が苦手な人は英語の情報を追いかけてる人をフォローすると
    よさそう

    View Slide

  36. FIN

    View Slide