Eclipse苦手者がAndroid開発する際に押さえるべきこと

カテゴリ
ブックマーク数
このエントリーを含むはてなブックマーク はてなブックマーク - Eclipse苦手者がAndroid開発する際に押さえるべきこと
このエントリーをはてなブックマークに追加

こんにちは! スマートフォンアプリ開発チームのfaultierです! 得意な口説き文句は「君のprotocolにconformしたい」ですが、今のところ使ったことはありません。

みなさん、普段の開発ではエディタは何を使ってますか? きっとvimかemacsかメモ帳か念力による直接入力を使っていると思います。ちなみに僕はvim派です。出社したらまずはブラウザ・ターミナル・IRCクラインアント・Twitterクライアント・iTunesを立ち上げ、可能な限りその中から出ないことを心がけています。

前回は同じチームのgaoohさんがEclipseによるAndroid開発環境の作り方を解説していましたが、今回はそれに便乗して、出来るかぎりターミナルから出たくない不精者のためのEclipseを使わないAndroid開発環境を作るときに押さえておくべきことを、リーダーに言われてもいないのにまとめてみました。

AndroidSDKのツール群を使う

AndroidSDKをインストールすると、Androidを作るのに必要なフレームワークやAndroidエミュレータだけでなく、コマンドラインから使うツール郡も一緒にインストールされます。なにはともあれ、$SDK_HOME/toolsや$SDK_HOME/platform-toolsにパスを通して、これらのツールを使えるようにしておきましょう。

android

そのものずばり、androidコマンドです。AVD(Android Virtual Device、エミュレータで動かすAndroidの仮想デバイス)やSDKの管理、Androidプロジェクトの雛形を作ったりできます。特に覚えておく必要があるサブコマンドを以下に挙げますが、他にできることやそれぞれのサブコマンドのオプション等は-hオプションを付けて確認してください。

list|create|move|delete|update avd
AVDの管理をするサブコマンドです。EclipseやAVDマネージャからGUIで作ることもできますが、androidコマンドを使えばCUIで管理することもできます。
create (test-)project
Androidプロジェクトの雛形を作ります。バージョンや環境によって変わると思いますが、僕の手元のSDKでは、AndroidManifest.xml、メインのActivityとレイアウト、アイコン、string.xml、ant用のbuild.xml、ProGuard用のproguard.cfgなどを用意してくれました。
update sdk
Eclipse+ADT環境であればEclipseから各バージョン向けのライブラリやエミュレータを取得/更新できますが、Eclipseを使わない場合はandroidコマンドから行ないます。実行するとSDK and AVDマネージャが立ち上がり、SDKの更新があればダウンロードできます。また、サードパーティのAdd-onもいくつか(この記事を書いた時点ではGoogle API Add-onとSamsung GALAXY TAB Add-onが利用可能です)ここからインストールできます。

emulator

エミュレータを起動するコマンドです。android list avdでAVDを確認して、emulator @AVD_NAMEでエミュレータ起動です。こちらも細かい起動オプションを付けることができ、回線速度や遅延、プロキシやリダイレクトの設定などもできます(エミュレータでデバッグしているとついつい3G回線の遅さを見過してしまうので、起動オプションで3G回線の設定にしておきましょう)。なお、エミュレータはtelnet接続して起動後に設定を変更することもできます。

adb

エミュレータやデバイスを制御するコマンドです。アプリケーションのインストール/アンインストール、ログの表示、仮想デバイスに接続してのshell起動など、CUIでAndroid開発をするときにはこれを使わないことには始まりません。

-eオプション、-dオプション、-sオプション
-eオプションを付ければ起動中のエミュレータを、-dオプションを付ければUSBデバッグモードの実機を制御するようになります。それぞれ複数接続している場合は、adb devicesでデバイスのシリアルナンバーを確認して、-sオプションで指定することでそのデバイスを制御することができます。
install/uninstall
アプリケーションのインストール/アンインストールをするサブコマンドです。インストールするときはapkファイルのパスを、アンインストールをするときはパッケージ名を指定します。
pull/push
直接デバイスに、もしくはデバイスからファイルをコピーするサブコマンドです。
logcat
端末のログを表示します。android.util.Logを使って出力したログはこれで見ることができます。
shell
端末に接続してadbシェルを起動します。SDカード内のファイルを直に操作したり、amコマンドでインテントを送ったり、sqlite3コマンドでDBの中身をいじったりできます。
forward
ローカルのソケットをデバイスに転送できます。TCPやUnixドメインソケットだけでなく、JDWPにもフォワードできます。

ddms

前回の記事でも出てきたDDMS、これはEclipseやADTの機能ではなくAndroidSDKに付属しているツールですので、ddmsコマンドで単体で起動できます。

keytoolとjarsignerを使う

Eclipse+ADTで開発している場合は、鍵を作ったり署名したりもEclipse上でできますが、Eclipseを使わない場合はkeytoolとjarsignerというtoolを使って自分でやる必要があります。keytool -keygenで鍵を作って、jarsignerでapkファイルに署名です。鍵の作り方や署名方法はドキュメントを参考にしてください。

jdbを使う

デバッガが無いとデバッグプリントでも仕込んでlogcatで見るくらいしか手段が無くて大変面倒ですが、ちゃんとjdbを繋いでデバッグすることができます。adb shellからamコマンドで-e debug trueオプションを付けてインテントを送ってアプリを起動し、adb jdwpで一覧表示してJDWPのPIDを探し、adb forward tcp:PORT jdwp:PIDで転送の設定をして、jdb -attach localhost:PORTで接続できるようになります。

mavenを使う

普通にJavaファイルをコンパイルして、dxコマンドでclassファイルをバイナリに変換、apkbuilderでapk作成、という手順で作ることもできますが、面倒なだけなのでそこは自動化してしまいましょう。androidコマンドでcreateすればant用のbuild.xmlなども生成されますが、mavenの方が便利そうだったので僕はmaven-android-pluginを使っています。

一つ一つ説明していくとそれだけで一記事書けそうなボリュームだったので、サンプルプロジェクトを用意してみました。Hello worldアプリケーションのプロジェクトとそのテストプロジェクトをandroidコマンドで作り、二つのプロジェクトをmavenのマルチプロジェクトの形で一つのプロジェクトにしてあります。チェックアウトしたら、(mavenをインストールして)親ディレクトリでmvnコマンドを実行すると、依存ライブラリのインストール、エミュレータの起動、アプリケーションのビルド、apkファイルの生成、インストール、テストの実行までコマンド一発でやってくれます。

テスト用のプロファイルとディストリビューション用のプロファイルを用意してあるので、(署名用のキーの生成などを事前に行なって)mvn clean package -Pdistributionを実行すると、今度はテストは行なわず、ProGuardによる最適化・難読化、署名などを行なったapkファイルがsample-app/targetの下に生成されます。

vimを使う

最初に僕はvim派だと宣言したので、ここではvimでコードを書くときに便利なものをいくつか紹介します。emacsでも同じように便利なものがあると思うので、emacs派の方はここは読み飛ばしてもらって自分で便利ツールを探して下さい。

taglist

ソースコード中のクラスやメソッドをアウトライン表示してくれるプラグインです。Eclipseのアウトラインビューみたいになります。

FuzzyFinder

ファイル名やクラス名、メソッド名などから簡単にファイルを探して開けるようにしてくれるプラグインです。探す対象も、開いているバッファ、タグ、最近開いたファイルなどから選ぶことができ、部分一致や曖昧な補完などもしてくれるので、恐しく便利です。特にJavaだとsrc以下の階層が深くなりがちですが、いちいちパス打ってられっか、とイライラしたりする必要はありません。

neocomplcache+snipMate

普段PerlやRubyを書いてるWebエンジニアから見ると、Javaは所謂「おまじない」多い言語に見えますが、あんなものをいちいちタイプしてたら日が暮れます。Eclipseを使っている同僚のディスプレイをこっそり後ろからのぞいて見ると、コード補完やスニペットを活用して自分で書かずにEclipseに書かせていました。当然ですがvimで書くときも、自分で書かずにvimにやらせてしまうのが正しい怠け者の生き方です。

neocomplcacheはコード補完を便利にするプラグインで、snipMateはスニペットを簡単に使えるようにしてくれるプラグインです。neocomplcacheを入れておけば、何か打てば補完候補が出てくるので、あとはその中から適切なものを選ぶだけの簡単なお仕事になります。それだけだとクラス名やメソッド名を補完してくれるだけなので、よく書くコードはスニペットにしてしまいましょう。neocomplcache自体にもスニペット機能が付いていますが、snipMateの方が個人的には書き易く、を連携させることもできるので、そっちを使っています。

最後に

色々紹介してきて最後に全部ひっくりかえすようでなんですが、Javaを書くなら正直なところEclipse(や他のIDE)の方がずっと便利です。Javaに関してなら、コード補完や整形、リファクタリングやテスト、デバッガとの連携など、賢くやってくれますし。なので例えば、

  • Androidアプリに集中したいのに、iPhoneアプリのためにObjective-CやCを書いたり、サーバサイドのアプリのためにPerlやRubyを書いたり、WebインターフェースのためにHTMLやJavaScriptを書いたりすることが稀によく頻繁に毎日ある
  • 上司や嫁/旦那に泣きついてみたものの、設備投資の予算が獲得できなかった
  • 「この人と、添い遂げたい」と心に決めたエディタがいる
  • 文字しか表示されてない画面を見ていると心が落ち着く
  • テンキーは隣村にあり、マウスは地の果てにあると思っている

みたいな項目に心当たりがあるような人だったら、非Eclipse環境に手を出してみてもいいんじゃないかなと思います。逆に、

  • 当面Androidアプリしか作らない
  • あるいは、普段からJavaのお仕事をしている
  • 画面に文字しか表示されてないと精神が不安定になる
  • 「えーマジメモリ不足!?」「キモーイ」「Eclipse起動した程度で重くなるPCが許されるのは小学生までだよねー」「キャハハハハハハ」と思っている

みたいな項目にいくつかあてはまるような人は、普通にEclipseを使ってもいいんじゃないかな、と思います。とは言え、好みの環境を組み合わせられたり、自動化したりすることもできるので、普段はEclipseを使う人も知っていても損は無いんじゃないでしょうか。ということで、EclipseとADTだけがAndroid開発環境じゃないんだよという紹介でした!