mixi-inc/AndroidTraining で Android アプリ開発の学習中

スマートフォンのアプリ*1を作れるようになっておきたいと思い、GitHub にある mixi-inc/AndroidTraining で学習することにしました。

開発環境

AndroidStudio

AndroidTraining では Eclipse に ADT を入れていますが、私は IntelliJ がベースとなっている Android Studio を利用しています。IntelliJ カッコ良いんで。
Android Studiohttp://developer.android.com/sdk/installing/studio.html あたりからダウンロードしました。
ダウンロードしたバージョンは 0.3.2 だったのですが、起動時に最新版があるよ!と通知されるので即更新して 0.4.2 になっています。

Android Studio を起動したら、まず最初に SDK をダウンロードしました。ツールバーにある SDK Manager のアイコンをクリックして、SDK Manager から必要そうなものにチェックを入れて Install Package しています。おそらく初回では、最初からいくつかのパッケージが選択・削除されている状態だと思うので、そのまま Install Package ボタンをクリックしたような記憶があります。

Genymotion

Android の高速エミュレータです。http://www.genymotion.com/ から入手できます。要アカウント登録。
Genymotion は VirtualBox 上で動作するので、VirtualBox も必要です。
http://dev.classmethod.jp/smartphone/android/genymotion-install/ あたりを参考にインストールしました。

SDK にも標準でエミュレータがついているのですが、Intel x86 Emulator Accelerator (HAXM) を有効にしてもちょっと遅い感じがあります。Genymotion は起動も描画も十分に早く、またエミュレータ自体のウィンドサイズに合わせて拡大/縮小される、GPSやカメラなどの偽装も簡単にできるのが良いです。

Genymotion Plugin

AndroidStudio でビルドしたアプリケーションのデプロイ先として Genymotion を選択できるようにするために必要(と思う)なので入れておきます。
AndroidStudion の Preferences -> Plugin で Browse Repositories ボタンをクリックするとプラグインの一覧が表示されます。その中から Genymotion プラグインを選択して Download and Install します。

Tips

AndroidStudio を使っていて、なんだかわからないけどおかしいなと思った時にしている事のメモです。

レイアウトファイルに記述している FQCN が赤くなっている*2

メニューから File -> Invalidate Caches / Restart... をクリックし、表示されたダイアログの Invalidate and Restart をクリックしてキャッシュのクリアおよび再起動で解消しました。

依存ライブラリを追加したい

依存ライブラリを利用するモジュールの build.gradle に dependencies ブロックを追加します。
例えば twitter4j-stream を追加するならば以下のようになります。

dependencies {
    compile group: 'org.twitter4j', name: 'twitter4j-stream', version: '3.0.5'
}

Gradle についてはユーザガイドを日本語訳されたありがたい方いるので、それを参考にすると良いかと思います。
ユーザガイドの日本語訳版は http://gradle.monochromeroad.com/docs/userguide/userguide.html になります。

依存ライブラリの追加が反映されない?

メニューから Tools -> Android -> Sync Project with Gradle Files をクリックします。ツールバーにもあるのでそちらでもOKです。
コード補完したときに候補に出てくるようになります。

依存ライブラリ追加したら、ビルドに失敗するようになった

ビルドに失敗し、"META-INF/LICENSE.txt" が重複しているよ!みたいなメッセージが出ている状況のことです。
build.gradle の android の packagingOptions ブロックに exclude に上記のファイル名を指定します。

android {
  ...
  packagingOptions {
    exclude 'META-INF/LICENSE.txt'
  }
}

*1:私の周りでは、よく「クライアントアプリ」と呼称されている気がするが、Windows 上などで動作するアプリと区別がつかなくて違和感を感じる

*2:AndroidStudio側でクラスをうまく認識できていないみたいですね。ビルドはGradleがやるのでできました。