いまからAndroidアプリを作るならこうしたい
仕事でandroidアプリを作ったので感想 + こうしたかったとかあるので記録がてらメモ
前提
- フリーランスとして知り合いからandroidアプリ作ってよって言われて作ったが、自分自身androidアプリ作成経験はない
- とりあえずandroid studio落としてきてkotlinでサンプルコード書いて動いたことあるレベル
- そんな人間になんで仕事来たのかは謎だがやりきった
- すでにiOSアプリはあるので、呼び出すApiやロジック等はswiftのコード見ながらいい感じにやる
- 周りに相談できる人がほぼいない
- たまにTwitterでギャーギャー言ってたら @konifar さんが助けてくれてマジで神と思った
- kotlin 1.3. + android studio 3.3. で開発
- Javaは全くわからない
- android端末自体はプライベートで持ってないのでデフォルトの挙動がいまいちわからない
アプリ自体はとあるサービスの有料会員限定で使えるサービスのものなので、URL等は貼らない
アーキテクチャ
Amazon.co.jp: 黒帯エンジニアが教えるプロの技術 Android開発の教科書 やネット上の記事を読んだりしてMVPで作ることにした。 結果的に良かったのかがあんまり実感がない。
githubだとこの辺を参考に
技術書典で売ってた本が結構良かったが、開発が終わりそうなタイミングで読んだのが微妙だった
これらのと出会って、あーもっとこう書けばよかったと思うことがめちゃくちゃあったので、先に読みたかった
- テストが書けない人のAndroid MVP (技術書典シリーズ(NextPublishing)
- 【目次付き】Wantedlyの技術をゴゴゴッ!!と詰め込んだWANTEDLY TECH BOOK5を技術書典で頒布します!
JSONのparseについて
ApiにRetrofit + JSON parseにgoogle/gson を使っていたが、サーバー側で正常時は配列なのにエラー時は空文字みたいな感じで同じキーなのに状態によって中身が変わることがあった。
型が持てないので悩んだ結果、Anyにして受けれるようにしてLinkedTreeMapをcastしてvalueを取り出すことにした
data class Item( var id: String, var data: Any )
square/moshi は使ってないんだけど、こっちならこの辺対応できるのかもしれない
ハマったところ
エミュレータのhostの書き換え
ローカルのサーバー環境がlocalhostではなく、http://development.hogehoge.com
的な感じでアクセスする必要があったので、android端末が持つhostを書き換える必要があった。
Android エミュレータの hosts ファイルを編集 - なんとなくな Developer のメモ みたいな感じでやると書き換わるんだが、その後エミュレータが起動しないという現象になる
悩みまくった結果、 $HOME/Library/Android/sdk/emulator/emulator -avd XXX(エミュレータ) -writable-system
で立ち上げた状態なら起動するので毎回ターミナルからコマンドを叩いてからエミュレータ起動という流れで開発していたが、これ以外のやり方がわからなかった
data classについて
JSONをパースするclassを最初は data class
で作っていた
data class Item(var id: String, var title: String, var url: String) interface ItemInterface { @GET("v2/items.json") fun items(): Call<List<Item>> }
しかし、データによって条件を出し分けたいみたいな関数をどうしても欲しくなって結局classにするみたいなケースが頻繁してdata classと普通のclassが混ざってすごい気持ち悪くなった
data classのベストプラクティスがよくわからない…。
アプリのクラッシュ
プッシュ通知と分析とアプリのクラッシュにfirebaseを使ってる
設定を入れるだけでパッと使えるのですげー便利
ただ最初のリリースでユーザー ID を設定し忘れたのはミスった。
ついでにクラッシュした際のログにどの画面を見ていたかみたいな操作ログも入れた
Firebase Crashlytics のクラッシュ レポートのカスタマイズ | Firebase
debugビルドの場合は hyperion-crash
ってライブラリを使ってる。
Firebase Crashlyticsの場合は若干ラグがありリアルタイムで見れるほうが便利なので、こっちを使ってる
参考にしたモノ
- DroidKaigi2018の資料一覧 - Qiita
- how to get started in developing Android app - Speaker Deck
- punchdrunker/hocho: sample app for getting started in android dev
- はじめてのKotlinハンズオン #DroidKaigi - Speaker Deck
- mixi-inc/AndroidTraining: Training course repository for android app development
- Android開発をする上で知っておいてほしいなと思うこと - こやまカニ大好き
小技
- ググっても古い情報がやっぱ多いので、Chromeの拡張でGoogle検索結果を1年以内にするは必須
- また、githubのコードは読みまくったがChromeの検索エンジン追加機能で
https://github.com/search?l=Kotlin&q=%s&type=Code
って形で追加することでchromeの検索バーからgithubでkotlinのコードを簡単に検索できるようにしたもの頻繁に使った - https://github.com/trending/kotlin?since=weekly もちょいちょい見てた
- Try Kotlin で小さいプログラミングを書いて検証してた
他にもlistの更新とかレイアウトの違いやandroid独特の動きやデザイン、ディレクトリ構成とかいろいろあるが、一旦はこんな感じで