CUIでAndroidプログラミング | 世界的日曜WEBプログラマー日記

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)


AndroidはEclipse使わないと開発できないよね~。重いよね~メモリ食うよね~
CUIだけでAndroidプログラミングしたいなぁ、と思ってやってみました。
以下にその方法を記述します。
環境はLinux(Ubuntu)を想定しています。
◆ 1. 準備

1.アンドロイドのダウンロード 
http://developer.android.com/index.html
2. unzip download file
$ tar zxvf android_xxx.tgz
3. アップデートマネージャの起動(解凍したフォルダにある。)
$ tools/android update sdk
4. パスの追加( homeのDesktopのhogeにツールをインストールした場合)
$ echo "export PATH=$PATH:$HOME/Desktop/hoge/android-sdk-linux_86/tools" >> .bashrc

*アンドロイドの開発環境のダウンロード(AVDを作るまで)
以下のコマンドでアンドロイドmanagerを起動させる。

$ android
アンドロイドの開発環境をダウンロードする。
インストールされたアンドロイドの開発環境を確認するには
$ android list targets

とする。

Error: Target id is not valid. Use 'android list targets' to get the target ids.
とか
Available Android targets:
だけしか出ない場合はアンドロイドの開発環境がダウンロードできていないことを表す

◆ 2. エミュレータの作成方法
例えばエミュレータの名前をandi_vs_rockyとする場合

・作成(target のあとの3は開発したいアンドロイドの番号)
$ android create avd --name andi_vs_rocky --target 6
・削除
$ android delete avd --name andi_vs_rocky
・AVDのリスト
$ android list avds
・AVDの起動(Pathを通した後で,@をつけるのを忘れずに。)
$ emulator @andi_vs_rocky


◆ 3. Hello worldの作成
android create projectで引数を指定してプロジェクトを作ることができる。
さて、引数は
-t (--target)で、上記のTargetと対応していないとまずいだろう
-k はパッケージネーム ( --package )
-a はアクティビティ ( --activity )
-p はPath( --path )
で、コマンドをうつ。(ちなみに以下のフォルダは勝手に作られる。)

$ android create project -t 6 -p /home/ytodoroki/test_android -k "com.example.test" -a HelloWorld
>>>>> Created directory /home/ytodoroki/test_android/src/com/ekispresso/test
>>>>> Added file /home/ytodoroki/test_android/src/com/ekispresso/test/HelloWorld.java
>>>>> Created directory /home/ytodoroki/test_android/res
>>>>> Created directory /home/ytodoroki/test_android/bin
>>>>> Created directory /home/ytodoroki/test_android/libs
>>>>> Created directory /home/ytodoroki/test_android/res/values
>>>>> Added file /home/ytodoroki/test_android/res/values/strings.xml
>>>>> Created directory /home/ytodoroki/test_android/res/layout
>>>>> Added file /home/ytodoroki/test_android/res/layout/main.xml
>>>>> Created directory /home/ytodoroki/test_android/res/drawable-hdpi
>>>>> Created directory /home/ytodoroki/test_android/res/drawable-mdpi
>>>>> Created directory /home/ytodoroki/test_android/res/drawable-ldpi
>>>>> Added file /home/ytodoroki/test_android/AndroidManifest.xml
>>>>> Added file /home/ytodoroki/test_android/build.xml

あとはHelloWorldを書くだけ。 ソースファイルは/home/ytodoroki/test_android/src/com/ekispresso/test下に存在している。(com.example.testと指定したので、src/com/example/testにHelloWorld.javaが有る)
HelloWorld android 等でぐぐればワンサカ出てくるので割愛。

hello worldをかき終えたら、

$ ant debug
... < ==いっぱいいっぱいメッセージ
...
BUILD SUCCESSFUL
Total time: 3 seconds


と出る。したらOK。

なお、リリースモードやデバッグモードは以下のようにして切り替える

$ ant release # 署名済 apk パッケージ作成
$ ant debug # debug 用パッケージ作成


ant debug でエラーが出る場合について
原因1 antがインストールされていない

$ sudo apt-get install ant1.8

原因2 以下のメッセージが出る

BUILD FAILED
/home/ytodoroki/Dropbox/android/sdk/tools/ant/main_rules.xml:361: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-openjdk/jre"

JAVA_HOMEが正しくセットされていない。
.bashrcに以下を書く(環境依存。which, ls-laなどのコマンドで地道にjavacの場所をさがす)
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
JAVAC, JAVAはインストールされているものとする。
原因3
プログラムがおかしい

◆ 4. プログラムの転送
◆◆エミュレータに転送する
エミュレータに転送するには以下のコマンドを叩く

$ adb install bin/HelloWorld-debug.apk 

もし成功なら
280 KB/s (13342 bytes in 0.046s)
pkg: /data/local/tmp/HelloWorld-debug.apk
Success
などとでる。ダメな場合は
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
error: device offline
エミュレータで画面ロックがかかっていると送れないことがある。

◆◆実機に転送する
実機に転送する際、まずベンダーIDをLinuxマシンに登録する必要がある。
/etc/udev/rules.d下に下記のファイルを作成する。

$ sudo vi /etc/udev/rules.d/51-android.rules

内容
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
続いてパーミッションの変更

$ sudo chmod a+r /etc/udev/rules.d/51-android.rules 

ってな感じで。最後にudevをリスタート

$ sudo restart udev

(/etc/init.d/udev reload )という説もある。
アンドロイド端末をつなげて、デバイスの確認をする。

$ adb devices

これで認識していなければ、ケーブルを抜き差ししてみる

それでもダメな場合は、

$ sudo adb kill-server
$ sudo adb start-server
$ sudo restart udev

ケーブルの抜き差し… 再度デバイスの確認


$ adb devices

とやっていけば認識されるはず。

いよいよプログラムを転送する。プログラムの転送は以下の通り。

$ adb install -r bin\Hello-debug.apk #rの意味はapk パッケージの上書きインストール

-rを付けないと上書きインストールされない為、注意する。
エミュレータも存在している場合(例えば以下のような場合)
・emulator-5554 device
・SSHEV049822 device
こうした二つ以上(例えば、エミュレータと実機が走っていた場合)どこにインストールするのか引数で明示する必要がある。引数は以下の通り
* -d:USBで接続されている実機に対してコマンドを実行する
* -e:エミュレータに対してコマンドを実行する
* -s:指定したシリアル番号の端末に対してコマンドを実行する
さて、転送する。

$ adb -d install bin/HelloWorld-debug.apk 

ながかった。以上!



株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house