【技術を学ぼう】Android技術者になるには

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

Android技術者になって数年が経ったので、今の自分にできることをまとめようと思います。
また、この記事がこれからAndroid技術者を目指す人の指標になればいいなと思います。

Javaを理解する

Androidアプリケーションは一般的に「Java言語」と「AndroidSDK(Android開発フレームワーク)」を利用して作られます。
Java言語と言っても、通常のJavaアプリケーションで使用できるパッケージが全て使用できるわけでは無いことに注意してください。
利用できるパッケージはAndroidDeveloperリファレンスを見て確認しましょう。

AndroidStudioの使い方

Android開発で使用するIDEはAndroidStudioを利用して開発しましょう。
GoogleがAndroid開発のために提供しているため、Android開発で必要な機能を十分に備えています。
以前はeclipseにプラグインを導入して開発することが主流でした。しかし、現在ではサポートされていないためeclipseを利用している方はAndroidStudioの導入を検討してください。また、これから始める方はAndroidStudioを利用し、eclipseで書かれている書籍やWebサイトの情報には注意が必要です。
また、各種ショートカットが存在しており、コード補完やコードジャンプなど使いかたを理解することでAndroid開発を効率的に進めることができます。

エミュレータ

Android開発は実際に端末を持っていなくても、Androidエミュレータを利用して開発を進めることができます。
AndroidエミュレータはAndroidStudioに内包されているAVD Managerを 使い利用します。
昔は動作がとても遅く、使い物になりませんでしたが、現在ではかなり高速化されています。
そのため、ちょっとしたアプリケーションやコードを試したい場合に利用するといいでしょう。また、Androidエミュレータなので、擬似的な通話テストや位置情報テストなどができます。
しかし、使えない機能も多々あるので、実機が不要になるということはありません。また、理由の分からないエラーが発生して手詰まりになることが多々あるので注意が必要です。

LayoutEditor

LayoutEditorはアプリケーションの画面レイアウトをGUIを使ってグラフィカルに作成していくための機能です。
AndroidアプリケーションではxmlやJavaで画面レイアウトを作っていきます。しかし、LayoutEditorを使いウィジットをドラッグで配置していくため、とても素早く画面レイアウトを作ることができます。

Gradle

AndroidアプリケーションはAPKファイルという形式で配布されます。
GradleはAndroidプロジェクトをAPKファイルに変換するツールです。
Gradleを使いこなすことで、テストの自動化やフレーバー・バライアブルを使って少し異なったAPKファイルを作ることができます。

Androidアプリケーションの構成要素を理解する

Androidアプリケーションを作る上で絶対に使用するクラス群があります。
これらのクラスを理解することで、Android技術者の基礎となるのでしっかりとリファレンスを読みましょう。

Activity

ActivityはAndroidアプリケーションの1画面を表現するクラスです。
Activityの基本的な使い方は簡単ですが、ライフサイクルや多数のメソッドがあるため奥が深いクラスです。
まずは、基本的なライフサイクルを理解し、ユーザーの操作によってどのライフサイクルに至るかを理解することが重要です。

Fragment

FragmentはActivityに配置して、画面の一部分とその部分の処理を実装するためのクラスです。
複数のFragmentをActivityに配置し、動的に追加・削除・交換することで画面レイアウトを動的に変化させることができます。
各Fragmentを互いに依存させず、疎な関係を作ることでFragmentを再利用することができます。
Fragmentの基本的な使い方は難しいので、Android開発に慣れた頃に挑戦することをお勧めします。

View

Viewは画面を構成する部品です。ボタンや入力欄、チェックボックスなど既存のViewが多数あります。
AndroidSDKには基本的なViewしか定義されていません。そのため、Viewを使いたい場合は使い方をリファレンスで調べて使いましょう。また、近いViewがない場合はViewを継承して新しくViewを実装するか、機能の近いViewを継承して実装する必要があります。
また、複数のViewを内部に配置するViewGroupというクラスもあります。
このクラスも継承し、複数のViewを配置することで自分の好きなViewGroupを作成することができます。
画面レイアウトを作成する場合は、「レイアウトファイルを使う方法」と「Javaコードで作る方法」のどちらかか両方を組み合わせて作成します。
基本的な方針は静的なレイアウトはレイアウトファイルを使い、ユーザー操作やデータによって動的に変化する場合はJavaコードを使用しましょう。

Inetent

Intentは現在画面に表示されているActivityから別のActivityに遷移したり、Serviceを起動したりと色々なことができます。また、同時にIntentにデータをセットして使用することでActivityにデータを渡すことができます。 Intentには幾つかの使い方があります。主に暗黙的インテントと明示的インテントがあります。
Intentを使いこなすことでアプリケーションを構成する要素をつなぐことができます。

Service

Serviceはユーザーインターフェースを必要とせず、バックグラウンドで長時間動作させたい時に使用するクラスです。
Serviceの使い方は難しいのでAndroid開発に慣れた頃に勉強することをお勧めします。

インタラクティブなアプリケーション

スマートフォンのアプリケーションはインタラクティブである必要があります。
アプリケーションはユーザーの操作に対して色々な反応を返す必要があります。
この反応の質によりユーザーがアプリケーションを使い続けるかどうかが決まると言われています。

ユーザーの操作を受け付ける

ユーザーは画面を通してタップ・ロングタップ・スワイプ・文字入力を行います。
ViewやActivityにView.OnClickListenerView.OnTouchListener等のインターフェースを使い、ユーザーの操作に対する処理を実装する必要があります。

Dialog・Toast

Dialog・Toastはユーザーにメッセージを伝えるとき必要があるときに使うクラスです。
Dialogはユーザーに何か重要なメッセージを伝えたり、意思決定を促すために使います。
Toastは画面の下からポップアップするトーストを表示するクラスです。ユーザーにちょっとしたメッセージを伝えるときに使います。

リソース

アプリケーション内で使用する文字列や画像、レイアウトファイルをresフォルダ以下にリソースとして保存します。
resフォルダ以下はデバイスの画面サイズや言語、解像度等でフォルダを分けることができます。
AndroidOSはresフォルダ以下のフォルダから実行される端末にとって最適なフォルダを選択して使用します。

アニメーション

Androidアプリケーションは画面遷移やViewの動きに変化をつけるアニメーションが多数あります。

センサー

Android端末には様々なセンサーが付いています。
センサーを使うことでAndroid端末の状況を知りることができます。
端末の傾きや明るさをセンサーで検知し、Androidアプリケーションに反映することができます。

位置情報

現在販売されている大半のAndroid端末ではGPSが使えます。
LocationManagerを使うことでユーザーがどこにいるかを取得し場所に適した情報をアプリケーション内に表示することができます。
最近ではGooglePlayservicesを使って位置情報を取得する方法が推奨されています。

カメラ

現在販売されている大半のAndroid端末にはカメラが設置されています。
カメラはIntentを使って外部アプリケーションと連携する方法とCameraandroid.hardware.camera2を使い自分で実装する方法があります。

非同期処理

Androidアプリケーションを作る上で気をつけないといけないことはユーザーのアクションを阻害しないことです。
Androidでは画面を更新する専用のスレッドのUIスレッドというものがあります。
ActivityやFragment等のライフサイクルメソッドの処理はUIスレッドで実行されます。
UIスレッドでファイル処理等の計算量の多い処理をするとアプリケーションは停止してしまいます。
そのため、ThreadやAsyncTask等を使ってワーカースレッドを立てる必要があります。

アプリケーションのデータを保存

Androidアプリケーション内にあるデータはアプリケーションを終了したり、電源を切ったりすることで失われてしまいます。
そのため、データを何らかの手段で保存する必要がります。
データの容量、構造によって使用する方法を選択する必要があります。

プリファレンス

設定値や入力値等の少量のデータを保存する場合にはプリファレンスを選択しましょう。
プリファレンスはアプリケーション内のフォルダにKey-Value形式で保存されます。

ファイル

画像ファイルや音声ファイル、動画ファイル、PDF等はファイルとして保存します。
ファイル操作は基本的にJavaと同様に実装することができます。

SQLite

SQLiteは軽量な関係データベース管理システム(RDBMS)です。
大量のデータをSELECT・INSERT・UPDATEなどを使って管理することができます。また、SQLiteはアプリケーション内にファイルとして保存されます。

他のデバイスとデータ交換する

Androidアプリケーションは色々な方法を使って外部とデータの送受信を行うことができます。
Android端末単体でできることは少なく、複数のユーザーがAndroid端末を使ってデータを共有することが多々あります。

HTTP通信

データを共有する場合にはHTTP通信を使いサーバー経由することが一般的です。
HttpURLConnectionを使いhttp通信を行います。
サーバーは自前で用意するか、FirebaseなどのBaas/Paas等を使うといいでしょう。

Bluetooth

Bluetoothは専用の送受信装置が実装されている装置間でワイヤレス通信を行うための規格です。
Android端末にはクラシックBluetoothBluetoothLowEnergyがあり、対応状況は異なるため注意が必要です。

NFC

NFCは近距離無線通信に分類される無線通信技術の一種です。
Android端末にもNFCが利用できる端末があります。

WiFi-P2P

Wi-Fi Peer-to-PeerはWiFi対応機器同士を直接接続するP2P通信方式です。

アプリケーションの種類

Androidは様々な用途のアプリケーションが存在しています。

Android アプリ

Android端末のホームアプリに表示されているアイコンから起動されるアプリケーションです。
一般的にAndroid開発と言ったらこの種類のアプリケーションのことを指します。
開発のための情報量が多く、リファレンスを読むことで大抵の開発はできると思います。

App Widgets

App WidgetsはAndroid端末のホームアプリに配置して使うアプリケーションです。App Widgetsの開発ではViewと機能が制限されます。

Android ホームアプリ

Android端末を起動した時に起動するアプリケーションで、他のアプリケーションを起動するためのアプリケーションです。

Android Wear

Android Wearはスマートウォッチ(腕時計型ウェアラブルデバイス)向けに設計されたGoogleのAndroid OSベースのオペレーティングシステムのことです。
今までのバージョンでは、Android端末の補助装置としての意味合いが強いデバイスでした。しかし、最新のAndroid Wear 2.0でスタンドアローンアプリに対応しスマートフォンに依存しないアプリが作成可能となりました。この変化により、今後開発が増えてくると思われます。

Android TV

Android TVはGoogleが提供しているAndroidを搭載したスマートテレビのプラットフォームのことです。
リビングで使われるテレビで使われることを前提としているため、大画面である事やリモコンで操作される事などを考慮が必要となるそうです。

Android Auto

Android Autoは車の車内、運転中に使用するために最適化されたオペレーティングシステムです。
地図や音楽、通信などアプリケーションが主体となります。また、運転中を考慮して音声での操作ができる必要があります。

Android Instant Apps

Android Instant AppsはGooglePlayStoreからのインストールが不要なアプリケーションです。
Google検索結果などからURLをクリックすると、URLに対応する機能に必要なデータだけをダウンロードして機能を実行します。
ユーザーにいち早くアプリケーションの機能を届けることができます。そのため、ユーザーに機能を試してもらい、気に入ったらインストールしてもらうという流れになります。

Android技術者として成長する

Androidは色々な知識が必要になるため、たくさんのことにチャレンジする必要があります。

GooglePlayストアに公開

Android技術者の成果物はAndroidアプリケーションです。
技術の習得には何かを作ることが重要で、自分で作ったアプリケーションがストアに並んだ時の達成感はモチベーションの向上に大きく影響します。是非、アプリケーションを公開することをお勧めします。
また、フリーランスとして面談を行った時に「アプリケーションの公開経験」についてよく聞かれます。
フリーランスとして働くことを考えているなら、小さくてもいいのでアプリケーションを公開しましょう。

Kotlin

KotlinはGoogleが新しくAndroid開発言語として公認した言語です。
Javaと完全互換性があり、Javaとの併用も可能なため、今までの資産を損なうことなく移行することができます。
また、モダンな言語仕様により簡潔で効率的な開発ができることも人気のひとつとなっています。
Android開発の主流となる可能性があるので、是非習得しておきましょう。

OpenGL ES

AndroidではOpenGLの組み込みシステム向けのOpenGL ESを使うことができます。 3次元コンピュータグラフィックスをしたい場合に必要な技術となります。

Maps Android API

Maps Android APIを使うことで地図アプリケーションを作ることができます。

Firebase

Firebaseはアナリティクス・データベース・メッセージ・クラッシュレポートなどの機能を利用することができます。
そのため、サーバー側の機能を最小限の労力で用意することができます。

Android NDK

Android Native Development Kit(NDK)は、AndroidアプリでCやC++コードを使用できるようにするツールです。NDKを使用することで、高負荷な演算処理を行う場合や既存のC・C++で作られたライブラリを使用する場合に使います。

マテリアルデザイン

マテリアルデザインはGoogleが推奨しているアプリケーションのデザイン方針です。