Android環境のアプリケーションの開発入門

関連リンク:ARM自宅サーバ

株式会社 日新テクニカ
http://www.nissin-tech.com


更新日: 2011年5月19日

■ JDK(Java SE Development Kit)をインストールする

http://www.oracle.com/technetwork/java/javase/downloads/index.htmlからJDKをダウンロードする。現時点Windows用の最新版はjdk-6u25-windows-i586.exeです。

ダウンロードした後、インストールします。

■ Android SDKをインストールする

http://developer.android.com/sdk/index.htmlからAndroid SDKをダウンロードする。現時点Windows用の最新版はinstaller_r11-windows.exeですが、インストール時JDKを探せません。そのため、installer_r09-windows.exeを利用します。

ダウンロードした後、インストールします。

■ Android-2.3関連のパッケージをインストールする

インストールした「SDK Manager」を実行させます。Android-2.3関連のパッケージをインストールするだけ、「Choose Packages to Install」画面で「Cancel」を押します。

画面のようなAndroid-2.3関連のパッケージを選択します。「Install Selected」ボタンを押します。

インストール完了すると、「Yes」ボタンでADBを再起動します。

■ Eclipseをインストールする

http://www.eclipse.org/downloads/からEclipse IDE for Java Developersをダウンロードする。現時点Windows用の最新版はeclipse-java-helios-SR2-win32.zipです。

直接解凍します。

■ ADT(Android Development Tools)をインストールする

http://developer.android.com/sdk/eclipse-adt.html#installingからEclipse IDE for Java Developersをダウンロードする。現時点Windows用の最新版はADT-10.0.1.zipです。

Eclipseのフォルダに解凍します。

■ Eclipseのコンフィグ

Eclipseを起動させます。メインメニュー「Windows」->「Preferences」を選択します。SDKのインストールフォルダ「C:\Program Files\Android\android-sdk-windows」を設定します

「OK」ボタンを押します。

■ Androidのシミュレータ

「SDK Manager」を実行させます。

「new」ボタンを押します。


画面のように設定して、「create AVD」を押します。


「Start」ボタンでAndroidのシミュレータを起動させます。「Launch」ボタンを押します。


Androidのシミュレータを起動した様子

■ 初のAndroidのアプリケーション

Eclipseを開く、メニュー「File」->「New」->「Android Project」で

新プロジェクトを作ります。

関連の設定を入力して、「Finish」ボタンで完成します。


src -> com.AndroidHello -> MainActivity.javaソースコードが見えます。


左側のAndroidHelloプロジェクトを選択し、Runマークを押して、Run As->Android Applicationを選択します。Androidシミュレータ環境でAndroidHelloプロジェクトを実行させます。


実行した様子

■ ADBの使い方

「SDK Manager」を実行させます。ADB用のUSBドライバをインストールします。

画面のように設定して、「Install Selected」ボタンを押します。

mini6410ボードに給電して、Androidが起動完了した後、USBケーブルでパソコンのUSBポートに接続します。USBドライバはC:\Program Files\Android\android-sdk-windows\google-usb_driverにあります。

パソコンの環境変数にADBのパス"C:\Program Files\Android\android-sdk-windows\platform-tools;"を添加します。コマンドランでadbを入力して確認します。
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\zqing>adb ← 入力する。
Android Debug Bridge version 1.0.26

 -d                            - directs command to the only connected USB device
                                 returns an error if more than one USB device is present.
 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is running.
 -s <serial number>            - directs command to the USB device or emulator with
                                 the given serial number. Overrides ANDROID_SERIAL

次のコマンドでボードの接続を確認します。
C:\Documents and Settings\zqing>adb devices ← 入力する。
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
MINI6410_2011W08        device

次のコマンドでShellに入ります。
C:\Documents and Settings\zqing> adb shell ← 入力する。

次のコマンドでソフトapkをインストールする。
C:\Documents and Settings\zqing> adb install your.apk ← 入力する。

■ 実機でアプリケーションを実行させる

Eclipseを起動させます。プロジェクト「AndroidHello」を選択して、マウスの右メニューに「Properties」を選択します。
「Editor」ボタンを押します。


「Target」タブに「manual」を設定して、「OK」ボタンを押します。

メニューRun->Run As->Android Applicationを選択すると

mini6410を選択して、「OK」を押します。


実機で動く様子

デバッグもできます。

■ Android環境でハードウェアへアクセスする

Android環境でハードウェアへアクセスするために、ライブラリlibfriendlyarm-hardware.soを提供ました。プリインストールされたiTestアプリケーションはこのライブラリのデモです。

ライブラリの場所:

Androidのソースディレクトリ
vendor/friendly-arm/mini6410/prebuilt/libfriendlyrm-hardware.so

ボードには
/system/lib/libfriendlyarm-hardware.so

ライブラリの使い方:

開発しているアプリケーションのフォルダにはlibs\armeabiフォルダを作ります。libs\armeabiフォルダにはライブラリlibfriendlyarm-hardware.soをコピーします。

アプリケーションのフォルダのsrcフォルダにはcom\friendlyarm\AndroidSDKフォルダを作ります。AndroidSDKフォルダにはHardwareControler.javaソースを添加します。HardwareControler.javaの内容は:
package com.friendlyarm.AndroidSDK;
import android.util.Log;

public class HardwareControler
{
	/* Serial Port */
	static public native int openSerialPort( String devName, long baud, int dataBits, int stopBits );
	
	/* LED */
	static public native int setLedState( int ledID, int ledState );
    
    /* PWM */
	static public native int PWMPlay(int frequency);
	static public native int PWMStop();
    
    /* ADC */
	static public native int readADC();
	
	/* I2C */
	static public native int openI2CDevice();
	static public native int writeByteDataToI2C(int fd, int pos, byte byteData);
	static public native int readByteDataFromI2C(int fd, int pos);
	
	/* 汎用インターフェース */
	static public native int write(int fd, byte[] data);
	static public native int read(int fd, byte[] buf, int len);
	static public native int select(int fd, int sec, int usec);
	static public native void close(int fd);
    
    static {
        try {
        	System.loadLibrary("friendlyarm-hardware");
        } catch (UnsatisfiedLinkError e) {
            Log.d("HardwareControler", "libfriendlyarm-hardware library not found!");
        }
    }
}

Eclipseを起動させます。プロジェクトを右クリックして、「Refresh」で更新します。次の様子なら、ライブラリを正確に添加しました。

HardwareControlerの関数を使えば、ソースには次の行を添加します。
import com.friendlyarm.AndroidSDK.HardwareControler;

ライブラリの関数の説明:

シリアルポートの関数:
関数名パラメータと戻り値説明
int openSerialPort( String devName, long baud, int dataBits, int stopBits )devName: シリアルポート名:
/dev/s3c2410_serial1
/dev/s3c2410_serial2
/dev/s3c2410_serial3
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

baud: ボーレート
dataBits: データビット (5~8,一般的に8 )
stopBits: ストップビット(1~2,一般的に1 )

戻り値:
成功すればシリアルポートのファイル・ディスクリプターを戻ります,ファイル・ディスクリプターでread、write、selectなどの関数がアクセスできます。エラーなら,戻り値 -1。
シリアルポートポートを開く。
int write( int fd, byte[] data)fd: ファイル・ディスクリプター
data: 書き込むデータ

戻り値:
書き込んだバイト数,-1はエラー。
書き込む
int read( int fd, byte[] buf, int len)fd: ファイル・ディスクリプター
data: 読み込むバッファーファー
len: 読み込むバイト数

戻り値:
読み込んだバイト数,-1はエラー。
読み込む
int select( int fd, int sec, int usec)fd: ファイル・ディスクリプター
sec: 待ち時間(S)
usec: 待ち時間(uS)

戻り値:
fdにはデータがあれば1,なければ0、-1はエラー。
データがあるかどうか、調べる
void close(int fd)fd: ファイル・ディスクリプターfd: ファイル・ディスクリプターをクローズする。

LEDの関数:
関数名パラメータと戻り値説明
int setLedState( int ledID, int ledState )ledID: LEDナンバー (0~3)
ledState: 1点灯,0消灯

戻り値:
成功0,エラー-1
LED制御

PWMの関数:
関数名パラメータと戻り値説明
int PWMPlay(int frequency);frequency: 音の周波数

戻り値:
成功0,エラー-1
鳴る
int PWMStop();戻り値:
成功0,エラー-1
消音

ADCの関数:
関数名パラメータと戻り値説明
int readADC()戻り値:
ADCの値,エラー-1
ADCの値を読み込む

EEPROMの関数:
関数名パラメータと戻り値説明
int openI2CDevice();戻り値:
EEPROMのファイル・ディスクリプター,エラー-1
EEPROMを開く
int writeByteDataToI2C( int fd, int pos, byte byteData);fd: openI2CDevice関数から戻すファイル・ディスクリプター
pos: EEPROMのoffset(0~255)
byteData: 書き込むデータ

戻り値:
書き込んだデータ数,エラー-1
EEPROMに1バイトを書き込む。この関数は時間がかかります。約10mS
int readByteDataFromI2C( int fd, int pos);fd: openI2CDevice関数から戻すファイル・ディスクリプター
pos: EEPROMのoffset(0~255)

戻り値:
読み込んだデータ,エラー-1
EEPROMから1バイトを読み込む。この関数は時間がかかります。約10mS
void close(int fd)fd: ファイル・ディスクリプターfd: ファイル・ディスクリプターをクローズする。

LEDのサンプル:
Android-2.3フォルダにはLEDサンプルLEDDemo.rarがあります。ご参照ください。