Help us understand the problem. What is going on with this article?

中級以上のAndroid開発者がAndroidらしい開発のために見たほうが良いURL一覧

More than 3 years have passed since last update.

Javaの話はいろいろあると思いますが、Android開発を極めていくにはどうしたらいいかという話を吐き出してみようと思います。
開発入門向けのガイドはいいもの https://github.com/mixi-inc/AndroidTraining があるので、より実践的な内容をどうするか、という話にフォーカスします。

Androidなデザインと開発

Material Designのガイドライン

Googleが考えた最強(?)のデザインガイドライン、それがマテリアルデザインです。
https://www.google.com/design/spec/material-design/introduction.html

使うべきUI部品、リスト表示のレイアウト、ダイアログを使うタイミングと表示内容、遷移アニメーションの使い方など多岐に渡ります。
この内容に沿って開発するとかなりモダンなAndroidアプリに見えます。使おうと思ったUI部品(コンポーネント)について調べるだけでも効果を発揮します。

image

※余談ですがiOSを触る人はiOS Human Interface Guidelinesが必読です。

ライフサイクル

Androidを開発するということは、Javaをマスターするよりもライフサイクルをマスターすることだ、という話は勉強会でちらほら出ます。Androidとはライフサイクル、Android開発とはライフサイクルをきちんと考えて開発することです。

公式の入門編では再開、一時停止、停止の3状態しか出てきませんが、実際はとてつもないデカさのライフサイクルメソッドの呼び出し図ができるわけですよ・・(特にFragmentが絡む場合は複雑)。

そのまとめが下記のrepoに上がっています。
https://github.com/xxv/android-lifecycle

下記画像は1/4程度の抜粋(CC-BY-SA 4.0)
image

※余談ですがAndroid NでマルチウインドウきてonPause()とonStop()の考え方が若干変わるかもしれない微妙に複雑化するかもしれないので宜しくお願い申し上げます()

バックスタックとタスク

startActivity()した後の戻るボタンの動き(ざっくりすぎだろ・・)を制御しているのが、バックスタックとタスクです。
戻るボタンだけでなく、タスクスイッチャに表示すべき内容(例えば外部のメールアプリを起動した時に、タスクスイッチャにメールアプリを表示するかしないかなど)も、注意深く考える必要があります。

Android開発者なら、バックスタックとタスクの違い、AndroidManifest.xmlに書くlaunchModeの違い、説明できますよね・・?
とかいうものの正直公式ドキュメントだけだと実際の挙動がわからずつらいです。
自分は下記サイトを参考にしてようやく全容を理解できました。

下記画像は「図で理解するActivityのスタック」からの引用です。図が非常にわかりやすかったです。
image

※本当は"taskAffinity"についても知るべきなはずなんですが、自分は今の所は必要な場面にぶち当たってないです。

Upナビゲーション

Android開発者なら、戻るボタンと左上の「Up」ボタンの挙動の違い、説明できますよね・・?
Upは前に表示されていた画面に戻るとは限らず、「上位の概念」に移動しなくてはなりません。
Up Navigationは見落とされがちな仕組みなので、画面遷移が多いアプリケーションではぜひ参考にしたいです。
http://developer.android.com/intl/ja/design/patterns/navigation.html

image

実装方法はこちら
http://developer.android.com/intl/ja/training/implementing-navigation/ancestral.html

結局のところ

http://developer.android.com/intl/ja/index.html 以下の情報は(APIリファレンス含め)かなり重宝するので、時間がある時に目を通しておくと良いのかもしれません。

タブレットや画面回転への対応

AndroidはiOS(iPhone/iPad)と違って、AndroidManifestでタブレット向けです宣言とかしなくても普通にタブレットで使えるようになっています。
でもGoogle Playストアで見ると、「このアプリはタブレット向けに設計されています」にならないとランキングに表示されないなどの弊害があります。

実はこれ、昔はタブレット向けスクショを登録するだけでよかったんですが最近は人力チェックされているようです(志望動機みたいな応募フォーム)。

フラグメントの使い方
http://developer.android.com/intl/ja/guide/practices/tablets-and-handsets.html#Fragments

http://qiita.com/HideMatsu/items/ddf640899cbe1b2027ed

もっとテクニカルな話

Support Libraryの更新情報

Androidには最初から使えるFragmentとSupport Libraryに入ってるFragmentと、Fragmentの実装が二つあるわけですが、Googleの中の人が最新の機能やバグ修正の恩恵のために常にSupport Libraryを使うべき(DroidKaigi 2016 2日目基調講演より)とおっしゃっていて、必ず使うことになると思います。

ただ、バージョンアップでガツンと仕様が変わる(メソッドなくなるとか)がある場合もあり注意が必要です。Android Studioが「アップデートしろよ」と黄色い波線を引いてきますが、ぐっとこらえてまずは下記のページで何が変わったかをチェックするのが望ましいです。
http://developer.android.com/intl/ja/tools/support-library/index.html

AndroidフレームワークのAPI Diff

AndroidのcompileSdkVersionを上げるとメソッドが消えることがあります。
最近だとNotification.BuilderのsetLatestEventInfo()メソッドが(API 23で)消えた祭りが発生しました

GoogleがAndroid API Differences Reportを出しているので、これを見ると各バージョンでどこのインタフェースが変わったのか確認することができます。
http://qiita.com/takahirom/items/b46afb73a5c8429d8675

便利ライブラリの一覧

他にもQiita記事がたくさんあります。

ライブラリの導入時に便利なサイト

だいたいのライブラリはgithubのREADME.mdに書いてありますが、とりあえずbuild.gradleに何を書けばいいのかを探すにはmvnrepository.comが便利です。一部のライブラリはMaven Centralの代わりにjCenterにだけアップロードされているものがあり、その場合はbintrayから探さねばなりません。

ただ、なんでもポイポイ突っ込めばいいというわけじゃなく、入れれば入れるほどビルド時間が長くなってしまいます。methodscount.comを使うとbuild.gradleに書くアレをコピペするだけで、ライブラリのサイズをメソッド数やバイト数で表示してくれます(Android Studioプラグインもあります!)。

余談ですが、bintray-release使うとjCenterにライブラリを数クリックで公開できるのでぜひ公開していきましょう。

とにかくひたすらソースコードを読む

泣きながらソースコードを読み、Alt+Enterを連打するのがAndroid開発です。URLとか言いましたがコードを読むのがAndroid開発です。大事なことなので2回言いました。

とりあえず問題を公式Issue Trackerなどで探してみて出てこなかったら下記のURLを使ってSDK(Androidフレームワーク)のコードを検索して読むのです。ソースを使え、ルーク。

サンプルアプリと読んでおくべき箇所

konifarさんのDroidKaigi 2016のアプリはシンプルに情報を表示し、お気に入りなどの管理をするサンプルアプリとしてとてもきれいなコードだと定評があります。

我らが神、Jake Wharton氏のu2020も一部をコピってきたという話をたまに聞くので(読んだことないけど)きっと何か得られるはずです。さっきみたらRxJavaとかRetrofit 2とか使われていてモダンな構成になっているようです。

ActivityThreadとFragmentManagerあたりはライフサイクル絡みのちゃんとドキュメントされていない挙動(画面回転開始から終了までの間に他の処理がMain Threadで走るの走らないの・・?みたいな素朴な疑問)をチェックするために読んでおく必要があるかもしれません。僕は読むことになりました()。
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ActivityThread.java
https://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/app/FragmentManager.java

まとめ

日本ではiOSユーザのほうが多いためかiOS開発(者)が優勢で、AndroidはiOSのデザイン丸コピみたいな事案もよく聞き寂しいです。
Androidらしいかっこいいアプリがもっと増やしていきましょう・・!

yuya_presto
[a.k.a. ypresto] Android StudioとXcodeを同時起動しながらAtomでRubyとかES6とか書きつつgitでmergeしてpushする日々。
http://ypresto.strikingly.com
codetakt
学習管理システム「schoolTakt」を運営するEdTechのスタートアップ企業
https://codetakt.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした