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

iOSとの比較つき!Androidでこんなアプリ,こんな機能を作りたかったらこれを見ろ!作りたいアプリに対応するクラス、ライブラリのまとめ!

More than 3 years have passed since last update.

by @mixiappwchr

最近Androidのほうも久しぶりがっつりやっているため、簡単ですがまとめてみました。

スクリーンショット 2014-12-07 12.10.15.png

環境編

IDEは何を使えばいいの?

今から始めるにはnatvieのコードとかを書かない限りAndroid Studioを使いましょう
最近ようやく1.0が出ました。

Android Studio
http://developer.android.com/sdk/index.html

検証用のエミュレータが遅いよ!

iOSと違う点ですが、Androidはエミュレータの遅さに定評があります。Intel HAXMでの高速なエミュレータか、Androidの仮想環境を提供してくれるGenymotionを使いましょう

Genymotion
http://www.genymotion.com/

ライブラリの管理はどうすればいいの?

iOSでいうCocoapods的なものはAndroid Studioのビルドで使われているGradleで行うことができます。

例えば例としてネットワーク通信ライブラリを入れたい場合

ネットワーク通信用のライブラリはどれがいいの?

iOSだとネットワーク通信周りと言えばAFNetworking。これを入れたい場合Podsfileに

pod 'AFNetworking', '~> 2.4'

と書きますよね!

Androidではいくらかライブラリがありますが,おすすめはRetrofitです。

Retrofit
http://square.github.io/retrofit/

AndroidStudioで使いたい場合は?

compile 'com.squareup.retrofit:retrofit:1.8.0'

と言った風に記載しましょう!

当然画像のロードもやってくれるよね?ライブラリのどれがいいの?

iOSだとSDWebImageとかのやつですね
Picassoがインターフェースが一番いけてます

Picasso
http://square.github.io/picasso/

古いバージョンのアプリでも最新のライブラリを使いたいんだけど?

iOSでは新しいSDKの機能は基本的には使えません。
Androidでは過去のバージョン向けにsupport ライブラリというものを提供していて
こちらを用いれば、過去のバージョンでも使えるものが増えます。
http://developer.android.com/tools/support-library/index.html

ただし、すべてが使える訳ではなかったりするので、使用する場合はその点も気をつけましょう

ビルドがクッソ遅いんだけど!

そうです。Androidはビルドの遅さに定評があります。

gradle管理の場合、追加で新しいライブラリを入れる場合以外は
Preferenceのgradleの項目のところでOffline workにチェックを入れておきましょう

cocoacontrolsみたいなUIライブラリや動きを参考にするやつってないの?

はい、このアプリをインストールしておきましょう
DevAppsDirect
https://play.google.com/store/apps/details?id=com.inappsquared.devappsdirect&hl=ja
これは実際のライブラリを試すことができるアプリです。

手元で動きを確認できるので、ぜひ自分でインストールしておくだけでなく、デザイナーさんにもインストールしてもらうようにしましょう。
このアプリにあることくらいは大体実装できそうですって基準になります。

アプリのテスト配布はどうしたらいいの?

もうDeployGateしかありませんね!
DeployGate
https://deploygate.com/dashboard?locale=ja
グループ機能もちゃんとあるので使いやすいです
http://blog-ja.deploygate.com/post/87151299327

アプリ開発編

ナビゲーションバー周りはどう作ればいいの?

Androidではナビゲーション周りはActionBarを使います。最新のSDKではToolbarというものが導入されており、デザインなどさらに柔軟に変更が可能です。
http://developer.android.com/reference/android/support/v7/widget/Toolbar.html

横から出てくるメニューを作りたいんだけど

ドロワーメニューのことですね。
サポートライブラリで提供されているので使いましょう。

android.support.v4.widget.DrawerLayout
http://developer.android.com/training/implementing-navigation/nav-drawer.html

スワイプで画面遷移するViewを作りたいんだけど

iOSでいうUIPageViewControllerですね
ViewPagerというライブラリを用いて実装します。

こちらもサポートライブラリで提供されているので使いましょう。
http://developer.android.com/reference/android/support/v4/view/ViewPager.html

リスト表示のアプリを作りたいよ!

AndroidではListViewを用います。
ListView
http://developer.android.com/reference/android/widget/ListView.html

最新ライブラリでは
RecyclerViewというものが新しく追加されているのでこちらを用いてもいいでしょう。
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

iOSのTableViewと比較してTableViewの表示処理部分を行うDelegateの役割をAdapterという別のクラスが持つことになります。
ListViewの場合はListAdapterを使います。

ListAdapter
http://developer.android.com/reference/android/widget/ListAdapter.html
こちらの方にCellごとの実装を書きます。

また、パフォーマンスを向上させるための各行のView処理をキャッシュすることを行います。
iOSでもCellを再利用しますよね?
その辺の話はrejasupotaroさんがきれいにまとめてくれています。
http://rejasupotaro.github.io/2014/02/06/34.html

グリッド表示のアプリを作りたいよ

iOSでいうCollectionViewですが、Androidだと

GridView
http://developer.android.com/guide/topics/ui/layout/gridview.html
になります。

ただし!注意点としてこのライブラリheaderやfooterをつけることができません!

そのため、他のライブラリを使うことになりますが、個人的には下記のライブラリで色々まかってます。

いやPinterest的なグリッドが作りたいんだ!

はい,ということで、いっぱいライブラリがあるのですが比較的こちらのライブラリが安定しています。

AndroidStaggeredGrid
https://github.com/etsy/AndroidStaggeredGrid

GridViewとしてもつかえてheader,footerも追加できるので便利です。

画像フィルターアプリを作りたいよ!

iOSではGPUImage様万歳ですがAndroidにポーティングされたライブラリがあります

GPUImage for Android
https://github.com/CyberAgent/android-gpuimage

また標準SDKだとMedia Effectsをつかうと実装できそうです。
Media Effects
http://developer.android.com/reference/android/media/effect/package-summary.html

動画は?動画編集アプリ作りたいよ!

iOSではAVFoundationにより、アニメーションを組み込んだり大分こったアプリが簡単にできましたAndroidはどうでしょうか?動画も同じくMedia Effectsが使用できそうです。また動画の結合

mp4parser
https://code.google.com/p/mp4parser/

最近のSDKでようやくMediaCodecまわりなど機能が拡張されていっているので動画はこれからという感じがします。未来を待ちましょう。この辺は興味がある分野なのでそのうち別途調べ直してみます。

音楽アプリをつくりたい!

端末内の曲を取得するにはContentResolverを取得してSQL発行することで、アルバム、曲、アーティストなどのデータを引っ張ってくることが可能です。MediaStoreをみてみましょう。

MediaStore
http://developer.android.com/reference/android/provider/MediaStore.Audio.html

    List albums = new ArrayList();
    ContentResolver resolver = activity.getContentResolver();
                Cursor cursor = resolver.query(
                                MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
                                Album.FILLED_PROJECTION, 
                                null, 
                                null,
                                "ALBUM  ASC"
                                );

                while( cursor.moveToNext() ){
                    albums.add(new Album(cursor));
                }

Watchつくりたいよ.Watch!

Android Wearですね。
iOSだと最近Watchkitが公開されましたが現時点だと対したことができませんが、Android Wearについては一部固有の開発部分がありますが基本的に通常のAndroidのSDKと同じような開発や機能を用いることができます。

現時点だと実機も色々発売されてきており、今のところAndroidwearの方が開発する楽しさはあります

http://www.android.com/wear/

その他iOSと比較して

アプリ開発的にはiOSと同じような考え方が使える場面が多いのですが、Android特有の大変さとしては

  • 外部ライブラリの含めてメソッド数の壁、2.3だとサイズの壁があり、超えるとインストールできない、動かない。multidexなど解決策もでてきたがビルドが遅くなったり、つくりによっては動かない場合もあるので完全ではなくproguardを使って頑張る必要があったりする。
  • そのproguardが辛い
  • GCがありますが、ARCよりは大分面倒
  • 端末固有の挙動の問題
  • ビルド遅いよね
  • デザイナーさんがiOSベースで話してくるのでしんどい

などなどあります。

iOSよりよい点として
* リソース管理はAndroidがしっかりしてて扱いやすい
* 複数人開発はAndroidの方がやりやすい.(iOSのようにprojectfileがぶつかったり、storyboardなどのファイルがぶつからないよう気をつけるとか、悲しい出来事はあんまりない。。)
* 複雑な画面のレイアウトは断然Androidの方がくみやすい!リソース管理がきれいにできるのでメンテも楽(iOSのように,名ばかりの自動でなにもやってくれない、メンテナンス性がゼロのAutoLayoutなどとむきあわなくていい。。)
* 端末いっぱいあってガジェオタの人は楽しい限り

これからアプリ開発を始める人はもちろんですが、iOSエンジニアもAndroid側の開発をやってみると、いろいろな発見や楽しさや闇に触れることができるのでぜひやってみてはどうでしょうか?

iOSの方はこちらもどうぞ
iOSでこんなアプリ,こんな機能を作りたかったらこれを見ろ!作りたいアプリに対応するクラス、フレームワーク、ライブラリのまとめ!

Android UIについては以下に初心者向けのまとめを作成しています。
職種の枠を超えて劇的な効率化をはかる!デザイナーさんむけAndroid のUI作成の簡単まとめ

そろそろアプリエンジニアへ華麗に転身を決めたいwebフロントエンジニア、両刀使いを目指すiOSエンジニア向け!Android UI開発の基本まとめその1

最近の記事

次世代のスーパーエンジニアたちも学ぶ!マインクラフトで触れる技術たちその1

あんなすごいエンジニアともであえるかも??Qiitaユーザーが集まるSlack Teamを作ってみたよ!

goからiOSまで一人でアプリ開発をしてたらいつの間にかマインクラフトエンジニアになった話

AutoLayoutに虐げられているIOSエンジニア向け、AutoResize再考

職種の枠を超えて劇的な効率化をはかる!デザイナーさんむけAndroid のUI作成の簡単まとめ

限界までUXを向上させる! Facebook paperのようなアプリを最新UIライブラリAsyncDisplayKitでヌルヌルな操作感を実現しよう!

あらゆる「モノ」との連携するIoT時代に向けて。iOS と AndroidのBluetooth LE対応状況を確認しておこう

作ったアプリをブラウザ即見せでモチベーションアップ!!TestFlightよりお手軽なアプリ配布サービスappetize.io

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
ユーザーは見つかりませんでした