LECTURE 2 文字表示だけのアプリケーション (Activity/TextView)

○ はじめに

今回は、初めての Android アプリケーションを作成したいと思います。といっても、android create project コマンドでプロジェクトを作成して、何も手を入れずにビルドするだけですが…

デフォルトで作成されるファイルを眺めて、Android アプリケーションの雰囲気を掴みましょう!

○ android create project コマンドでプロジェクト作成

SDK をインストールすると利用可能となる android create project コマンドを使って、プロジェクトを作成します。LECTURE 1 開発環境を用意する で書いた様に、android create project コマンドは下記の様にして使います。

android create project --target <target-id> --name アプリケーション名 \
  --path プロジェクトファイル作成パス --activity Activity名 --package Activityが属するパッケージ名

target-id に指定可能な値は android list targets コマンドを実行して表示される値のいずれかを指定します。自分の環境(Linux上)では下記の様に表示されます。

android list targets
Available Android targets:
  ----------
  id: 1 or "android-17"
       Name: Android 4.2.2
       Type: Platform
       API level: 17
       Revision: 2
       Skins: WVGA800 (default), WXGA720, WXGA800-7in, WSVGA, HVGA, WQVGA400, WQVGA432, WXGA800, WVGA854, QVGA
       ABIs : armeabi-v7a

android create project コマンドの target-id には、本サイトでは上記の 1 を指定することにします。

その他、本サンプルではアプリケーション名を FirstApp、Activity(UI を持つ Android アプリケーションのメインクラス)名を MainActivity、パッケージ名を riolab.sample として、プロジェクトを作成しました。

android create project --target 1 --name FirstApp --path . --activity MainActivity --package riolab.sample

実行が終わると、現在作業しているディレクトリに以下のファイルツリーが作成されていると思います。

  • 作業場所/
    • AndroidManifest.xml
    • ant.properties
    • bin/
    • build.xml
    • libs/
    • local.properties
    • proguard-project.txt
    • project.properties
    • res/
      • drawable-hdpi/ic_launcher.png
      • drawable-ldpi/ic_launcher.png
      • drawable-mdpi/ic_launcher.png
      • drawable-xhdpi/ic_launcher.png
      • layout/main.xml
      • values/strings.xml
    • src/riolab/sample/MainActivity.java

○ ビルドおよびエミュレータで実行

作成したプロジェクトのトップディレクトリ(build.xmlがある場所)に移動し、ant debug を実行してください。bin 以下に FirstApp-debug.apk が作成されます。これが、エミュレータに転送するアプリケーションパッケージファイルです。LECTURE 1 開発環境を用意する に従ってエミュレータを起動した状態で、以下の様にしてエミュレータに転送します。

adb install bin/FirstApp-debug.apk

それでは実行してみましょう。

HOME 画面下部の赤丸で囲んだ部分をクリック
アプリケーション一覧を選択

アプリケーション一覧画面(MainActivity が android create project コマンドで作ったアプリケーション)
アプリケーション一覧画面

FirstApp の実行画面
FirstApp の実行画面

○ サンプルプログラムと説明

ここまでで作成したプロジェクト内のファイルについて説明します。002firstapp.zip からダウンロードできます。まあ、ダウンロードする必要はないと思いますが…はじめに のページから、全てのサンプルプログラムを 固めた zip ファイルをダウンロードすることもできます。

なお、ソースコードは SDK Tools 22.0.4 / プラットフォーム Android 4.2 でコンパイル可能です。local.properties 内に sdk.dir 変数が定義されていますが、ここは環境依存になりますので、お使いの環境に合わせて変更してください。

  • MainActivity.java
  • main.xml
  • strings.xml

について説明します。他のファイルについては、今後編集する必要が生じた際に説明するつもりです。

  • MainActivity.java
        1	package riolab.sample;
        2	
        3	import android.app.Activity;
        4	import android.os.Bundle;
        5	
        6	public class MainActivity extends Activity
        7	{
        8	    /** Called when the activity is first created. */
        9	    @Override
       10	    public void onCreate(Bundle savedInstanceState)
       11	    {
       12	        super.onCreate(savedInstanceState);
       13	        setContentView(R.layout.main);
       14	    }
       15	}
    
    

    本アプリケーションのメインクラスです。

    • 6 行目

      android.app.Activity を継承しています。Activity はユーザが実行できるアプリケーションを表しています。複雑なライフサイクルを持ち、UI イベントを処理したり複雑な処理を行ったりします。android.view.Window クラスを使って画面を描画します(実際には、画面上の矩形領域を表す android.view.View クラスが、自分が担当する矩形領域の描画を行います)。

    • 8 〜 14 行目 (onCreate())

      Activity のインスタンスが生成される際に、必ず実行されるメソッドです。UI の構築等、一度しか行わない初期処理をここで行います。今後、Activity のライフサイクルについて説明する際に再度説明したいと思います。

      Activity#setContentView() は、画面上の矩形領域を描画する View(もしくはサブクラス)を指定するメソッドです。

      public void Activity#setContentView(int layoutResID);
      public void Activity#setContentView(android.view.View view);
      public void Activity#setContentView(
        android.view.View view, android.view.ViewGroup.LayoutParams params);
      
      

      View のインスタンスを直接指定する他に、リソースID を指定することで UI レイアウトをリソース定義から読み込ませることも出来ます。本サンプルではリソースID を指定しています。リソースID は SDK が自動生成した R.java に定義されていて、本サンプルでは layout.main を指定しています。これはファイルツリーの res/layout/main.xml に対応しています。

  • main.xml
        1	<?xml version="1.0" encoding="utf-8"?>
        2	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        3	    android:orientation="vertical"
        4	    android:layout_width="fill_parent"
        5	    android:layout_height="fill_parent"
        6	    >
        7	<TextView
        8	    android:layout_width="fill_parent"
        9	    android:layout_height="wrap_content"
       10	    android:text="Hello World, MainActivity"
       11	    />
       12	</LinearLayout>
       13	
    
      

    UI のレイアウトを記述したファイルです。res/layout 以下には、UI レイアウトを記述する xml ファイルを格納します。名称は特に規定されていません。ビルド時に動的に認識され、R.java の layout クラスにファイル名に対応したメンバが定義されます。

    本サンプルの main.xml を簡単に説明すると、UI 上の部品配置を管理するレイアウト用のクラスとして android.widget.LinearLayout を使い、その上に文字列を扱うためのウィジェットである android.widget.TextView を載せています。また、TextView の text 属性を指定することで、"Hello World, MainActivity" という文字列が初期表示されます。

    レイアウト用のクラスについては、今後どこかでもう少し詳しくやりたいと思います。

  • strings.xml
        1	<?xml version="1.0" encoding="utf-8"?>
        2	<resources>
        3	    <string name="app_name">MainActivity</string>
        4	</resources>
    
      

    文字列リソースを定義したファイルです。res/values 以下には、色々なリソースを定義するファイルが置けるのですが、その中でも strings.xml は文字列リソース定義のために使います。本サンプルの strings.xml では、"MainActivity" という文字列を "app_name" というリソース名で定義しています。

以上で解説は終わりです。次回は、Android SDK で扱うリソースについて書きたいと思います。