Genymotionを導入してエミュレータの起動待ち時間を短縮する

アプリ開発をしていてバカにならないのが、デバッグにかける時間です。頻繁にエミュレータを起動して動作確認を行うわけですが、デフォルトのエミュレータ(Android SDKのエミュレータ)はとにかく起動が遅いです。さらに動作ももっさりしていて、お世辞にも動作確認しやすいとはいえません。

そこで動作確認の時間をできるだけ短縮するためにも、Genymotionを導入しておくことをおすすめします。起動も早く動作もスムーズなので、デフォルトのエミュレータを使うのが馬鹿らしくなります。

私の環境で実際に両者を比較した動画を撮ってみました。

Genymotionをインストールする

Genymotionを利用するためには、ユーザー登録が必要になります。

また、エミュレータを動かすために別途Virtual Boxが必要になります。

端末を登録する

Genymotionをインストールできたら、端末の登録を行いましょう。Genymotionは実在する端末のエミュレーションを行うものなので、よく使う端末をとりあえず登録しておけばいいと思います。

サポートするAndroidのバージョンに合わせて登録しておくといいでしょう。私はとりあえず、Android2.3の端末と、自分の持っているGaraxy S3を登録しています。

端末の追加はそんなに難しくありません。予め用意されている端末から、エミュレーターとして使いたいものを選択するだけです。

Genymotionで端末の追加

Genymotion端末の選択

Genymotion端末の表示名を決める

後はダウンロードを待つだけ

Android Studioでプラグインを導入する

Android StudioからGenymotionのエミュレータを起動するためにも、Genymotionのプラグインも一緒にいれましょう。別に入れなくても使用に問題はありませんが、入れておいたほうがエミュレータの起動が捗ります。

GenymotionPluginからの端末起動

こんな感じでAndroid Studioから起動しやすくなります。

インストールの仕方はAndroid StudioのPreference > PluginsからGenymotionを探してインストールするだけです。そうすることでAndroid Studioの右上にGenymotion用のアイコンが追加されます。

Genymotion Pluginのインストール

万能ではないものの使わないのは損

Genymotionではデフォルトのエミュレータと比較して、画面サイズやAndroidのバージョン、SDカードの有無など細かなところまでカスタマイズすることができません。特にFreeライセンスでは利用できる機能に制限があるため、Android SDKのエミュレータを完全に置き換えるものではありません。

ですが基本的なデバッグ・動作確認にGenymotionを利用することで、アプリ開発における動作確認の時間を短縮することができると思います。基本的にはGenymotionを使うようにすれば、開発がだいぶ捗るのではないでしょうか?

Android Studio 0.8.10がリリースされています

Android Studio 0.8.10がCanary Channelでリリースされています。このアップデートにはバグフィクス以外に、新しい機能の実装が含まれています。

Memory Monitor

Memory Monitorが新たに実装されました。アプリのメモリ使用量をグラフでリアルタイムに確認することができます。なかなか便利です。

とりあえず使ってみましたが、カジュアルにメモリ使用量の確認ができるのは便利なのではないでしょうか。

ただ現状ではMemory Monitorのウィンドウサイズの変更がうまくできずに非常に邪魔臭い感じです。実用できるようになるのはもうちょっと先かなぁという感じです。

Memory Monitor実行例

Inspect Code

Analyze > Inspect Codeを実行することにより、コードチェックを行ってくれます。

Inspect Code実行例

String Bufferではなく、String Builder使えと指摘されました。その他にも詳しく教えてくれるみたいで、勉強のためのヒントがいっぱいですね。ありがたやありがたや。

外部ツールで変更を行った場合にダイアログで表示

Lintの変更を確認するのに、Android Studio 0.5.9で同じプロジェクトを開いたら、こんなウィンドウが出てきました。

外部ツールで変更を行った場合のダイアログ

こんな感じで、「なんかしらんけどファイル書き換わってんで? 再読込する?」と聞いてくれるようになったようです。(0.5.9で開いた後に「やっちまった」と思いましたが、この機能のおかげで助かりました)

その他いろいろアップデートあり

その他にも、Lintがパワーアップしていたり、ビルドエラーをハイパーリンクで修正できるようになったケースが追加されたり、バグ修正があったりと、いろんな機能が追加されたようです。

Lintについては、私はその存在を無視していたこともあって、以前と比較してどう変わっているのかよく分かりませんでした。ただ、今回改めて見てみると、いろいろと賢くなっているような気がします(黄色いメッセージがやたらと出てこなくなっている気がしましたが気のせいかもしれません)。

今回のアップデートはCanary Channelのみのようなので、先んじて試したい方はUpdate Channelを変更してみてください。

詳しくはリリースノートを参照してください。

Android Studioを使いはじめの時に困ったこと

Android Studioを使い始めた頃、ものすごく困ったことがありました。(今も少し困ることはありますが・・・)

それは、書籍やWebでの情報はその多くがEclipse(ADT)の使用を前提にしているということです。特にAndroidアプリ開発を初めて間もない頃は、これが致命的なほどに効いてきます。

アプリをどうやって作っていくのかも分からない最初の頃は、どんなファイルをどういう手順で作っていくのかサッパリ分かりません。どこにどんなファイルがあって、アプリを動かすには何が必要なのか。書籍などに書いてある手順通りにやらないと、上手く動かなかった時に何が原因なのか自分で判断できません。

Android StudioとEclipseに大きな差異がなければ、本に書いてあることをそのまま読みかえれば済む話ですが、残念なことに両者はプロジェクトのディレクトリ構成が違います。使われている用語が同じ意味でないこともあります(プロジェクトとかモジュールの意味するところが違う)。対応している機能も異なります。知識が乏しいうちは、どこをどう読み替えればいいのかすら分かりません。

「この本に書いてあるこの手順は、Android Studioだとどうやればいいんだろう」とわからないことばかりでした。そのやり方をネットで調べようとしても、情報が少ないので解決策に辿り着けることは稀でした(最近は情報増えてきたのでそうでもないですが)。

手探りで似たような作業をしていると、最初は動いていたアプリが動かなくなったりしてよく困ったものです。アプリがなんかおかしくなったら、プロジェクトを1度削除して1から作りなおしたりしていました。

プログラミングしている時間より、明らかにAndroid Studioと格闘している時間が長く、勉強がさっぱり捗りませんでした。素直にEclipseを使うしかないのかと迷ったこともありましたが、Android Studioの便利な部分が捨てきれず、そのまま使い続けて今に至ります。

多言語に対応する

アプリ内で利用する文字列は、直接文字列を書き込む方法と、リソースファイルを参照する方法と2種類あります。基本的にはリソースファイルを参照する方法が推奨されます。

それはなぜかというと、主に多言語対応を簡単に行うためです。そのためにわざわざstrings.xmlへ文字列を書き出します。

Android Studio 0.8.8からTranslation Editorが追加され、この多言語対応が比較的簡単に行えるようになりました。といっても、まだ開発中の機能のため、操作性に難があります(執筆時利用バージョン0.8.9)。エクセルみたいな感じで編集できると便利なんだけどなぁ・・・と使っていて思いました。

具体的にはどうやっているか

ディレクトリ例

 └app
  ├res
   ├values ←デフォルトで利用されるリソース
   ├values-ja ←日本語環境で利用されるリソース
   ├values-en ←英語環境で利用されるリソース
   :

多言語対応ディレクトリ例

こんな感じでディレクトリを作成してそれぞれのリソースファイルを用意します。

日本語環境で利用していれば、values-jaに用意されているstrings.xmlの中身が使用されます。英語環境ならvalues-enのもの、それ以外の環境ならvaluesのものが適用されます。

多言語に対応できるのは何もstrings.xmlだけに限りません。文字を書き込んだ画像の多言語対応のために、drawableを同じように用意してやることもできます。

ソースコードから出力する文字列はどうするのか

ここは私の疑問なんですよね・・・。

とりあえずプログラムで端末のデフォルトロケールを取得して振り分ける処理をしてごまかしました。

if(Locale.getDefault().equals(Locale.JAPAN)){
    //日本語の場合の文字列
}else{
    //それ以外の場合の文字列
}

後から修正が大変になる駄目なパターンだと思いつつ、間に合わせで処理しました。

私がこうやって処理した部分は年月を表示する部分でした。例えば2014年9月と出力する部分です。日本語以外の環境で日本語が出てくるのはおかしいので振り分けてみました。

そもそもソースコードから直接文字列を出力するような実装が間違っているのかもしれません。一番いいのは20149とそれぞれ分割してViewで表示するようにしてやるのがいいのかもしれませんね。

ただそれだけでは対応できないところもあると思うので、ベストプラクティスが何なのか知りたいところです。

Android StudioでGitを使ったバージョン管理

Android StudioでGitを利用したバージョン管理ができます。Git以外にもGitHubやSubversionなども使えるのですが、私はGitを使っているのでGitで説明します。

ちなみに私のGit力はGUIでしか管理できないレベルなので、コマンドで管理するのはどうするのかは聞かないでください・・・。これまでずっとSourceTreeでしかGit触ったことがないのです。

リポジトリの作成の仕方

まずはAndroid StudioでGitのリポジトリを作成する方法です。今回はSampleGitというプロジェクトを例に説明します。

メニューのVCS > Inport into Version Control > Create Git Repositoryを選択します。

Gitリポジトリを作成する

そうすると、リポジトリを作成する場所を聞いてくるのでプロジェクトルートを選択します。

Gitリポジトリを作成するディレクトリを選択する

これでGitリポジトリが作成されます。

Gitリポジトリが作成されると、Android Studioの下部にChangesという項目が新たに増えます。このタブでコミットしたり、Gitのログを確認したりといった作業を行えます。

Android Studioの下部にChangesというタブができる

また、リポジトリを作成したことによりプロジェクトウィンドウ等に表示されるファイル名の色が変わります。色の意味はこんな感じです。

  • 赤色:Gitで管理されていないファイル
  • 緑色:新規に作成されたファイル(まだコミットされていないファイル)
  • 青色:コミット後に変更があったファイル
  • 白色:コミットされたファイル(もしくは.gitignoreによってGit管理下から除外されているファイル)

リポジトリ作成直後はほとんどのファイル名が赤色になっていると思うので、まずはGit管理下においてやる必要があります。

ファイルをGit管理下に追加する

下部にあるChangesツールウィンドウを開くと、Unversioning Filesという部分に、赤色で表示されているファイルの一覧がずらっと並んでいます。

これらのファイルを右クリック→Add to VCS(もしくはcmd+option+a)でGit管理下においてやります。そうするとファイル名が赤から緑色に変わります。

Android StudioでファイルをGit管理下に追加する方法

1つ1つファイルを選ばずとも、Unversioning Filesという部分を右クリックしてAdd to VCSとすれば一気に全部変更できます。

(余談)リポジトリ作成後に新規ファイルを作成した場合

ちなみに、リポジトリを作成した後にファイルを追加すると、Git管理下におくかどうかきいてくるので、Yesを押せばわざわざこんな面倒臭いことをしなくてすみます。

新たにファイルを作成した時に出てくるメッセージ

コミットの仕方

ファイルをGit管理下に加えた後はコミットするだけです。以下のいずれかの方法でコミットを行うためのダイアログが表示されます。

Read full post gblog_arrow_right

Android Studioの便利なところ〜Gradleが便利〜

Android Studioは、Gradleが便利だとよく言われています。

私がAndroid Studioを使い始めた頃は「Gradle便利っていうけど、どう便利なんだろう」とさっぱり分かりませんでした。むしろGradleが何をやっているか、何者なのかさっぱり分からず、逆によく分からない存在でした。(でしたというか、現在進行形でよく分かっていませんが・・・)

実際にGradleが便利というのが実感できたのは、外部ライブラリを簡単に取り込めることが分かってからです。

外部ライブラリの取り込み

Androidではアプリ開発に便利なライブラリが多数公開されています。

自分で1から作るより、すでにある便利なライブラリのお世話になった方が、アプリ開発スピードも早くなりますしクオリティも高くなります。

Android Studioではそういったライブラリを、build.gradleに1行記述するという簡単な方法で自分のプロジェクトに取り込むことができます。

デフォルトではbuild.gradleは2つあるのですが、いじるのはプロジェクト直下にあるものではなく、appディレクトリにあるbuild.gradleです。

いじるbuild.gradle

例えばcroutonというToastをカスタマイズして使える便利ライブラリを取り込む場合は、app/build.gradleのdependanciesにcompile 'de.keyboardsurfer.android.widget:crouton:1.8.4'と記述をするだけで取り込めます。

app/build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'de.keyboardsurfer.android.widget:crouton:1.8.4'
}

Sync Project with Gradle Filesを実行すると、External Librariesに目的のライブラリが取り込まれます。

External Libraries

あらゆるライブラリがこの方法で使えるとは限りませんが、非常に便利です。

アプリ開発の始めの頃は外部ライブラリを利用するなんて発想がなかったものですから、Gradleが便利だぞと言われてもなんのこっちゃとさっぱり理解できませんでした。しかし、実際にこうやってライブラリが簡単に取り込めるのを確認すると、「なるほど、こりゃ便利だわ」とAndroid Studioを使うのが楽しくなってきました。

取り込んだライブラリがapklibとなってうまく参照できない

build.gradleのdependancieesに取り込むライブラリを記述して、目的のライブラリをダウンロードしてきてくれはしたものの、External Librariesで確認すると.apklibという拡張子になっていて、ライブラリの中身が参照できないということがあります。

apklibとなって参照できない

この場合はViewPagerIndicatorというライブラリです。

どうにか使えるようにする方法はないものかと調べてみたのですが、解決策が見つかりませんでした。行き着いたのは、Gradleがapklibという形式をそもそもサポートしていないため、Android Studioでうまく参照できないみたいということです。

こういったライブラリの場合は、ソースコードを引っ張ってくるしか取り込む方法がないんでしょうね・・・。ちょっと残念です。

何かいい方法をご存じの方がいらっしゃったら教えていただきたいです。