Android 開発入門

オープンソースのアプリケーション・プラットフォーム

Android は、Linux® V2.6 カーネルをベースにした完全な動作環境です。当初 Android を採用する対象は、スマートフォンやそれより低価格の折り畳み式携帯電話などといったモバイル・フォンの分野でした。しかし Android のあらゆるタイプのコンピューティング・サービスと充実した機能サポートは、モバイル・フォン市場の枠を超えて拡張する可能性を秘めています。Android は他のプラットフォームやアプリケーションにも役立つはずです。この記事を読んで、Android プラットフォームの概要を知り、基本的な Android アプリケーションのコードを作成する方法を学んでください。

Frank Ableson, Software designer

Frank Ableson は、大学バスケットボールで活躍していましたが、ロサンゼルス・レイカーズとの複数年契約に至らなかったため、興味の焦点をコンピューター・ソフトウェアの設計に移しました。彼が特に楽しんでいるのは、通信分野とハードウェアのインターフェース分野で複雑な問題を解決することです。余暇は、妻の Nikki と子供たちと過ごしています。



2009年 5月 12日

はじめに

BlackBerry と iPhone はどちらも魅力的で大容量のモバイル・プラットフォームですが、それぞれの対象はまったく対照的です。BlackBerry はエンタープライズ・ビジネス・ユーザー向けの堅実なプラットフォームである一方、一般ユーザー用の機器としては iPhone の使い易さと「クールな要素」に太刀打ちすることはできません。登場したばかりの Android はまだ実証されていないプラットフォームですが、モバイル・フォンのビジネス・ユーザーと一般ユーザーの両方の世界で活躍する可能性を秘めているだけでなく、仕事と遊びを分け隔てている深い溝を埋めることになるかもしれません。

最近では、ネットワーク・ベースあるいはネットワーク対応のアプリケーションの多くが Linux カーネルのフレーバーを実行しています。それは、Linux カーネルが安定したプラットフォームで、デプロイするにもサポートするにもコスト効果が高く、デプロイメントに好ましい設計アプローチとして快く受け入れられているからです。ネットワークに対応した機器の UI は大抵 HTML ベースなので、Mac を含め PC ブラウザーで表示することができますが、すべての電化製品が汎用のコンピューティング・デバイスによって制御されなければならないわけではありません。コンロや電子レンジ、パン焼き器などのこれまでの電化製品を考えてみてください。家庭用電化製品が Android で制御されていて、カラーのタッチ・スクリーンを自慢にしていたとしたらどうなるでしょうか。例えばコンロの上に Android の UI があったとしたら、私でも料理を作れるようになるかもしれません。

この記事では、Android プラットフォームの概要、そしてモバイル・アプリケーションだけでなくそれ以外のアプリケーションでも Android を使用する方法を説明するために、Android SDK をインストールして単純なアプリケーションを作成します。この記事に記載するサンプル・アプリケーションのソース・コードをダウンロードしてください。


Android の略歴

Android プラットフォームは、Open Handset Alliance の産物です。Open Handset Alliance はより優れたモバイル・フォンを作成することを目指して連携する企業のグループで、Google を中心に、携帯電話事業者、携帯電話機メーカー、コンポーネント・メーカー、ソフトウェア・ソリューションおよびプラットフォームのプロバイダー、そしてマーケティング企業で組織されています。ソフトウェア開発の観点から見ると、Android はオープンソースの世界の真っ只中に位置します。

初めて市場に登場した Android 対応の携帯電話は、HTC (訳注: 台湾に本社を持つスマートフォンや PDA 端末のメーカー) によって製造され、T-Mobile (訳注: 欧米で移動体通信サービスを提供している事業者) から提供された G1 です。この機器は、約 1 年に及ぶ憶測の末にリリースされました。その頃に利用可能だったソフトウェア開発ツールは、段階的に改善途中の SDK リリースがいくつかあるだけでしたが、G1 のリリース日が近づいた頃、Android チームが SDK V1.0 をリリースしました。これを機に、この新しいプラットフォームのアプリケーションが浮上してくるようになりました。

技術革新に拍車を掛けるため、Google は上位出展作品に何百万ドルもの賞金を懸けた 2 回の「Android Developer Challenges」(Android 用のアプリケーション開発コンテスト) を開催しました。G1 が登場してから数か月後には Android Market がリリースされ、ユーザーが自分の携帯電話から直接アプリケーションをブラウズしたり、ダウンロードしたりできるようになりました。およそ 18 ヶ月をかけて、新たなモバイル・プラットフォームが公の場に姿を現すようになったわけです。


Android プラットフォーム

その広範な機能から、Android はデスクトップ・オペレーティング・システムと混同されがちかもしれませんが、Android は Linux カーネルをベースに豊富な機能を組み込んだ階層型環境です。Android の UI サブシステムには以下のものが含まれます。

  • ウィンドウ
  • ビュー
  • ウィジェット (編集ボックス、リスト、ドロップダウン・リストなどの共通要素を表示)

Android には、WebKit をベースにした組み込み可能なブラウザーが含まれています。WebKit はオープンソースのブラウザー・エンジンで、iPhone の Mobile Safari にもこのブラウザー・エンジンが採用されています。

Android は、WiFi、Bluetooth、そして携帯電話のネットワークを介したワイヤレス・データ接続 (GPRS、EDGE、3G など) といった充実したネットワーク接続機能を誇っています。そして Android アプリケーションでは、Google マップにリンクしてアプリケーション内で直接住所を表示するという手法がよく使われます。Android ソフトウェア・スタックにはロケーション・ベースのサービス (GPS など) と加速度計のサポートも用意されていますが、すべての Android 機器がこれらの機能に必要なハードウェアを搭載しているわけではありません。また、カメラのサポートもあります。

歴史的に見て、モバイル・アプリケーションがこれまでデスクトップ・アプリケーションになかなか追いつけなかった分野には、グラフィック/メディア処理とデータ・ストレージの方法の 2 つがあります。Android はグラフィックの問題に対処するため、2D および 3D グラフィックをサポートする OpenGL ライブラリーを組み込んでいます。データ・ストレージについては、Android プラットフォームには人気の高いオープンソースの SQLite データベースが組み込まれているため、データ・ストレージの負担は軽減されます。図 1 に、Android のソフトウェア・レイヤーの略図を示します。

図 1. Android のソフトウェア・レイヤー
Android のソフトウェア・レイヤー

アプリケーション・アーキテクチャー

前述のとおり、Android は Linux カーネルをベースに稼働します。Android アプリケーションは Java プログラミング言語で作成され、仮想マシン (VM) 内部で実行されます。重要な点として、この VM はご想像通り JVM ではなく、オープンソース・テクノロジーの Dalvik Virtual Machine であることに注意してください。以下に示すように、それぞれの Android アプリケーションは、Linux カーネルが管理するプロセス内に常駐する Dalvik VM のインスタンス内で実行されます。

図 2. Dalvik VM
Dalvik VM

Android アプリケーションは、以下に分類するコンポーネントの 1 つまたは複数で構成されます。

アクティビティー
可視の UI を持つアプリケーションは、アクティビティーとともに実装されます。ユーザーがホーム画面またはアプリケーション・ランチャーからアプリケーションを選択すると、アクティビティーが開始されます。
サービス
ネットワーク監視や更新チェックのアプリケーションなど、長期間続行する必要のあるアプリケーションにはサービスを使う必要があります。
コンテンツ・プロバイダー
コンテンツ・プロバイダーはいわゆるデータベース・サーバーのようなもので、その役割は永続データ (SQLite データベースなど) へのアクセスを管理することです。極めて単純なアプリケーションには必ずしもコンテンツ・プロバイダーを作成する必要はありませんが、大規模なアプリケーション、あるいは複数のアクティビティーやアプリケーションにデータを使用できるようにするアプリケーションを作成している場合には、コンテンツ・プロバイダーがデータへのアクセス手段となります。
ブロードキャスト・レシーバー
Android アプリケーションは、データの要素を処理するため、またはイベント (例えばテキスト・メッセージの受信など) に応答するために起動することができます。

Android アプリケーションは AndroidManifest.xml というファイルと併せて機器にデプロイされます。AndroidManifest.xml に含まれる情報は、Android アプリケーションを適切に機器にインストールするために必要な構成情報です。これには、必要なクラス名やアプリケーションが処理可能なイベントのタイプ、そしてアプリケーションが実行しなければならない許可などが含まれます。例えば、アプリケーションがネットワークにアクセスしなければならない場合 (例えばファイルをダウンロードするため)、このマニフェスト・ファイルにネットワークへのアクセス許可を明示的に記述する必要があります。多くのアプリケーションでは、このような具体的な許可を有効にすることができます。この宣言型のセキュリティーによって、不正なアプリケーションが機器にダメージを与える可能性が低くなります。

次のセクションでは、Android アプリケーションを作成する上で必要な開発環境について説明します。


必要なツール

Android アプリケーションの開発を始める最も簡単な方法は、Android SDK および Eclipse IDE (「参考文献」を参照) をダウンロードすることです。Android の開発は、Microsoft® Windows®、Mac OS X、または Linux で行えます。

この記事では、読者が Eclipse IDE および Eclipse 用 Android Developer Tools プラグインを使用していることを前提とします。Android アプリケーションは Java 言語で作成しますが、作成したアプリケーションは Dalvik VM (Java 仮想マシンではありません) でコンパイルして実行します。Eclipse での Java 言語を使用したコーディングはとても直観的で、Eclipse はコンテキストに依存したヘルプやコード補完機能などが備わった充実した Java 環境を提供します。Android Developer Tools は、Java コードのコンパイルが正常に完了すると必ず、AndroidManifest.xml ファイルを含めて適切にアプリケーションをパッケージ化します。

Eclipse と Android Developer Tools プラグインを使わないで Android アプリケーションを開発することもできますが、その場合には Android SDK 関連の処理方法を把握していなければなりません。

Android SDK は ZIP ファイルとして配布されるので、このファイルをハード・ドライブのディレクトリーに解凍します。SDK の更新は何回か行われているので、開発環境を上手に整理して、SDK のバージョンを簡単に切り替えられるようにしておくことをお勧めします。SDK には以下のものが含まれています。

android.jar
アプリケーションを作成するために必要なすべての Android SDK クラスが含まれる Java アーカイブ・ファイルです。
documention.html および docs ディレクトリー
SDK ドキュメントはローカルおよび Web 上で提供されます。その大部分は JavaDocs 形式なので、SDK に含まれる多数のパッケージを簡単にナビゲートすることができます。ドキュメントには、開発の概要を記した開発ガイドと、広範な Android コミュニティーへのリンクも含まれています。
samples ディレクトリー
samples サブディレクトリーには、さまざまな API を実際に実行する ApiDemo をはじめ、多種多様なアプリケーションの完全なソース・コードが含まれます。Android アプリケーションの開発を始める際には、まずサンプル・アプリケーションを調べてみることが非常に有効な手段となります。
tools ディレクトリー
Android アプリケーションの作成に使用するすべてのコマンドライン・ツールが含まれます。便利なツールとして最もよく用いられているのは、adb (Android Debug Bridge) ユーティリティーです。
usb_driver
開発環境を G1 や、Android 開発者向けのロックフリーの Android Dev Phone 1 などの Android 対応機器に接続するために必要なドライバーが含まれるディレクトリーです (訳注: ロックフリーとは、SIM ロックやハードウェア・ロックなどを外してどの携帯電話事業者のネットワークでも使えるようにしたもの)。このディレクトリーに含まれるファイルが必要となるのは、Windows プラットフォームを使用する開発者のみです。

Android アプリケーションは実際の機器で実行することも、Android SDK に付属の Android Emulator で実行することもできます。図 3 は、Android Emulator のホーム画面です。

図 3. Android Emulator
Android Emulator

Android Debug Bridge

adb ユーティリティーがサポートするコマンドライン引数のいくつかのオプションを使用すると、ファイルを Android 機器との間でコピーするといった強力な機能を実行することができます。シェル・コマンドライン引数によって、携帯電話そのものに接続し、基本的なシェル・コマンドを実行することができます。図4 に、USB ケーブルで Windows ラップトップに接続した実際の Android 機器に対する adb シェル・コマンドを示します。

図 4. adb シェル・コマンドの使用
adb シェル・コマンドの使用

図 4 では、adb シェル環境で以下の操作を実行しています。

  • 複数のネットワーク接続が示されたネットワーク構成を表示。ネットワーク接続は複数あることに注意してください。
    • lo は、ローカル接続またはループバック接続です。
    • tiwlan0 は、ローカル DHCP サーバーによって提供されるアドレスを使用した WiFi 接続です。
  • PATH 環境変数の内容を表示。
  • スーパーユーザーに切り替えるために su コマンドを実行。
  • ユーザー・アプリケーションが保存されている /data/app にディレクトリーを変更。
  • /data/app ディレクトリーで、ディレクトリーの一覧を表示してアプリケーションが 1 つあることを確認。Android アプリケーション・ファイルは実際にはアーカイブ・ファイルなので、WinZip などで構成ファイルを表示することができます。拡張子は apk です。
  • ping コマンドを実行して Google.com にアクセスできるかどうかを確認。

この同じコマンド・プロンプト環境から、SQLite データベースを操作したり、プログラムを起動したりするなど、他にも多くのシステム・レベルのタスクを実行することができます。携帯電話に接続していることを考えれば、これはかなり卓越した機能だと言えます。

次のセクションでは、単純な Android アプリケーションを作成してみます。


基本的なアプリケーションのコーディング

このセクションでは、Android アプリケーションの作成方法を簡単に説明します。このサンプル・アプリケーションは想像し得る最も単純なアプリケーションで、「Hello Android」アプリケーションを変更しただけです。ここでは画面の背景色を白一色にするというマイナーな変更を加え、携帯電話を懐中電灯として使用できるようにします。独創的とは言えませんが、サンプルとしては役立つはずです。まずは、完全なソース・コードをダウンロードしてください。

Eclipse でアプリケーションを作成するには、「ファイル」 > 「新規」 > 「Android プロジェクト」の順に選択して、「新規 Android プロジェクト」ウィザードを起動します。

図 5. 「新規 Android プロジェクト」ウィザード
「新規 Android プロジェクト」ウィザード

次に、main.xml に保存された UI レイアウトを使用して、アクティビティーが 1 つしかない単純なアプリケーションを作成します。このレイアウトには、Android FlashLight と表示されるように変更する対象のテキスト要素が含まれます。以下に、この単純なレイアウトを記載します。

リスト 1. FlashLight のレイアウト
<?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"
    android:background="@color/all_white">
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" android:textColor="@color/all_black" 
   android:gravity="center_horizontal"/>
</LinearLayout>

strings.xml に、色のリソースをいくつか作成します。

リスト 2. strings.xml 内に作成された色
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Android FlashLight</string>
    <string name="app_name">FlashLight</string>
    <color name="all_white">#FFFFFF</color>
    <color name="all_black">#000000</color>
</resources>

メイン画面のレイアウトには、all_white として定義された背景色があります。strings.xml ファイルでは、all_white は RGB トリプレット値の #FFFFFF、つまり白一色として定義されています。

レイアウトには TextView が 1 つ含まれていますが、実際には単なる静的テキストなので編集することができません。このテキストは黒に設定されていて、gravity 属性を使って水平方向のセンタリングが行われています。

このアプリケーションには、FlashLight.java という名前の Java ソース・ファイルがあります (以下を参照)。

リスト 3. Flashlight.java
package com.msi.flashlight;
import android.app.Activity;
import android.os.Bundle;
public class FlashLight extends Activity {
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

上記は「新規 Android プロジェクト」ウィザードによるボイラープレート・コードをそのまま使ったもので、以下の内容になっています。

  • com.msi.flashlight という名前の Java パッケージに含まれます。
  • 以下の 2 つのインポートがあります。
    • アクティビティー・クラスのインポート
    • バンドル・クラスのインポート
  • このアクティビティーが起動されると、onCreate メソッドが呼び出されて savedInstanceState が渡されます。このバンドルは、アクティビティーが中断されてから再開されるときに使用されるものなので、このアプリケーションでは考慮する必要はありません。
  • onCreate メソッドは、これと同じ名前を持つアクティビティー・クラス・メソッドをオーバーライドし、スーパークラスの onCreate メソッドを呼び出します。
  • setContentView() は、main.xmlファイルに定義された UI レイアウトを関連付けるために呼び出します。main.xml および strings.xml に含まれるすべてのものは、R.java ソース・ファイルに定義された定数に自動的にマッピングされます。このファイルはビルドされるたびに変更されるので、直接編集しないでください。

アプリケーションを実行すると、白い画面に黒いテキストが表示されます。

図 6. FlashLight の白い画面
FlashLight の白い画面

以下に、FlashLight アプリケーションに対応する AndroidManifest.xml ファイルの設定内容を記載します。

リスト 4. FlashLight の AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.msi.flashlight"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".FlashLight"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

このファイルは、Eclipse 用 Android Developer Tools プラグインによって自動的に作成されたものです。つまり、何もしなくてもこのファイルが作成されます。

このアプリケーションは確かに目を見張るようなものではありませんが、隣で眠っている連れ合いを起こさずに本を読みたいときや、停電中にブレーカーを探すときに重宝するはずです。


まとめ

この記事では、Android の概要を学び、ちょっとしたアプリケーションを作成しました。読者の皆さんがこのサンプル・アプリケーションに刺激されて、Android プラットフォームをもっと詳しく調べてみる気になったことを願います。市場を動かすオープンソースのプラットフォームとなることが期待される Android は、携帯電話という枠を遙かに超えて活躍するはずです。


ダウンロード

内容ファイル名サイズ
FlashLight source codeos-android-devel-FlashLight.zip22KB

参考文献

学ぶために

  • Open Handset Alliance は、47 のモバイル技術企業がモバイル分野での技術革新を促進し、より機能性に優れ、しかも低価格のモバイル・エクスペリエンスを消費者に提供するために連携しているグループです。これらの企業が一団となって、これまでになかった完全にオープンソースで無料のモバイル・プラットフォーム、Android を開発しました。
  • Android 開発者向けサイトに資料、ダウンロード、ブログなどが揃っています。
  • Dalvik Virtual Machine について詳しく学んでください。
  • YouTube で、Dalvik VM の内側について説明しているチュートリアルを見てください。
  • Unlocking Android: A Developer's Guide』では、Android オペレーティング・システムおよび開発ツールについて簡潔かつ実際的に解説しています。
  • ソフトウェア開発者を対象とした興味深いインタービューや討論については、developerWorks podcasts をチェックしてください。
  • developerWorks の Technical events and webcasts で最新情報を入手してください。
  • developerWorks を Twitter でフォローしてください。
  • 世界中で近日中に予定されている IBM オープンソース開発者を対象とした会議、見本市、ウェブキャストやその他のイベントをチェックしてください。
  • オープンソース技術を使用して開発し、IBM の製品と併用するときに役立つ広範囲のハウツー情報、ツール、およびプロジェクト・アップデートについては、developerWorks Open source ゾーンを参照してください。
  • 無料の developerWorks On demand demos で、IBM およびオープンソースの技術と製品機能を調べて試してみてください。

製品や技術を入手するために

  • Android SDK をダウンロードしてください。
  • 最新の Eclipse IDE を入手してください。
  • IBM ソフトウェアの試用版を使用して、次のオープンソース開発プロジェクトを革新してください。ダウンロード、あるいは DVD で入手できます。
  • IBM 製品の評価版をダウンロードしてください。または、IBM SOA Sandbox のオンライン試用版で、DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験することもできます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=395561
ArticleTitle=Android 開発入門
publish-date=05122009