« 2010年05月 | メイン | 2011年01月 »

1  2  3

2010年12月 記事一覧

2010年12月22日

アンドロイド開発環境の構築(その1) JDKのインストール

しばらく前からWindows Mobile 6.5のスマートフォンを利用、Visual C++で必要なソフトを作って使っていた。Windows Mobileは基本的にWindows 7と同じソースコードで開発出来るので開発自体は楽で便利。しかし端末(Toshiba T-01A)の性能が著しく悪いのでAndoroidへ移行することにしました。



最終的にはAndroidアプリをJava&C++で作成することを目標にゼロから開発環境を整えることにしました。現段階ではAndroid実機もなし、AndroidやJavaに関する知識もなしという状態です。そのためAndroidがどんなものななのか知るために、まずはC++を利用しないJavaによる従来どおりの開発環境を構築してみます。




android00.png
まずはC++を利用しない通常のAndroid開発環境を整える。開発にはJava Development Kit(JDK)が必要なので、最初にhttp://www.oracle.com/technetwork/java/javase/downloads/index.htmlからJava Platform, Standard Editionを「Dowonload JDK」ボタンからダウンロードする。

android01.png
今回はWindows上で開発を行うので、プラットフォームは「Windows」を選択、ライセンスに同意するチェックを入れて「Continue」をクリックする。

android02.png
今回のダウンロードファイル名は「jdk-6u-windows-i586.exe」というファイル名だった。

android03.png
ダウンロード後、ダブルクリックして実行する。

android04.png
Java SE Development Kit 6のインストールが開始された。

android05.png
不要なものも多いが、気にせずに全部インストールしてしまう。

android06.png

android07.png
インストール先はデフォルトのままとした。

android08.png

android09.png
これでJDKのインストールが終わった。


アンドロイド開発環境の構築(その2) Android SDKのインストール

android10.png
次にAndroidの開発キットをダウンロードする。ダウンロード元はhttp://developer.android.com /sdk/index.html
Windows用の「installer_r08-windows.exe (Recommended)」をダウンロードする。

android11.png
ダウンロードしたAndroid開発キットを実行してインストールする。

android12.png
Android SDKのインストールが開始された。

android13.png
もしもJDKがインストールされていない場合は、2つ目の画面から先へ行けない。今回は先ほどJDKをインストールしたので次へと進む。

android14.png
Android SDKのインストール先はデフォルトのままとした。

android15.png

android16.png

android17.png

android18.png
これでインストールが終りだ。このままSDK Managerの設定に入る。

android19.png
SDK Managerが開いたら、「Accept All」を選択してインストールを開始する。もしもAndroid 1.5や1.6などの古いバージョンが不要ならそれらがインストールされないように設定してもいい。

android20.png

android21.png
途中で、何か聞かれたら「Yes」を選択する

android22.png
これでSDK Managerの設定が終わった。「Close」ボタンを押す。

android23.png
ここでインストールされているSDK一覧を確認できる。「×」をクリックして閉じる。

android24.png
真っ黒の画面で気持ち悪いが気にせずに「×」を押して閉じる。






android25.png
次にAndroid SDKのパスを環境変数に登録する。

「スタート」メニューの「コンピューター」を右クリックして現れたメニューから「プロパティ」を選択する。

android26.png
そして「システムの詳細設定」を選択する。

android27.png
開いた画面で「環境変数」ボタンをクリックする。

android28.png
「システム環境変数」の中にある「Path」を選択して「編集」ボタンをクリックする。

android29.png
ここで変数値に「C:\Program Files\Android\android-sdk-windows\tools」を「;」区切りで追加する。もしもAndroid SDKをほかの場所にインストールした場合は、そのパスを指定する。

android30.png
環境変数の設定が終わったら「OK」ボタンを押して閉じる。


アンドロイド開発環境の構築(その3) Eclipseのインストール

android31.png
次にIDE開発環境のEclipseをダウンロードする。ダウンロード元はhttp://www.eclipse.org/ downloads/で、「Eclipse lassic 3.6.1」を選ぶ。今回は32ビット版を選択した。

android32.png
ダウンロード先をクリックしてダウンロードを開始する。

android33.png
ダウンロードしたEclipseをインストールする。zip形式のファイルを好きな場所に解凍するだけだ。

android34.png
今回はCドライブのルートに解凍した。

android35.png
そのままだと不便なので、インストーフォルダにある「Eclipse.exe」を右クリックして現れたメニューの「送る」から「デスクトップ(ショートカットを作成)」を選択して、デスクトップにショートカットを作っておく。






android36.png
次にEclipseの設定を行うために起動する。

android37.png

android38.png
Eclipseの起動時にはワークスペースの選択画面が開く。今回は「c:\workspace」とした。これは好きなフォルダを指定して構わない。

また、Eclipseの起動時に毎回ワークスペースの選択が開くのは面倒なので、今回は「Use this as the default」にチェックをして、次回からワークスペースの選択画面が開かないようにした。

android39.png
これでEclipseが起動した。

android40.png
Eclipseの「Help」メニューにある「Install New Software」を選択する。

android41.png
そして「Work with」に「http://dl.google.com/eclipse/plugin/3.6」を入力して「Add」ボタンを押す。

android42.png
レポジトリの追加画面では、そのまま「OK」ボタンを押す。

android43.png
そして「Select All」で、全部選択して次へ進む。

android44.png

android45.png
「Google App Engine Java SDK」や「Google Plugin for Eclipse」、「Google Web Toolkit SDK」が見つかった。

android46.png
ライセンス使用承諾にチェックを入れて「Finish」ボタンを押す。

android47.png
これでインストールが開始される。

android48.png

android49.png
再起動を要求されたら「OK」を押す。これはWindowsではなく、Eclipseの再起動となる。

android50.png
Eclipseに対してのネット許可を問われたら「OK」する。






android51.png
さらにEclipseの設定を続ける。「Help」メニューの「Install New Software」を選択する。今度は「Work with」に「https://dl-ssl.google.com/android/eclipse/」と入力して「Add」する。

android52.png
そして「Select All」で全て選択して次へ進む。

android53.png
今回は「Android DDMS」、「Android Development Tools」、「Android Hierachy Viewer」が見つかった。

android54.png
ライセンスの承諾をして次へ進む。

android55.png
これでインストールされる。

android56.png

android57.png

android58.png







android59.png
次にAndroid SDKのパスをEclipseに設定する。「Window」メニューの「Preference」を選択する。

android60.png
このような画面が表示されることがある。「Proceed」を押して閉じたいところだが、フォーカスが合わず閉じれないことがあるが、気にしない。

android61.png
「Browse」ボタンを押してAndroid SDKのインストールフォルダを選択する。標準では「C:\Program Files\Android\android-sdk-windows」だ。

android62.png
忘れずに「Apply」ボタンを押す。

android63.png
これでEclipseからAndroid SDKが認識された。「OK」ボタンを押して閉じる。


アンドロイド開発環境の構築(その4) Androidエミュレータの実行

android64.png
次にAndroidのエミュレーターを設定/実行する。「Window」メニューの「Android SDK and AVD manager」を選択する。

android65.png
「New」ボタンをクリックする。

android66.png
そして「Name」を適当に入力、「Target」でAndroidバージョンを指定し、「SD Card」でSDカード容量を設定する。そのほか液晶画面の解像度やカメラやGPSなどのハードウエア設定も必要に応じて行う。ここではそのほかの項目はデフォルトのままにした。

android67.png
起動したいエミュレーターを選択して「Start」ボタンを押す。

android68.png
初回なのでやらなくてもいいのだが、ここでは「Wipe user data」にチェックを入れた。

android69.png
すると別ウインドウが開き、Androidエミュレーターが起動する。


android70.png
しばらくするとAndroidエミュレーターが使えるようになる。


2010年12月23日

Androidの雛形プロジェクトを作成&実行する

test100_00.png
前回はAndroid SDK&EclipseによるAndroidの開発環境構築から、Androidエミュレーターの起動までを行った。今回はEclipseを使って新しいAndroidプロジェクト(Javaプロジェクト)を作成、エミュレーター上で実行までを行う。

test100_01.png
Eclipseを起動したら、「File」メニューの「New」から「Project」を選択する。

test100_02.png
ウイザード種類は「Android」にある「Android Project」を選択する。

test100_03.png
Androidプロジェクトの設定画面が開いた。ここでの必須項目は「Project name」「Build Target」「Package name」「Create Activity」の4項目。

「Project name」と「Create Activity」は好きな名前に設定する。「Build Target」は対象Androidのバージョン。ここではAndroid 2.3とした。

「Package name」は世界中で唯一の値になるように設定する。とは言うものの、公開せずに個人で開発する分には唯一の値というのを意識しなくてもいい。ここでは適当に設定した。

test100_04.png
これで「Finish」ボタンを押し、プロジェクトを作成する。

test100_05.png
Androidプロジェクトができた。

test100_06.png
作成したAndroidプロジェクトを実行するために、Androidエミュレーターを起動する。「Window」メニューの「Android SDK and AVD Manager」を選択する。

test100_07.png
そして起動したいエミュレーター設定を選択して「Start」ボタンを押す。

test100_08.png
今回はユーザーデータを初期化するため「Wipe user data」にチェックを入れて起動した。

test100_09.png
しばらく待つとAndroidエミュレーターが起動した。

test100_10.png
次にウインドウ左側のPackage一覧から起動したいPackageを選び、右クリックして現れたメニューの「Run As」から「Android Application」を選択する。

test100_11.png
するとAndroidプロジェクトがビルド、転送されて、Androidエミュレーター上で実行される。







test100_12.png
作成されたAndroidプロジェクトのソースファイルを見てみる。

test100.javaファイルにはメインとなるソースコードが記入されている。onCreate()内でViewに「R.layout.main」が指定されている。

test100_13.png
「R.layout.main」というのは、「res」の「layout」にある「main.xml」で、これがXMLで指定された画面構成となる。

test100_14.png
XMLのソースを見ると、表示テキストは「@string/hello」と指定されている。これもリソースからの文字列指定となる。

test100_15.png
「res」の「values」にある「strings.xml」を見ると、「hello」というリソース名に「Hello World, Test100!」という文字列が割り当てられている。



このように、on~というアクションで実行、画面デザインはXML、表示文字列はリソース指定、という構成でできている。javaのことはまったく分からないので具体的な方法は未知だが、XMLデザインにボタンを追加、javaにonClick()を追加して、Windows DialogでいうところのGetDlgItem.SetText()的な処理をすれば表示文字列の変更などができそうな雰囲気だ。


アンドロイド開発環境の構築(その5) NDKのインストールと設定

ndk00.png
前回までにAndroid SDK&Eclipseの開発環境を利用して、JavaによるAndroidアプリ開発ができるようになった。今回はJavaに加えてC++でプログラミングできるように設定する。



まずhttp://www.cygwin.com/からCygwinをダウンロードする。

ndk01.png
ダウンロードしたCygwinのSetup.exeを実行する。

ndk02.png
Cygwinのインストーラーが起動した。

ndk03.png
インターネットからダウンロード/インストールするのでこのまま進む。

ndk04.png

ndk05.png

ndk06.png

ndk07.png
ダウンロード元は別にどこでも構わないのだが、ダウンロード速度が速いことを期待して「~.ac.jp」など日本のドメインを選ぶ。

ndk08.png

ndk09.png
警告メッセージが表示されるが気にしない。

ndk10.png
ダウンロードパッケージの選択画面が開いた。

ndk11.png
「Search」欄に「make」と入力して、「Devel」にある「make: The GNU version of the 'make' utility」の項目で「Skip」をクリックして「Skip」がバージョン表記(ここでは「3.81-2」)になるようにする。

ndk12.png
次に「Search」欄に「gcc4」と入力して、「Devel」にある「gcc4: GCC Release series 4 compiler (C & C++ install helper」の「Skip」をクリックして同じ様にバージョン表記になるようにする。このとき複数回クリックするとインストールバージョンを選べる。

ここまで設定が済んだら「次へ」ボタンを押す。

ndk13.png
自動的に依存関係が調べられ、必要となるほかのパッケージが自動選択される。

ndk14.png
そしてインターネットからダウンロード&インストールされる。

ndk15.png
これでCygwinのインストールが終わった。

ndk16.png
プログラム互換性アシスタントが開くことがあるが、気にせずに「このプログラムは正しくインストールされました」をクリックする。






ndk17.png
次にAndroid NDKをダウンロードする。ダウンロード元はhttp://developer .android. com/ sdk/ ndk/ index.html。今回ダウンロードしたのはandroid-ndk-r5-windows.zipになった。

ndk18.png
Android NDKのインストールは解凍するだけだ。ダウンロードしたファイルをダブルクリックして開く。

ndk19.png
Cドライブのルートに解凍した。

ndk20.png
フォルダ名からリリース番号を消し、「android-ndk」に変更した。






ndk21.png
次に一度Cygwinを起動する。

ndk22.png
初回起動時にはユーザー用のスクリプトファイルが自動生成される。確認したら「×」ボタンで閉じる。






ndk23.png
次にEclipseを起動する。そして「File」メニューの「Open File」を選択する。

ndk24.png
そして先ほどCygwinで自動生成させたスクリプトのうち「.bashrc」を開く。場所は「c:\cygwin\home\ユーザー名\」になる。

ndk25.png
.bashrcが開いたら、その末尾に

export ANDROID_NDK_ROOT=/cygdrive/c/android-ndk

export PATH=$PATH:$ANDROID_NDK_ROOT

の2行を追加すして保存する。

ndk26.png
次に「Help」メニューの「Install Software」を選択する。

ndk27.png
そして「Work with」のリストボックスから「Helios - http://download.eclipse.org/release/helios」を選択する。

ndk28.png
そして「Programming Language」の中から「C/C++ Development Tools」と「C/C++ Library API Documentation Hover Help」にチェックを入れて「次へ」ボタンを押す。

ndk29.png

ndk30.png
ライセンスに承諾する。

ndk31.png
これでインストールが開始される。

ndk32.png
Eclipseの再起動をする。

ndk33.png
次に「Window」メニューの「Preference」を選択する。

ndk34.png
そして「Run/Debug」の「Launching」「Default Launchers」にある「C/C++ Application」の「[Debug]」の「Standard Create Process Launcher」にチェックを入れる。

ndk35.png
次に「General」「Workspace」にある「Refresh automatically」にチェックを入れる。これを入れ忘れるとCのソースコード変更ごとに手動でRefresh作業が必要になるので忘れないようにする。



これでAndroid NDKのインストールからEclipseの設定までが終わった。次回はAndroid NDKのサンプルプロジェクトを使って実際にCによるAndroidアプリをビルド/実行する。


Android NDKのサンプルプロジェクトをビルド/実行する

ndktest01.png
前回までにAndroid SDK/NDK、Eclipse、Cygwinなどをインストールし、Java/C++用のAndroid開発環境を整えた。今回はAndroid NDKに含まれるJava/CのサンプルプロジェクトをビルドしてAndroidエミュレーターで実行する。

ndktest02.png
Eclipseを起動して、「File」メニューの「New」から「Android Project」を選択して、Androidプロジェクトを新たに作る。もしもこの項目がない場合は「File」メニューの「New」から「Project」を選択し、開いたウインドウで「Android Project」を選ぶ。

ndktest03.png
プロジェクトの設定画面が開いた。ここでプロジェクト名を適当に設定し、「Create project from existing source」を選択する。そして「Browse」ボタンからAndroid NDKのサンプルプロジェクトのフォルダを指定する。

ndktest04.png
今回は「hello-jni」というAndroid NDKのサンプルプロジェクトを指定した。

ndktest05.png
次にCygwinを使って、「hello-jni」プロジェクトをビルドする。

Cygwinのコンソールで

cd /cygdrive/c/android-ndk/samples/hello-jni

ndk-build

とすればビルドできる。

ndktest06.png
再びEclipseに戻り、ビルドしたプロジェクトをAndroidエミュレーターで実行する。プロジェクトを右クリックして現れたメニューの「Run As」にある「Android Application」を選択すればいい。

ndktest07.png
これでEclipse上でパッケージが作られ、Androidエミュレーターで実行された。






ndktest08.png
今回利用したサンプルプロジェクトのソースコード見る。HelloJni.java内で表示する文字列としてstringFromJNI()という、Cで書かれた関数の戻り値を指定している。

ndktest09.png
C側のソース「hello-jni.c」では、単純に文字列を返しているだけだ。



ソースコードの修正から実行までの流れは、Cygwin上で「ndk-build」を実行してビルド、そしてEclipse上で「Run As」-「Android Application」によりパッケージのビルド/転送/実行となる。


2010年12月24日

Android NDKの「hello-jni」のソースコードを見る

jni01.png
今回はAndroid NDKのサンプルプロジェクト「hello-jni」のプロジェクトファイルの中を覗いて見る。




プロジェクト内のフォルダ/ファイル構造は以下のようになっている。

\samples\hello-jni\
│ AndroidManifest.xml
│ default.properties
│ 
├―jni
│   Android.mk
│   hello-jni.c
│   
├―res
│ └―values
│     strings.xml
│     
├―src
│ └―com
│   └―example
│     └―hellojni
│         HelloJni.java
│         
└―tests  (省略:テストプロジェクト用フォルダ)






■AndroidManifest.xml

このファイルはC言語を利用しないJavaのみのプロジェクトのときと変わらないようだ。Eclipse上でAndroidプロジェクトを作成するときに指定する項目が保存されている。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.hellojni"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />
    <application android:label="@string/app_name"
                 android:debuggable="true">
        <activity android:name=".HelloJni"
                  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> 






■default.properties

このファイルはC言語を利用しないJavaのみのプロジェクトのときと変わらないようだ。Eclipse上でAndroidプロジェクトを作成するときに指定するターゲットAndroidバージョンが保存されている。

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
# 
# This file must be checked in Version Control Systems.
# 
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-8






■Android.mk

このファイルはC言語のソースファイルをビルドするためのmakeファイルになっている。

# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)






■hello-jni.c

このファイルはC言語のソースファイル本体だ。
Java_com_example_hellojni_HelloJni_stringFromJNI()という関数を1つ定義、その関数中で文字列を返すだけのソースコードとなっている。

/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#include <string.h>
#include <jni.h>

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
 */
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}






■strings.xml

このファイルはC言語を利用しないJavaのみのプロジェクトのときと変わらないようだ。Eclipse上でAndroidプロジェクトを作成するときに指定するアプリケーション名が保存されている。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">HelloJni</string>
</resources>






■HelloJni.java

このファイルはJavaのソースファイル本体だ。
「System.loadLibrary("hello-jni");」によりC言語側のライブラリを取り込み、
「public native String stringFromJNI();」によりC言語側の関数をJavaで利用できるように定義、
「tv.setText( stringFromJNI() );」で実際にC言語側の関数を呼び出している。

/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.example.hellojni;

import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;


public class HelloJni extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        /* Create a TextView and set its content.
         * the text is retrieved by calling a native
         * function.
         */
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }

    /* A native method that is implemented by the
     * 'hello-jni' native library, which is packaged
     * with this application.
     */
    public native String  stringFromJNI();

    /* This is another native method declaration that is *not*
     * implemented by 'hello-jni'. This is simply to show that
     * you can declare as many native methods in your Java code
     * as you want, their implementation is searched in the
     * currently loaded native libraries only the first time
     * you call them.
     *
     * Trying to call this function will result in a
     * java.lang.UnsatisfiedLinkError exception !
     */
    public native String  unimplementedStringFromJNI();

    /* this is used to load the 'hello-jni' library on application
     * startup. The library has already been unpacked into
     * /data/data/com.example.HelloJni/lib/libhello-jni.so at
     * installation time by the package manager.
     */
    static {
        System.loadLibrary("hello-jni");
    }
}

Android JNIプロジェクトをゼロから作る

test102_01.png
前回はAndroid NDKに含まれるJNIサンプルプロジェクト「Hello-jni」をビルド実行した。今回はAndroid JNIプロジェクトの構造を知るために、「Hello-jni」とまったく同じプロジェクトをゼロから作成してみる。

test102_02.png
Eclipseを起動したら、「File」メニューから「Android Project」を作成する。

test102_03.png
今回はプロジェクト名を「Test102Prj」、ターゲットを「Android 2.3」、パッケージ名を「com.test102」、アクティビティ名を「Test102Act」とし、プロジェクト名、パッケージ名、アクティビティ名を区別できるようにした。

test102_04.png
次にC言語ソースファイルを保存するフォルダをプロジェクト内に作成する。プロジェクトを右クリックして現れるメニューの「New」にある「Folder」を選択する。

test102_05.png
フォルダ名は「jni」とする。

test102_06.png
次にjniフォルダの中にmakefileを作成する。「jni」フォルダを右クリックして現れるメニューの「New」にある「File」を選択する。

test102_07.png
ファイル名は「Android.mk」とする。これは常に固定のファイル名で、大文字小文字を区別するので要注意だ。

test102_08.png 「Android.mk」ファイルの中身を実装する。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test102jni
LOCAL_SRC_FILES := test102jni.c

include $(BUILD_SHARED_LIBRARY)

test102_09.png
次にjniフォルダの中にC言語のソースファイルを作成する。「jni」フォルダを右クリックして現れるメニューの「New」にある「File」を選択する。

test102_10.png
ファイル名は「test102jni.c」とする。

test102_11.png 「test102jni.c」ファイルの中身を実装する。
Javaへエクスポートする関数名は「Java_com_test102_Test102Act_stringFromJNI」のように、「Java_プロジェクト名_アクティビティ名_関数名」と設定する。
#include <string.h>
#include <jni.h>

jstring
Java_com_test102_Test102Act_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Test102text");
}

test102_12.png 次にJavaソースファイルの「Test102Act.java」を開き、編集する。赤枠の8行を追加した。

package com.test102;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Test102Act extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }

    public native String  stringFromJNI();

    static {
        System.loadLibrary("test102jni");
    }
}

test102_13.png
最後に「Save All」で全ファイルを保存する。

test102_14.png そしてCygwinを開き、作成したJNIソースファイルをビルドする。
cd /cygdrive/c/workspace/Test102Prj
ndk-build

test102_15.png
Cygwinでビルドできたら、Androidパッケージのビルド/実行をする。プロジェクトを右クリックして現れたメニューの「Run As」にある「Android Application」を選択する。

test102_16.png
これでAndroidエミュレーター上で実行を確認できた。


2010年12月26日

Androidエミュレーターの仮想SDカードを使う

sd01.png
今回はAndroidアプリ上でSDカードにデータファイルを保存する前段階として、Androidエミュレーターで仮想SDカード上に保存したmp3ファイルを再生してみる。

まず仮想SDカードのイメージファイルを作るためにコマンドラインを開く。「スタート」メニューから「cmd」と入力して検索、コマンドラインを開く。

sd02.png コマンドラインが開いたら、Android SDKに含まれるmksdcard.exeを、「mksdcard 容量 作成イメージファイル名」というように実行する。ここでは64MBの仮想SDカードを作成した。
"C:\Program Files\Android\android-sdk-windows\tools\mksdcard.exe" 64M c:\workspace\sd.img

sd03.png
次に作成した仮想SDカードのイメージファイルをAndroidエミュレーターに関連付ける。Eclispeを起動して、「Window」メニューの「Android SDK and AVD Manager」を開く。

sd04.png
古いエミュレーター設定が残っていると紛らわしくなるので、今回は既存の設定を削除した。削除するAndroidエミュレーターを選択して「Delete」ボタンを押す。

sd05.png
「Yes」ボタンで削除する。

sd06.png
そして「New」ボタンから新しいエミュレーター設定をする。「Name」と「Target」は適当に設定、「SD Card」欄で先ほど作成した仮想SDカードのイメージファイルを指定する。

sd07.png
新しいエミュレーター設定ができた。さっそく「Start」ボタンで起動する。

sd08.png

sd09.png
しばらく待つとAndroidエミュレーターが起動した。

sd10.png Androidエミュレーターが起動したら、再びコマンドラインを開き、今度は仮想SDカードへmp3ファイルをコピーする。コピーにはAndroid SDKに含まれる「adb.exe」を利用する。「adb push ファイル名 /sdcard/」とすればコピーできる。
"C:\Program Files\Android\android-sdk-windows\platform-tools\adb.exe" push C:\Users\assist\Desktop\test.mp3 /sdcard/




sd11.png
次に仮想SDカードへmp3ファイルがコピーされたことを確認する。Eclipseを開き、「Window」メニューの「Open Perspectiv」にある「DDMS」を選択する。

sd12.png
そして「File Explorer」タブでAndroidエミュレーター上のファイルを一覧できる。/mnt/sdcard/の中を見ると、コピーしたmp3ファイルが確認できた。

sd21.png
ちなみにこの画面のアイコンから、マウス操作だけで簡単に仮想SDカードへファイルのコピーや削除ができる、、、が、どうもバグがあるようで、「Failed to push the item(s).」というエラーメッセージでファイル転送に失敗することがある。そのため上の方法でコマンドラインから転送した方がいいだろう。






sd13.png
最後に転送したmp3ファイルをAndroidエミュレーター上で再生してみる。ホーム画面でアプリケーションボタン?を押す。

sd14.png
最初はSDカードのmp3ファイルを認識させる必要があるた。「Dev Tools」を開く。

sd15.png
そして「Media Scanner」を実行する。

sd16.png
「Medea Scanner finished scanning /mnt/sdcard」と表示され、仮想SDカード内のファイルが認識された。

sd17.png
一度ホーム画面に戻り、再びアプリケーションボタン?を押す。

sd18.png
そして再生ソフトの「Music」を開く。

sd19.png
これでmp3ファイルのアーティストが表示され、、、

sd20.png
Androidエミュレーター上でTylor SwiftのMineを再生できた。


1  2  3





usefullcode@gmail.com

About 2010年12月

2010年12月にブログ「UsefullCode.net」に投稿されたすべてのエントリーです。

前の記事は2010年05月です。

次の記事は2011年01月です。

他にも多くのエントリーがあります。メインページ記事一覧も見てください。