似非エンジニアのメモ

研究者にもエンジニアにもまだ到達できていないそのへんの会社員がつづる日々のメモ

Eclipse を使わない Android アプリ開発メモ ー こんにちは世界編

概要

前回の記事では,環境の構築を行いました.ここでは実際におなじみの Hello, world を作ってみたいと思います.

注意

この文章は2011/12/31に書かれています.時間の経過と共に情報の信頼性は失われます.最新の情報とは異なる場合があります

あくまで個人的なメモのため情報の信頼性に乏しいかもしれません

前提

このページの情報はある程度知識のある方が読まなければわからないかもしれません.

また Platform は Windows を前提としていますが,ここにある情報だけで十分他 Platform での運用も可能だと思います.

プロジェクトの作成

Target ID の確認

プロジェクトを作成する前に,target id と呼ばれるものを確認する必要があります.Android アプリケーションを作成するためには,サポートするAPIレベルや,液晶サイズ・・・等々を決める必要がありますが, Android SDK ではこれらの情報を target id としてデータベース化しています.そして,開発を行う前に target id を決めてから開発をスタートさせる必要があります.この target id は各個人の環境で異なります. 自分の環境での target id のリストを得るためには以下のコマンドを実行します.

 > android list targets

筆者の環境では以下のようになりました

Available Android targets:
----------
id: 1 or "android-10"
     Name: Android 2.3.3
     Type: Platform
     API level: 10
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 2 or "Google Inc.:Google APIs:10"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
     ABIs : armeabi
----------
id: 3 or "KYOCERA Corporation:DTS Add-On:10"
     Name: DTS Add-On
     Type: Add-On
     Vendor: KYOCERA Corporation
     Revision: 1
     Description: DTS Add-On
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.kyocera.dualscreen (dualscreen.jar)
          Dual Screen optional platform library
     Skins: DTS400 (default), WVGA854, WQVGA400, HVGA, DTS800, WQVGA432, WVGA800, QVGA
     ABIs : armeabi
----------
id: 4 or "LGE:Real3D Add-On:10"
     Name: Real3D Add-On
     Type: Add-On
     Vendor: LGE
     Revision: 1
     Description: Real3D add-on
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.lge.real3d (real3d.jar)
          Real3D library
     Skins: WVGA854, WQVGA400, Optimus3D (default), HVGA, WQVGA432, WVGA800, QVGA
     ABIs : armeabi
----------
id: 5 or "Sony Ericsson Mobile Communications AB:EDK 1.2:10"
     Name: EDK 1.2
     Type: Add-On
     Vendor: Sony Ericsson Mobile Communications AB
     Revision: 1
     Description: XPERIA Device
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.sonyericsson.media.infinite.extension_1 (com.sonyericsson.media.infinite.extension_1.jar)
          Library for Android Market filtering
      * com.sonyericsson.eventstream_1 (com.sonyericsson.eventstream.jar)
          Library for Android Market filtering
      * com.sonyericsson.eventstream_2 (com.sonyericsson.eventstream.jar)
          Library for Android Market filtering
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800, QVGA, HVGA_XPERIA, WVGA_XPERIA (default)
     ABIs : armeabi

プロジェクトの作成

Androidアプリケーションは,主に幾つかの xml 文書と,Java class によって記述されます.これらのファイルを自前ですべて用意することももちろん可能ですが,これらのファイルを自動的に作成してくれるツールが Android SDK には同梱されています.以下のコマンドでプロジェクトのテンプレートを作成することができます.

 > android create project --name hello --target 1 --path ${PROJECT_ROOT} --package jp.example.hoge.hello --activity helloActivity

ここで,--name はプロジェクト名を,--target は先程説明した target id を指定します.また --path はプロジェクトのパスを指定し,--package は Java class の package そのものです.最後に acitivity について少し説明します.Android アプリケーションはアプリケーション中の画面をひとつひとつを Acitivity という概念で取り扱います.計算履歴が別画面で参照できるの電卓アプリケーションを想像してみてください.このアプリケーションは電卓に相当する画面と,履歴の画面があるため2つの Activitiy があります.プロジェクト作成時に指定している activity はアプリケーション起動時に表示される acitivity の class (Activityは android.app.Activity class の extendsとして実装します)を指定します.少し古い記事ですが, が参考になるかもしれません.

ソースコードの編集

プロジェクトで作成されたソースコードは ${PROJECT_ROOT}\src 以下に配置されます.今回の例で言うと,${PROJECT_ROOT}\jp\example\hoge\hello 以下に helloActivity.java が作成されています.

作成された時点では,res/layout/main.xml で設定されている layout (後述)をただ読み込むだけのソースですが,layout を読むだけで Hello, world になっているのでここでは編集しません

Layoutファイル

Android では Activity 上に配置するボタンなどを(一般的には)xml で記述し,それを Java class 側から呼び出して実際に配置します.Layoutの設定は ${PROJECT_ROOT}\res\layoutに配置します.プロジェクト作成時にはすでにmain.xmlが作成されています.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
    <TextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="Hello World, HelloWorld" />
    </LinearLayout>

上記が main.xml の中身ですが,見ての通り TextView が配置され,しかも, Hello World が TextView の中身としてせっていしてあります.したがって,このlayoutを読み込むだけで Hello, world が表示されます.

というわけで,プロジェクト作成後何もいじらなくても Hello, world になっています.(もちろん自力で TextViewをコード中で記述しても可能です.)したがって,コードは編集せずに,ant を呼んでビルドしましょう

 > ant debug

上記で debug コンパイル~リンクが走ります.成功すれば,その旨が表示されます.

ビルドされたバイナリは ${PROJECT_ROOT}/bin 以下に出力されます.

なお,ant release でリリースコンパイルが,ant install で仮想端末へのインストール, ant uninstall で仮想端末からのアンインストールが走ります.

ADVへのインストール/アンインストール

ant install でも良いですが,adb を使ってもインストール可能です.以下のようにします.

 > adb install bin\hello-debug.apk

ビルドモード(debug or releaes)がサフィックスとしてファイル名につきます.また,このインストールですが,既にインストール済みのapkに対しては失敗しますのでご注意ください.その時は一度アンインストールする必要があります.

アンインストールはすこしめんどくさくて,package 名を指定する必要があります.例えば以下のようにします.

 > adb uninstall jp.example.hoge.hello

まとめ

とりあえず,Eclipse + ADT を使わず Android アプリケーションを作成する下地ができました.あくまで自分用のメモなので色々と不備がありそうですがご勘弁ください.それでは良いお年を.