2009/05/19

Android アプリをCUIで開発してみる(Hello, MapView)

Portable Ubuntu for Windows(以下Portable Ubuntuと記述)を使ってCUIでのAndroid アプリ開発のお勉強です。

こちらはチュートリアルのHello, MapView で試した際のメモです。
Hello, MapView | Android Developers [developer.android.com]

相変わらずよく分からずにやっていますので、マネしないでください。


使用しているSDKはAndroid 1.5 SDK, Release 1のLinux版です。
また、GNOME Terminal + VIM + Ant を使用しました。

基本的にチュートリアル通りなのですが、気になった箇所をメモしておきます。


○ Map API の取得
チュートリアルに使うだけなので、デバッグ用のキーを取得しました。
Obtaining a Maps API Key - Google Projects for Android [code.google.com]

まずデバッグ用のkeystoreからMD5 fingerprintを取得します。
Portable Ubuntu なのでkeytstoreは
~/.android/debug.keystore
にあります。

その他の環境は以下の場所にそれぞれあるようです。
  • Windows Vista: C:\Users\<user>\.android\debug.keystore

  • Windows XP: C:\Documents and Settings\<user>\.android\debug.keystore

  • OS X and Linux: ~/.android/debug.keystore


それではPortable Ubuntu で MD5 fingerprintを取得します。
$ keytool -list -alias androiddebugkey \
> -keystore ~/.android/debug.keystore \
> -storepass android -keypass android
androiddebugkey, 2009/05/16, PrivateKeyEntry,
証明書のフィンガープリント (MD5): MD5 fingerprint


取得したMD5 fingerprintを次のURLの入力フォームに入力してMap API Keyを取得します。
Sign Up for the Android Maps API [code.google.com]
スペースが入ったりするとダメみたいです。


○ プロジェクトの作成 ~ ソースの編集
プロジェクトの雛形を作成します
後で記述しますが、--target で指定する target id は 3 じゃないとダメみたいです。
$ android create project \
--target 3 \
--package com.example.hellomapview \
--activity HelloMapView \
--path HelloMapView


ソースの編集はチュートリアル通りなのですが、HelloMapView.java で次の4つをインポートしました。
import android.widget.LinearLayout;
import android.widget.ZoomControls;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

EclipseだとCtrl + Shift + O で自動でインポートしてくれるんでしたよね。


○ プロジェクトのビルド
チュートリアルから以下のサイトリンクされています。
Google APIs Add-On - Google Projects for Android [code.google.com]

ここに次のような記述がありました。
The Google APIs add-on includes:
  • The Maps external library for Android 1.5 (API Level 3)


android create projectやandroid update projectのオプション--targetで指定するtarget idの意味をandroid list targetsで調べると次のようにあります。
$ android list targets
Available Android targets:
id: 1
Name: Android 1.1
Type: Platform
API level: 2
Skins: HVGA (default), HVGA-L, QVGA-L, QVGA-P, HVGA-P
id: 2
Name: Android 1.5
Type: Platform
API level: 3
Skins: HVGA (default), HVGA-L, QVGA-L, QVGA-P, HVGA-P
id: 3
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:


ちょっと試しに target id の指定を変えて android update project コマンドでプロジェクトをアップデートしてビルドしてみました。

結論としては、target id は 3じゃないとダメみたいです。

試しにtarget id に 2 を指定してビルドしてみます。
$ rm -rf bin
$ android update project --target 2 --name HelloMapView --path $PWD
Updated default.properties
Updated local.properties
Updated file /home/pubuntu/D/xxx/workspace/HelloMapView/build.xml
$ ant debug
Buildfile: build.xml
[setup] Project Target: Android 1.5
[setup] API level: 3

dirs:
[echo] Creating output directories if needed...
[mkdir] Created dir: /mnt/D/xxx/workspace/HelloMapView/bin
[mkdir] Created dir: /mnt/D/xxx/workspace/HelloMapView/bin/classes

resource-src:
[echo] Generating R.java / Manifest.java from the resources...

aidl:
[echo] Compiling aidl files into Java classes...

compile:
[javac] Compiling 2 source files to /mnt/D/xxx/workspace/HelloMapView/bin/classes
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:7: パッケージ com.google.android.maps は存在しません。
[javac] import com.google.android.maps.MapActivity;
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:8: パッケージ com.google.android.maps は存在しません。
[javac] import com.google.android.maps.MapView;
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:10: シンボルを見つけられません。
[javac] シンボル: クラス MapActivity
[javac] public class HelloMapView extends MapActivity
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:13: シンボルを見つけられません。
[javac] シンボル: クラス MapView
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] MapView mapView;
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:20: シンボルを見つけられません。
[javac] シンボル: 変数 super
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] super.onCreate(savedInstanceState);
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:21: シンボルを見つけられません。
[javac] シンボル: メソッド setContentView(int)
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] setContentView(R.layout.main);
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:23: シンボルを見つけられません。
[javac] シンボル: メソッド findViewById(int)
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] linearLayout = (LinearLayout) findViewById(R.id.zoomview);
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:24: シンボルを見つけられません。
[javac] シンボル: クラス MapView
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] mapView = (MapView) findViewById(R.id.mapview);
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:24: シンボルを見つけられません。
[javac] シンボル: メソッド findViewById(int)
[javac] 場所 : com.example.hellomapview.HelloMapView の クラス
[javac] mapView = (MapView) findViewById(R.id.mapview);
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:17: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
[javac] @Override
[javac] ^
[javac] /mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java:30: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
[javac] @Override
[javac] ^
[javac] エラー 11 個

BUILD FAILED
/home/pubuntu/bin/android-sdk/platforms/android-1.5/templates/android_rules.xml:116: Compile failed; see the compiler error output for details.

Total time: 6 seconds

ビルドできませんでした。


今度は target id に 3 を指定してみます。
$ rm -rf bin
$ android update project --target 3 --name HelloMapView --path $PWD
Updated default.properties
Updated local.properties
Updated file /home/pubuntu/D/xxx/workspace/HelloMapView/build.xml
pubuntu@pubuntu:~/D/xxx/workspace/HelloMapView$ ant debug
Buildfile: build.xml
[setup] Project Target: Google APIs
[setup] Vendor: Google Inc.
[setup] Platform Version: 1.5
[setup] API level: 3

dirs:
[echo] Creating output directories if needed...
[mkdir] Created dir: /mnt/D/xxx/workspace/HelloMapView/bin
[mkdir] Created dir: /mnt/D/xxx/workspace/HelloMapView/bin/classes

resource-src:
[echo] Generating R.java / Manifest.java from the resources...

aidl:
[echo] Compiling aidl files into Java classes...

compile:
[javac] Compiling 2 source files to /mnt/D/xxx/workspace/HelloMapView/bin/classes
[javac] 注:/mnt/D/xxx/workspace/HelloMapView/src/com/example/hellomapview/HelloMapView.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイル してください。

dex:
[echo] Converting compiled files and external libraries into bin/classes.dex...

package-resources:
[echo] Packaging resources
[aaptexec] Creating full resource package...

debug:
[apkbuilder] Creating HelloMapView-debug.apk and signing it with a debug key...
[apkbuilder] Using keystore: /home/pubuntu/.android/debug.keystore

BUILD SUCCESSFUL
Total time: 11 seconds

警告らしきものは出ますが、ビルドはできました。

0 件のコメント: