私用終了
したので debian な thinkpad で android な開発環境構築する事に。今も hackathon してるはずなんですが追い付けるかどうか (多分無理)。
まず、Eclipse の取得とインストールなあたりを見つつ環境確認。
$ dpkg --get-selections|grep sun-java sun-java5-bin install sun-java5-demo install sun-java5-jdk install sun-java5-jre install $
を、きちんと入っとるじゃん。apt-cache search したら java6 もナニでしたが、ここではスルー。要件としては
o eclipse は 3.4
o git な plugin も入れとく
o android な SDK
あたりかと。そりゃええんですが、java --version すると以下。
$ java --version java version "1.5.0" gij (GNU libgcj) version 4.3.2 Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $
上記ドキュメントによれば update-alternative せえ、とある。
# update-alternatives --config java There are 4 alternatives which provide `java'. Selection Alternative ----------------------------------------------- 1 /usr/bin/gij-wrapper-4.1 2 /usr/bin/gij-4.3 *+ 3 /usr/lib/jvm/java-gcj/jre/bin/java 4 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java Press enter to keep the default[*], or type selection number:
ひえー。4 つもある。これは 4 をタイプすれば良いのかな。で、確認。
# update-alternatives --config java There are 4 alternatives which provide `java'. Selection Alternative ----------------------------------------------- 1 /usr/bin/gij-wrapper-4.1 2 /usr/bin/gij-4.3 + 3 /usr/lib/jvm/java-gcj/jre/bin/java * 4 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java Press enter to keep the default[*], or type selection number: #
これで準備 OK らしい。
$ java -version java version "1.5.0_17" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04) Java HotSpot(TM) Client VM (build 1.5.0_17-b04, mixed mode, sharing) $
しかし sun の java も apt-get で取れる時代になったか。
# 取れる、ってか知らんうちに入ってるのも微妙
eclipse
for java Developer の Linux 32bits 向けがココから download 可能。85MB が約 3 分ッスか。ええ時代になったものですな。
そういえば昨日は mac が何台かいたみたいですが、Linux 使ってる通は居なかった模様。vista とか初めて見た。
で、download が終わったら展開して起動。あら、Android SDK 入れれ、って書いてありますね。http://developer.android.com/sdk/ からオトせ、との事。これまた 157MB が約 3 分との事。その間に eclipse 側で Android Development Tools 入れる。
- Help -> Software Updates 選択して
- Available Software から Add Site クリック
- https://dl-ssl.google.com/android/eclipse って入力して OK
- Developer Tools チェックして Install
- 依存とかをナニして Next
- Lisence に agree して Finish
あと、Android SDK が download できたので解凍。とりあえず PATH には入れてない状態。とりあえず 仮想デバイス作って emulator 動かしてみます。
まずは仮想デバイスの作成ですが、テキスト通りでナニ。
$ android-sdk-linux_x86-1.5_r2/tools/android create avd --name sdk1_5 --target 3 --sdcard 128M Created AVD 'sdk1_5' based on Google APIs (Google Inc.) $
で、emulator 起動。
$ android-sdk-linux_x86-1.5_r2/tools/emulator @sdk1_5 emulator: emulator window was out of view and was recentred
watch cat /proc/loadavg しながら確認してるんですが、1 (1.2* くらい) は越えてますな。でもまだ起動しない。起動時間チェックしときゃ良かった。
を、起動した。
そういえば
git な plugin 入れるんだったな。上記と同様の設定をして Add Site から http://www.jgit.org/update-site を入れて OK したらいくつか出てきた。
- Integration Build
- Maintenance Build
- Nightly Build
- Release Build
- Stable build
- Tentative Build
何故か Stable だけ build が小文字。stable と release はどっちが良いのだろうか、と良いつつ小文字にホレたので stable にする事に (何
あとは github にリポジトリ作って試してみれば良いのかな。とりあえず HelloAndroid 作って色々試す事に。
HelloAndroid
昨日もヤりましたが再度。
- File -> New -> Project から Android Project 選択して Next
- New Android Project にて
- Project name は HelloAndroid
- あら? Build Target に何も出てないな
問題発生。Build Target が選べないので次に行けないな。あ、設定漏れがありますな。
これで Build Target が出てきました。以下に続きを
console にエラーが出ているな。曰く
[2009-06-20 16:07:33 - HelloAndroid] no classfiles specified [2009-06-20 16:07:33 - HelloAndroid] Conversion to Dalvik format failed with error 1
との事。ググッてみると http://fukutive.blog21.fc2.com/blog-entry-277.html によると微妙な問題な模様。を、http://blog.altemasoft.com/article/29827399.html によれば Project を clean すれば良い、とありますな。ええと、
- Project が選択されてる状態で Project -> clean を選択
- clean projects selected below をチェックして OK クリック
で、Run As したら動いたな。google 先生今日もありがとう。
昨日のおさらい
ええと、プロジェクトは以下な状態になってます。workspace 配下にて以下。
$ find HelloAndroid HelloAndroid/ HelloAndroid/.settings HelloAndroid/.settings/org.eclipse.jdt.core.prefs HelloAndroid/.project HelloAndroid/gen HelloAndroid/gen/com HelloAndroid/gen/com/railsplayground HelloAndroid/gen/com/railsplayground/playthings HelloAndroid/gen/com/railsplayground/playthings/helloandroid HelloAndroid/gen/com/railsplayground/playthings/helloandroid/R.java HelloAndroid/.classpath HelloAndroid/bin HelloAndroid/bin/com HelloAndroid/bin/com/railsplayground HelloAndroid/bin/com/railsplayground/playthings HelloAndroid/bin/com/railsplayground/playthings/helloandroid HelloAndroid/bin/com/railsplayground/playthings/helloandroid/R$drawable.class HelloAndroid/bin/com/railsplayground/playthings/helloandroid/R.class HelloAndroid/bin/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.class HelloAndroid/bin/com/railsplayground/playthings/helloandroid/R$attr.class HelloAndroid/bin/com/railsplayground/playthings/helloandroid/R$string.class HelloAndroid/bin/com/railsplayground/playthings/helloandroid/R$layout.class HelloAndroid/bin/HelloAndroid.apk HelloAndroid/bin/classes.dex HelloAndroid/bin/resources.ap_ HelloAndroid/AndroidManifest.xml HelloAndroid/default.properties HelloAndroid/res HelloAndroid/res/layout HelloAndroid/res/layout/main.xml HelloAndroid/res/values HelloAndroid/res/values/strings.xml HelloAndroid/res/drawable HelloAndroid/res/drawable/icon.png HelloAndroid/src HelloAndroid/src/com HelloAndroid/src/com/railsplayground HelloAndroid/src/com/railsplayground/playthings HelloAndroid/src/com/railsplayground/playthings/helloandroid HelloAndroid/src/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.java HelloAndroid/assets $
まず、HelloAndroidActivity.java から。パケジ名が微妙ですがご容赦願います。
package com.railsplayground.playthings.helloandroid; import android.app.Activity; import android.os.Bundle; public class HelloAndroidActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
昨日の話では
- エントリポイントは onCreate() メソド
- 引数の savedInstanceState は Bundle クラスの変数
- Activity が裏に回るとプロセスとしては死ぬ模様。死んだ時の状態を Bundle 型のオブジェクトの退避させるとの事。これ、以前 Java Kuche で話を聞いた時に微妙に気になってた部分で、どこまで積んだら overflow するのか、と思ってたんですが退避して死亡するのであればスタック的にもやや余裕で使えるな、と
- setContentView() メソドに渡しているのは gen 配下にある R.java で定義されている変数
な事を言われていた記憶がうっすらある。そういえば cache を SQLite で管理してます、みたいな事を言われてましたな。
次
ボタン追加を盛り込み。ってその前に git に push してみるか。
- プロジェクト選択して右クリック -> Team -> share project
- Git があるので選択して Next
- Git Repository を選択、とある
これは GitHub でリポジトリを作って clone しないと駄目なのかな。ローカルなリポジトリに対する commit はできるけど、push は微妙な模様。
とりあえず GitHub でプロジェクト作成。基本全部 add せんと駄目かなぁ。あ、bin 配下は add したくない。ので以下の標準出力を git add に渡すか。
$ find -path 'bin/' -prune -o -print
あと、GitHub 君に教えてもらった手順が以下。
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:yamanetoshi/HelloAndroid.git
git push origin master
touch は略す方向。
$ git init Initialized empty Git repository in /home/rms/eclipse_workspace/HelloAndroid/.git/ $ git add `find -path 'bin/' -prune -o -print` $ git commit -m 'first commit' Created initial commit 2ad8f87: first commit 19 files changed, 125 insertions(+), 0 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 AndroidManifest.xml create mode 100644 bin/HelloAndroid.apk create mode 100644 bin/classes.dex create mode 100644 bin/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$attr.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$drawable.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$layout.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$string.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R.class create mode 100644 bin/resources.ap_ create mode 100644 default.properties create mode 100644 gen/com/railsplayground/playthings/helloandroid/R.java create mode 100644 res/drawable/icon.png create mode 100644 res/layout/main.xml create mode 100644 res/values/strings.xml create mode 100644 src/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.java $
あら、bin 配下が add されとるな。find がダウトだった模様。時間が無い。git init したらきれいにならんかな。.git 削除して再度 git init するか。
$ rm -rf .git $ git init Initialized empty Git repository in /home/rms/eclipse_workspace/HelloAndroid/.git/ $ git add `find -path './bin/' -prune -o -print` $ git commit -m 'first commit' Created initial commit 867fce9: first commit 19 files changed, 125 insertions(+), 0 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 AndroidManifest.xml create mode 100644 bin/HelloAndroid.apk create mode 100644 bin/classes.dex create mode 100644 bin/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$attr.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$drawable.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$layout.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$string.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R.class create mode 100644 bin/resources.ap_ create mode 100644 default.properties create mode 100644 gen/com/railsplayground/playthings/helloandroid/R.java create mode 100644 res/drawable/icon.png create mode 100644 res/layout/main.xml create mode 100644 res/values/strings.xml create mode 100644 src/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.java
げ。まだあるな。。これが正解か。
$ find . -path './bin/*' -prune -o -print
再度 .git 削除してリトライ。
$ rm -rf .git $ git init nitialized empty Git repository in /home/rms/eclipse_workspace/HelloAndroid/.git/ $ git add `find . -path './bin/*' -prune -o -print` $ git add `find . -path './bin/*' -prune -o -print > ` rms@debian:~/eclipse_workspace/HelloAndroid$ git commit -m 'first commit' Created initial commit 69478a5: first commit 19 files changed, 125 insertions(+), 0 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 AndroidManifest.xml create mode 100644 bin/HelloAndroid.apk create mode 100644 bin/classes.dex create mode 100644 bin/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$attr.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$drawable.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$layout.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R$string.class create mode 100644 bin/com/railsplayground/playthings/helloandroid/R.class create mode 100644 bin/resources.ap_ create mode 100644 default.properties create mode 100644 gen/com/railsplayground/playthings/helloandroid/R.java create mode 100644 res/drawable/icon.png create mode 100644 res/layout/main.xml create mode 100644 res/values/strings.xml create mode 100644 src/com/railsplayground/playthings/helloandroid/HelloAndroidActivity.java $
おかしいなぁ。find では bin 配下が出力されんのですが create なログが出ている。出かけるみたいなので、とりあえずここで出力。