Androidアプリ開発を始める 2020年春版

2019年のはこちら。 丸一年経ったので今年の知識の棚卸しも兼ねて。

blog.dr1009.com

はじめに

昨年版と同様に、本項の目的は下記2つです。

  • サーバーサイド開発等の経験があるエンジニアが、Android開発を始める際に参考となる資料をまとめる
  • 2020年で当たり前とされる技術を整理する

Androidアプリの開発環境を整える

AndroidStudioの導入

developer.android.com

必ず公式ドキュメントを参考にしてインストールしましょう。 最近では公式ドキュメントの大半を日本語で読むことができるようになっています。

開発を始めてみようと思ったら、ドキュメント通りに手を動かしてみることを強くお勧めします。

Flutter

2019年からの大きな違いの一つに、Flutterの存在感が増したことがあります。

flutter.dev

雑に書いてしまえば、Webアプリをベースとしたサービスのアプリであれば、FlutterによりAndroidアプリを開発してしまった方が早いかもしれません。 このため、開発を行う対象によってはKotlinによるAndroidアプリ開発を経ず、FlutterによるAndroidアプリ開発を始めてしまってよいと思われます。

flutter.dev

公式ドキュメントは英語になりますが、非常に懇切丁寧な説明がされています。 Flutterで開発されたアプリの一覧などもあるので、自分の作ってみたいアプリが明確な場合には、見比べて検討してみるとよいと思われます。

flutter.dev

開発する環境

Figmaの登場により、以前よりMacを選ぶ必要性が減ったように感じます。 ChromeBookでAndroidStudioを動かすことができるようになったこともあり、より自分な好きな環境で開発が行えるようになってきたと感じます。

developer.android.com

Androidの基礎知識

developer.android.com

このうち、一番最初に書いてある「Androidアプリのセキュリティの話」と「アプリのコンポーネント」は目を通しておくことをお勧めします。 アプリのセキュリティについて知ることで、「アプリのデータをどのように保存するべきか」を考えることができるようになります。アプリでデータを保持する際に、ベースとなる知見です。 また「アプリのコンポーネント」の中では、「アクティビティ」を特に読み込んでください。そのほかはすぐさま使うことは少ないかもしれませんが、機能開発の中で詰まった時に「あの話に関係があるのかな?」と気づくきっかけにすることができるため、目を通しておくことをお勧めします。

アクティビティのライフサイクル

The activity lifecycle  |  Android Developers

AndroidアプリをKotlinで作る場合でも、Flutterで作る場合でも「アクティビティのライフサイクルのコンセプト」まで熟読することをお勧めします。 アプリの起動状態が異なるケースで発生するバグのトラッキング、ユーザーが別のアプリを立ち上げる時に気をつけることなどはアクティビティのライフサイクルをベースに理解することができます。

昨年同様、アプリケーションのライフサイクルやフラグメントのライフサイクルは開発が進んできたら理解していけばよいと思います。 もしもそれらを理解したいなと思ったら、Android Architecture Componentsの導入とGoogleがお勧めするアーキテクチャの導入を検討してみてください。

developer.android.com

Android Developerの抑えどころ

極めて個人的な意見となりますが、下記のページは適宜読み込むとよいと思います。 Flutterでアプリを開発する場合でも、1〜3は参考になるのではないでしょうか?

  1. Tasks and the back stack  |  Android Developers
  2. Intents and intent filters  |  Android Developers
  3. Input events overview  |  Android Developers
  4. Layouts in Views  |  Android Developers

Material Design

Material ThemeのバージョンアップがGoogle I/O 2019で発表され、Dark Themeなどが正式に導入されました。

material.io

個人的に2019年に比べてAndroidアプリ開発者が覚えるべきことが大幅に増えたなと感じているのですが、その際たるものがMaterial Designに関してです。

material.io

Androidアプリ開発の中で、これまではAndroidアプリの実現したい機能に対応するUIパーツを探して当てはめるようなことがよく行われていました。 しかしAndroid向けのMaterial Designライブラリが十分な完成度となった現在、エンジニアにはMaterial Designの「理由」を理解しながらパーツを選定する技能が求められつつあります。

1例としてアプリのナビゲーションの選択を挙げてみます。 パッとアプリのナビゲーションを行うUIパーツの名前は思い浮かぶでしょうか? どのUIパーツを選択しますか? なぜそのパーツを選択するのでしょうか?

material.io

Material Designを確認すると、上記のように「UIパーツ」と「利用シーン」が明確に定義されています。

このためMaterial Designをデザイナーや企画者との共通言語として利用できるよう、理解を深める必要性が高まっています。 かつ、選択したGUIアーキテクチャがUIパーツの状態を適切にハンドリングできるよう、各UIパーツのAPIにも知見を深める必要があると言えます。

JavaとKotlin

Kotlinを利用しましょう。 デメリットとしてはJavaのみでアプリを作るより1~1.5MBほどアプリサイズが大きくなることがあげられますが、それを補って余りあるほどの開発のしやすさがあります。

Kotlin and Android  |  Android Developers

少し横道に話はそれますが、Androidの開発技術の認定なども始まっています。 (たしか)英語でのコースとなるのですが、興味と時間があればコースの受講と認定証の取得を目指してみてもよいのではないでしょうか。

Google Developers Certification  |  Google for Developers

サンプルリポジトリ

Androidアプリの設計などの学習をしたいケースもあると思います。 その際には、下記のリポジトリを確認することをオススメします。

DroidKaigi 2020については、DroidKaigi App Fireside Chatがあるので試聴してみるのもよいと思います。


DroidKaigi App Fireside Chat

個人的にはAndroid Architecture ComponentsのMVVMが好きなので、2020年の構成は理解しやすかったです。

開発端末

AndroidStudioのエミュレーターが高速なため、メモリとCPUに余裕のあるマシンであれば実機がなくてもよいのではないかなと思っています。 エミュレーターの起動速度やアプリの動作速度、位置情報の変更など開発で必要な機能は十分です。

ただカメラを使ったアプリを作る場合には、実機を用意することを考えてみてください。 逆に言えば、それ以外の機能を主とするアプリであればエミュレーターによる開発で大半を賄うことができます。

なお、個人的に開発端末としてお勧めなのは Pixel 3a です。 今年の6月ごろにPixel 4aが出るんじゃないかなと思っているので、出たらPixel 4aにするのがよいのではないかと思っています。

終わりに

去年よりシンプルに書こうかと思っていたのですが、なんだかんだ同じぐらいになっちゃいました。 ライブラリ編はまた別にまとめようと思います。

ライブラリ編

blog.dr1009.com