Pro Yearly is on sale from $80 to $50! »

how to get started in developing Android app

how to get started in developing Android app

DroidKaigi2018での発表資料です

4f31137c606d3d1c06d0d86fc7fd4bdd?s=128

punchdrunker

February 08, 2018
Tweet

Transcript

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

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

  4. Index このセッションでは以下の内容について解説します • 開発環境の準備 • 基礎知識 • Activity と Fragment

    • レイアウト • 通知 • 非同期処理とネットワーク通信 • アーキテクチャ • テストとCI • デバッグ
  5. Environment 推奨の装備 いずれもCPUが強ければ強いほどよいです。メモリは最低16GBくらい は欲しい。 Linux ややセットアップに時間がかかるが、速いのでコスパ最強 Windows セットアップはLinuxよりは楽。Android端末のドライバインストールな ど、ちょっと面倒だがコスパは良い。 Mac

    セットアップが一番楽。動作スピード考えるとコスパは一番悪いが、iOS と掛け持ちなど必要であればMac一択。
  6. Developer option 連打 出現 (おまけ)連打すると イースターエッグ

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

    アクティビティを保持しない
  8. Basic Knowledge Android Studioの実際の画面を見ながら以下のような項目について眺 めていきましょう • gradle • AndroidManifest.xml •

    JavaやKotlinなどのプログラム • 画像などのリソース
  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
  10. Activity Activity • 画面を提供するコンポーネン ト • ライフサイクルの概念を持っ ている • Manifest内で宣言されてい

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

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

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

  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
  15. Resource Androidアプリ開発ではリソースという言葉がよく出てきますが、一般的 にはresディレクトリ内にあるような以下のものは全てリソースです。 • string • drawable • layout •

    style • color 各ディレクトリやファイルは -v21 や -ja などの語尾をつける事によって OSバージョンや言語などの優先指定をすることができます。
  16. Layout サンプルアプリのLayoutActivityを例にどの ような部品を使えるのか眺めてみましょう • レイアウト ◦ LinearLayout , ConstraintLayout ...

    • コンポーネント ◦ Button, TextView, ImageView... • ナビゲーション ◦ DrawerLayout, TabLayout... • リスト ◦ ListView, RecyclerView... • DataBinding
  17. DataBinding 使い方 • 外側を<layout>タグで囲む • Make ProjectするとパスカルケースでBindingクラスが生成される ◦ activity_layout.xmlならActivityLayoutBindingというクラスが 生成される

    • xmlの部品にandroid:idを振っておくと、binding.likeButtonのように 参照できる • <data>タグの中に<variable>タグを記述すると変数をアサイン出来 る
  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
  19. NotificationChannel NotificationChannelGroup Notification • 通知 ⧣ プッシュ通知 • Android8.0から NotificationChannel必須

    NotificationChannelを作成 Android8.0以上? ChannelIdを指定して通知を表 示 YES NO
  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())
  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
  22. Async process & Network access アプリの使い心地を良くするために必須となる考え方です。 UIを管理するスレッドはUIの更新だけ行い、ネットワーク通信やファイル操作など、時間 のかかる処理は別のスレッドに任せる事で、画面の描画をスムーズに行うことができま す。 実際のコードを見ながら色々な種類の非同期処理を眺めてみましょう。

    メインスレッド 別のスレッド likeボタンを押す likeの数が画面に 反映される APIへPOST 通信中もユーザーの操作を 受け付ける事が可能
  23. See also • 幸せな非同期処理ライフを満喫するための基礎から応用まで ◦ https://qiita.com/KeithYokoma/items/4e6e9bd4e44aab634 24d • Coroutines ◦

    https://kotlinlang.org/docs/reference/coroutines.html • RxJava ◦ https://github.com/ReactiveX/RxJava
  24. Architecture • Androidで見かけるアーキテクチャ ◦ MVP ◦ MVVM ◦ Android Clean

    Architecture • アーキテクチャを導入することでやりたいこと
  25. Fat Activity • アンチパターンの一つ • サンプル実装程度であれば困らないのでわかってやっている こともある ◦ コピペ ダメ。絶対。

    • テストがやりづらい
  26. MVP https://github.com/googlesamples/android-architecture/tree/todo-mvp

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

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

  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)
  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
  31. Test & CI 自動テスト チーム開発をする上では必須の仕組みです。Androidでは主に単体テ ストとUIテストの2種類あります。 単体テスト(ユニットテスト) 特定のメソッドが、ある入力を受けると期待した出力や状態の変化をす るか、みたいな事をチェックするのが単体テストです。 通常、JUnitというフレームワークが利用されます。

    UIテスト 「ある画面でテキストを入力後、投稿ボタンを押すとコメントが画面に反 映される」みたいな事を確認するのがUIテストです。 EspressoやUIAutomatorというフレームワークが利用されます。
  32. Test & CI CI コードがpushされる度にアプリがちゃんとビルドできるか、テストが通る かを自動で確認してくれる仕組みです。 テスト以外にも以下のようなツールを実行することが多いです。 lint コードが汚くなると教えてくれるツール(静的解析)。 Danger

    CIでいろいろなチェックをするのに便利なrubyのツール。差分が大きす ぎると注意したり、差分の内容もチェックできるので、自前の静的解析み たいな事もできる。
  33. See also • はじめてのUnit Test (day1 14:00) • UIテストの実行時間を短縮させる方法 (day2

    18:30-) • アプリのテスト(公式リファレンス) ◦ https://developer.android.com/studio/test/index.html? hl=ja
  34. Debug 実際にアプリの開発を進めると、半分くらいはデバッグ作業です。普段 どのようなデバッグを行っているか紹介します。 • ログを読む/書く ◦ logcat ◦ Timber •

    監視 ◦ Stetho ◦ Leakcanary ◦ プロファイラ • クラッシュ対応 ◦ Crashlytics ◦ Google Play Console
  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 英語が苦手な人は英語の情報を追いかけてる人をフォローすると よさそう
  36. FIN