ラベル NDK の投稿を表示しています。 すべての投稿を表示
ラベル NDK の投稿を表示しています。 すべての投稿を表示

2010年12月9日木曜日



f:id:bs-android:20101208234559p:image


Android NDK r5の docs/NATIVE-ACTIVITY.HTMLを訳して、まとめてみました。Native Activityの実装方法は2通りあり、その方法はやや難解ですが、ヘルパーライブラリを利用すれば幾分楽に実装ができそうです。


I.概要


Android SDKが提供するヘルパークラスーNativeActivityにより、完全なネイティブアプリケーションを記述することが可能となりました。NativeActivityはAndroidフレームワークとネイティブコードの間のコミュニケーションを処理するので、それらのサブクラスやメソッドをコールする必要はありません。必要なことはAndroidManifest.xmlファイルにネイティブなアプリケーションを宣言し、そのネイティブアプリケーションを作成することです。


ネイティブアクティビティの概念が導入されても、下記の事実に何ら変更はありません。




  • Androidアプリケーションが仮想マシン上で動作すること

  • サンドボックス機構により他のアプリケーションから守られていること


このため、JNIを通じてAndroidフレームワークのAPIにアクセスすることは、これまでと同様に行えます。一方で、センサ・入力イベント、そしてアセットのようなものにアクセスするネイティブなインタフェースも利用可能です。何がサポートされているかに関する詳しい情報は、<ndk_root>/docs/STABLE-APIS.HTMLを参照して下さい。


ネイティブアクティビティを開発するなら今まで通り、Eclipseを用いて、あるいは、"android create project"コマンドによってプロジェクトを生成するべきでしょう。通常のAndroidビルドツールでネイティブアプリケーションのビルドやパッケージを行うと、ビルドシステムは正確な構造を持つAndroidプロジェクトだけをビルドすることができます。androidツールやEclipseを利用することで、それらを確実に行うことができます。


Android NDKはネイティブアクティビティを実装する方法として、2種類の方法を用意しています:




  • native_activity.hを直接利用する方法

  • ヘルパーライブラリを利用する方法


native_activity.hを直接利用する方法

native_activity.h ヘッダはNativeActivityクラスのネイティブバージョンを定義しており、ネイティブアクティビティを生成するのに必要なコールバックインタフェースとデータ構造を有しています。アプリケーションのメインスレッドがコールバックを制御するため、コールバックの実装はブロックされないようにする必要があります。もしこれらがブロックされた場合は、コールバックから戻るまでメインスレッドの応答がなくなるので、ANR(Application Not Responding)エラーを受け取ることになるでしょう。詳細は、<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.h のコメントを参照下さい。


ヘルパーライブラリを利用する方法

android_native_app_glue.h ファイルは、native_activity.h インタフェース上で構築された静的なヘルパーライブラリを定義しています。コールバックや入力イベントのようなものを処理するために別スレッドを生成します。そのため、種々のコールバックによってメインスレッドがブロックされることを防ぐと共に、コールバックの実装に若干の柔軟性を加えることができるため、このプログラミングモデルは実装が若干簡単に感じられるかもしれません。


<ndk_root>/sources/android/native_app_glue/android_native_app_glue.c のソースも公開されているため、必要であれば実装を修正することも可能です。詳細は、<ndk_root>/sources/android/native_app_glue/android_native_app_glue.h のコメントを参照下さい。


II.native-activity.h インタフェースを使う


完全なネイティブアクティビティを実装するために、native-activity.h インタフェースを利用することができます。このインタフェースを利用すると、メインのUIスレッドがブロックされないようにコールバックを実装することを確実に行わなければなりません。詳細は、<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.hを参照下さい。


メインUIスレッドとは別のスレッドでイベントループ中のコールバックを制御できる native_app_glue 静的ヘルパーライブラリを利用する方が容易かもしれません。この静的ライブラリの使用方法は、native-activity サンプルアプリケーションを参照下さい。


native-activity.h インタフェースを用いてネイティブアクティビティを実装する方法:




  • 1/ "android create project"コマンドかEclipseからプロジェクトを作成します。プロジェクトのルートディレクトリ中に、jni/ディレクトリを作成します。このディレクトリに全てのネイティブコードを格納します。

  • 2/ AndroidManifest.xml ファイルにネイティブアクティビティを宣言します。記述例は下記の通り:



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.native_activity"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<application android:label="@string/app_name" android:hasCode="false">

<activity android:name="android.app.NativeActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">

<meta-data android:name="android.app.lib_name"
android:value="native-activity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>






    • 注意すべき主な点:


      • activityタグの android:name 属性は必ず android.app.NativeActivityに設定します。NativeActivityのサブクラスにすることも可能ですが、そのようにするのであれば、代わりにそのサブクラスの名前を指定します。

      • meta-detaタグの android:name 属性は必ず android.app.lib_name の形式にします。lib_name はlibプリフィックスと.soサフィックスを除いたモジュール名です。




  • 3/ ネイティブアクティビティのためのファイルを生成し、ANativeActivity_onCreate() 関数を実装します。この関数はネイティブアクティビティが開始された際に呼び出されます。この関数はANativeActivity構造体のポインタを受けとり、種々のコールバック実装の関数のポインタを含むように記述する必要があります。ANativeActivity->callbacks に、適切にコールバック関数のポインタをセットします。

  • 4/ ANativeActivity->instance フィールドに、利用したい特定データのインスタンスのアドレスを設定します。

  • 5/ 開始時に実行したいその他の処理を実装します。

  • 6/ ANativeActivity->callbacks に設定したコールバックの残りを実装します。呼ばれるコールバックに関する情報は、SDKドキュメントのアクティビティライフサイクルを参照して下さい。コールバックの実装はブロックされてはならないことを覚えておきましょう。さもなくば、コールバックが戻るまでメインのUIスレッドが待たされることにより、ANRエラーが発生することになるでしょう。

  • 7/ アプリケーションの残りの部分を開発します。

  • 8/ ビルドシステムにネイティブモジュールを宣言するため、プロジェクトのjni/ディレクトリ中にAndroid.mk ファイルを生成します。Android.mkファイルは、本質的にはGNU makeファイルの断片です。例:



LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_native_module
LOCAL_SRC_FILES := my_native_code.c
include $(BUILD_SHARED_LIBRARY)






    • Android.mk ファイルの生成と変数の意味に関する情報は、<ndk_root>/docs/ANDROID-MK.TXT ファイルを参照して下さい。


  • 9/ Android.mk ファイルを一度生成したら、"ndk-build"コマンドを使用してネイティブコードをコンパイルします。



cd path/to/project
<ndk_root>/ndk-build




  • 10/ AntかEclipseを使用して、通常どおりAndroidのプロジェクトをビルドし、インストールします。jni/ディレクトリが存在するなら、ビルドでは自動的にネイティブコードが.apkファイルの中にパッケージされます。



文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)





Native Activityの実装方法(Native Activities and Applications和訳)



f:id:bs-android:20101208234559p:image


Android NDK r5の docs/NATIVE-ACTIVITY.HTMLを訳して、まとめてみました。Native Activityの実装方法は2通りあり、その方法はやや難解ですが、ヘルパーライブラリを利用すれば幾分楽に実装ができそうです。


I.概要


Android SDKが提供するヘルパークラスーNativeActivityにより、完全なネイティブアプリケーションを記述することが可能となりました。NativeActivityはAndroidフレームワークとネイティブコードの間のコミュニケーションを処理するので、それらのサブクラスやメソッドをコールする必要はありません。必要なことはAndroidManifest.xmlファイルにネイティブなアプリケーションを宣言し、そのネイティブアプリケーションを作成することです。


ネイティブアクティビティの概念が導入されても、下記の事実に何ら変更はありません。




  • Androidアプリケーションが仮想マシン上で動作すること

  • サンドボックス機構により他のアプリケーションから守られていること


このため、JNIを通じてAndroidフレームワークのAPIにアクセスすることは、これまでと同様に行えます。一方で、センサ・入力イベント、そしてアセットのようなものにアクセスするネイティブなインタフェースも利用可能です。何がサポートされているかに関する詳しい情報は、<ndk_root>/docs/STABLE-APIS.HTMLを参照して下さい。


ネイティブアクティビティを開発するなら今まで通り、Eclipseを用いて、あるいは、"android create project"コマンドによってプロジェクトを生成するべきでしょう。通常のAndroidビルドツールでネイティブアプリケーションのビルドやパッケージを行うと、ビルドシステムは正確な構造を持つAndroidプロジェクトだけをビルドすることができます。androidツールやEclipseを利用することで、それらを確実に行うことができます。


Android NDKはネイティブアクティビティを実装する方法として、2種類の方法を用意しています:




  • native_activity.hを直接利用する方法

  • ヘルパーライブラリを利用する方法


native_activity.hを直接利用する方法

native_activity.h ヘッダはNativeActivityクラスのネイティブバージョンを定義しており、ネイティブアクティビティを生成するのに必要なコールバックインタフェースとデータ構造を有しています。アプリケーションのメインスレッドがコールバックを制御するため、コールバックの実装はブロックされないようにする必要があります。もしこれらがブロックされた場合は、コールバックから戻るまでメインスレッドの応答がなくなるので、ANR(Application Not Responding)エラーを受け取ることになるでしょう。詳細は、<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.h のコメントを参照下さい。


ヘルパーライブラリを利用する方法

android_native_app_glue.h ファイルは、native_activity.h インタフェース上で構築された静的なヘルパーライブラリを定義しています。コールバックや入力イベントのようなものを処理するために別スレッドを生成します。そのため、種々のコールバックによってメインスレッドがブロックされることを防ぐと共に、コールバックの実装に若干の柔軟性を加えることができるため、このプログラミングモデルは実装が若干簡単に感じられるかもしれません。


<ndk_root>/sources/android/native_app_glue/android_native_app_glue.c のソースも公開されているため、必要であれば実装を修正することも可能です。詳細は、<ndk_root>/sources/android/native_app_glue/android_native_app_glue.h のコメントを参照下さい。


II.native-activity.h インタフェースを使う


完全なネイティブアクティビティを実装するために、native-activity.h インタフェースを利用することができます。このインタフェースを利用すると、メインのUIスレッドがブロックされないようにコールバックを実装することを確実に行わなければなりません。詳細は、<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.hを参照下さい。


メインUIスレッドとは別のスレッドでイベントループ中のコールバックを制御できる native_app_glue 静的ヘルパーライブラリを利用する方が容易かもしれません。この静的ライブラリの使用方法は、native-activity サンプルアプリケーションを参照下さい。


native-activity.h インタフェースを用いてネイティブアクティビティを実装する方法:




  • 1/ "android create project"コマンドかEclipseからプロジェクトを作成します。プロジェクトのルートディレクトリ中に、jni/ディレクトリを作成します。このディレクトリに全てのネイティブコードを格納します。

  • 2/ AndroidManifest.xml ファイルにネイティブアクティビティを宣言します。記述例は下記の通り:



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.native_activity"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<application android:label="@string/app_name" android:hasCode="false">

<activity android:name="android.app.NativeActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">

<meta-data android:name="android.app.lib_name"
android:value="native-activity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>






    • 注意すべき主な点:


      • activityタグの android:name 属性は必ず android.app.NativeActivityに設定します。NativeActivityのサブクラスにすることも可能ですが、そのようにするのであれば、代わりにそのサブクラスの名前を指定します。

      • meta-detaタグの android:name 属性は必ず android.app.lib_name の形式にします。lib_name はlibプリフィックスと.soサフィックスを除いたモジュール名です。




  • 3/ ネイティブアクティビティのためのファイルを生成し、ANativeActivity_onCreate() 関数を実装します。この関数はネイティブアクティビティが開始された際に呼び出されます。この関数はANativeActivity構造体のポインタを受けとり、種々のコールバック実装の関数のポインタを含むように記述する必要があります。ANativeActivity->callbacks に、適切にコールバック関数のポインタをセットします。

  • 4/ ANativeActivity->instance フィールドに、利用したい特定データのインスタンスのアドレスを設定します。

  • 5/ 開始時に実行したいその他の処理を実装します。

  • 6/ ANativeActivity->callbacks に設定したコールバックの残りを実装します。呼ばれるコールバックに関する情報は、SDKドキュメントのアクティビティライフサイクルを参照して下さい。コールバックの実装はブロックされてはならないことを覚えておきましょう。さもなくば、コールバックが戻るまでメインのUIスレッドが待たされることにより、ANRエラーが発生することになるでしょう。

  • 7/ アプリケーションの残りの部分を開発します。

  • 8/ ビルドシステムにネイティブモジュールを宣言するため、プロジェクトのjni/ディレクトリ中にAndroid.mk ファイルを生成します。Android.mkファイルは、本質的にはGNU makeファイルの断片です。例:



LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_native_module
LOCAL_SRC_FILES := my_native_code.c
include $(BUILD_SHARED_LIBRARY)






    • Android.mk ファイルの生成と変数の意味に関する情報は、<ndk_root>/docs/ANDROID-MK.TXT ファイルを参照して下さい。


  • 9/ Android.mk ファイルを一度生成したら、"ndk-build"コマンドを使用してネイティブコードをコンパイルします。



cd path/to/project
<ndk_root>/ndk-build




  • 10/ AntかEclipseを使用して、通常どおりAndroidのプロジェクトをビルドし、インストールします。jni/ディレクトリが存在するなら、ビルドでは自動的にネイティブコードが.apkファイルの中にパッケージされます。



文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)





2010年12月8日水曜日



f:id:bs-android:20101207022545p:image


Android 2.3(Gingerbread) SDKの提供に伴い、Android NDK Revision 5がリリースされました。Rev5では特にゲームのような、よりネイティブコードを使用するアプリ為のサポートが強化されています。


大きな変更点としては、下記のようなものが挙げられます。




  • イベント/オーディオ/グラフィック/ウィンドウマネジメント/アセット/ストレージに対して、直接ネイティブにアクセス可能になったこと

  • ネイティブコード内にAndroidアプリケーションのライフサイクルの概念を導入したこと(NativeActivityクラスの導入)


主なAndroid NDK Rev5の変更点




  • ネイティブコード内でAndroidアプリケーションライフサイクルの実装をサポート

  • 下記をネイティブでサポート


    • 入力サブシステム(キーボード、タッチスクリーン)

    • センサデータへのアクセス(加速計、コンパス、ジャイロなど)

    • 入力やセンサイベントを待ち受けるためのイベントループAPI

    • ウィンドウ及びサーフェイスサブシステム

    • エフェクトの制御を含む、再生及び録音をサポートするOpenSL ES標準のオーディオAPI

    • .apkファイル中にパッケージされたアセットへのアクセス手段



  • 新しいツールチェイン(GCC4.4.3ベース):よりよいコードを生成できる、./configureとmakeでビルドしたい人向けのスタンドアロンのクロスコンパイラ。詳細は docs/STANDALONE-TOOLCHAIN.htmlを参照。GCC4.4.0のバイナリは依然として提供されるが、4.2.1のバイナリは除外された。

  • プリビルドされたスタティック&共有ライブラリのサポートの追加(docs/PREBUILTS.html)

  • サードパーティーモジュールをより簡単に作成&再利用するための、モジュールのインポート・エクスポートのサポート(docs/IMPORT-MODULE.htmlに理由を説明)

  • ヘルパーモジュールとして、STLportベースのデフォルトC++ STL実装の提供。スタティックまたは共有ライブラリとして使用可能(詳細と使用例は sources/android/stlport/README を参照)。STLportのプリビルドバイナリ(スタティックまたは共有)とGNU libstdc++(スタティックのみ)も併せて提供されます。C++例外とRTTIはデフォルトSTL実装では提供されません。さらなる情報は、docs/CPLUSPLUS-SUPPORT.HTMLをご覧下さい。

  • cpufeaturesヘルパーライブラリの改良:CPUタイプのレポートの改良(いくつかのデバイスで実際にはARMv6にもかかわらず、ARMv7のCPUとして報告されている)。マーケットにアップロードする際にはこのライブラリを使用してリビルドすることを推奨。

  • OpenGLのテクスチャー及びサービスを生成・管理するためのEGLライブラリの追加

  • ネイティブアクティビティの記述方法を示した新しいサンプルアプリケーション: native-plasmaとnative-activity

  • 多くのバグフィックスと他の少しの改良。詳細は docs/CHANGES.htmlを参照。



文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)





Android NDK rev5 (Gingerbread) の変更点まとめ



f:id:bs-android:20101207022545p:image


Android 2.3(Gingerbread) SDKの提供に伴い、Android NDK Revision 5がリリースされました。Rev5では特にゲームのような、よりネイティブコードを使用するアプリ為のサポートが強化されています。


大きな変更点としては、下記のようなものが挙げられます。




  • イベント/オーディオ/グラフィック/ウィンドウマネジメント/アセット/ストレージに対して、直接ネイティブにアクセス可能になったこと

  • ネイティブコード内にAndroidアプリケーションのライフサイクルの概念を導入したこと(NativeActivityクラスの導入)


主なAndroid NDK Rev5の変更点




  • ネイティブコード内でAndroidアプリケーションライフサイクルの実装をサポート

  • 下記をネイティブでサポート


    • 入力サブシステム(キーボード、タッチスクリーン)

    • センサデータへのアクセス(加速計、コンパス、ジャイロなど)

    • 入力やセンサイベントを待ち受けるためのイベントループAPI

    • ウィンドウ及びサーフェイスサブシステム

    • エフェクトの制御を含む、再生及び録音をサポートするOpenSL ES標準のオーディオAPI

    • .apkファイル中にパッケージされたアセットへのアクセス手段



  • 新しいツールチェイン(GCC4.4.3ベース):よりよいコードを生成できる、./configureとmakeでビルドしたい人向けのスタンドアロンのクロスコンパイラ。詳細は docs/STANDALONE-TOOLCHAIN.htmlを参照。GCC4.4.0のバイナリは依然として提供されるが、4.2.1のバイナリは除外された。

  • プリビルドされたスタティック&共有ライブラリのサポートの追加(docs/PREBUILTS.html)

  • サードパーティーモジュールをより簡単に作成&再利用するための、モジュールのインポート・エクスポートのサポート(docs/IMPORT-MODULE.htmlに理由を説明)

  • ヘルパーモジュールとして、STLportベースのデフォルトC++ STL実装の提供。スタティックまたは共有ライブラリとして使用可能(詳細と使用例は sources/android/stlport/README を参照)。STLportのプリビルドバイナリ(スタティックまたは共有)とGNU libstdc++(スタティックのみ)も併せて提供されます。C++例外とRTTIはデフォルトSTL実装では提供されません。さらなる情報は、docs/CPLUSPLUS-SUPPORT.HTMLをご覧下さい。

  • cpufeaturesヘルパーライブラリの改良:CPUタイプのレポートの改良(いくつかのデバイスで実際にはARMv6にもかかわらず、ARMv7のCPUとして報告されている)。マーケットにアップロードする際にはこのライブラリを使用してリビルドすることを推奨。

  • OpenGLのテクスチャー及びサービスを生成・管理するためのEGLライブラリの追加

  • ネイティブアクティビティの記述方法を示した新しいサンプルアプリケーション: native-plasmaとnative-activity

  • 多くのバグフィックスと他の少しの改良。詳細は docs/CHANGES.htmlを参照。



文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)





2009年7月8日水曜日



f:id:bs-android:20090707164602p:image


先日発表されたAndroidのNDK(Native Development Kit)のお陰でapkファイルにライブラリを同梱するためにソースコードをすべてダウンロードする必要がなくなった上に、Windowsだけでも作業できるようになり、開発がかなり楽になりました。


今回はNDKに付属しているhello-jniという単純なサンプルプロジェクトをWindows上でビルド、実行するまでの手順をまとめてみました。











準備


cygwinのダウンロード、インストール



  • ここからhttp://www.cygwin.com/cygwin-icon.gifのアイコンをクリックしてsetup.exeをダウンロードします。

  • setup.exeを実行すると以下のような画面になるので、「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131141g:image













  • さらに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131332g:image













  • cygwinのrootディレクトリを変更する必要がなければ、何も変更せずに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131437g:image













  • cygwinパッケージのディレクトリを変更する必要がなければ、何も変更せずに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131556g:image













  • インターネット接続にProxyを設定していなければ「Direct Connection」、IEと同じ設定を使用する場合は「Use IE5 Settings」、Proxyを手動で設定する場合は「Use HTTP/FTP Proxy」を設定し、「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131634g:image













  • ダウンロード先を選んで「次へ(N)」を押して先に進みます。日本のドメインを選んだ方がスピードは速いです。また、ftpだと繋がらないことが多いので、httpのものを選んだほうが良いようです。


f:id:bs-android:20090707131848g:image













  • 以下のような画面がでるので、しばらく待ちます。


f:id:bs-android:20090707132444g:image













  • インストールするパッケージを選択する画面になります。


f:id:bs-android:20090707132531g:image













  • スクロールさせて、「Devel」の「+」ボタンを押してDevelのカテゴリのリストを展開します。


f:id:bs-android:20090707133945g:image













  • さらにスクロールし、gccのパッケージを選択(※赤丸のしるしの部分をクリック)します。自動的にgcc-coreなどにもチェックが入りますが、そのままにしておきます。


f:id:bs-android:20090707134133g:image













  • さらに下にスクロールし、makeのパッケージを選択(※赤丸のしるしの部分をクリック)します。同じく自動的に他のパッケージにもチェックが入りますが、そのままにしておきます。そして「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707135430g:image













  • すると以下のような画面になるので、完了するまで待ちます。


f:id:bs-android:20090707135634g:image













  • この画面が出れば完了です。「完了」を押して終了します。


f:id:bs-android:20090707135721g:image











Windows環境変数の設定

デスクトップ上にできるhttp://www.cygwin.com/cygwin-icon.gifのアイコンから起動させると、WindowsのユーザーアカウントのディレクトリがHOMEディレクトリになり、Windows XPの場合はパスにスペースが含まれるため、後の作業がうまくいきません。


その為、環境変数「HOME」を設定して、あらかじめ任意のHOMEディレクトリを指定しておきます。





環境変数の設定方法




  • マイコンピュータのプロパティを開く


f:id:bs-android:20090707140338g:image













  • システムのプロパティ画面が出るので、「詳細設定」タブを選択します。


f:id:bs-android:20090707141333g:image













  • 詳細設定の画面で「環境変数」ボタンを押します。


f:id:bs-android:20090707141430g:image













  • 環境変数のユーザー環境変数の「新規」ボタンを押します。


f:id:bs-android:20090707141456g:image













  • 変数名に「HOME」、変数値に「/home/ユーザー名」(※ユーザー名部分は任意)を入力し、OKで抜けます。


f:id:bs-android:20090707141558g:image





これでWindows側の環境変数の設定は完了です。


デスクトップ上にできているhttp://www.cygwin.com/cygwin-icon.gifのアイコンから起動させると、



c:\cygwin\home\ユーザー名


ディレクトリが自動的に生成され、ここがHOMEディレクトリになります。











NDK1.5のダウンロード、インストール



  • ここからNDK1.5のandroid-ndk-1.5_r1-windows.zipをダウンロードします。





ダウンロードが終わったら、android-ndk-1.5_r1-windows.zipを先程自動生成された



c:\cygwin\home\ユーザー名


のディレクトリに展開します。





展開後に



c:\cygwin\home\ユーザー名\android-ndk-1.5_r1-windows


のようになるようにしてください。



c:\cygwin\home\ユーザー名\


に.bashrcファイルが自動生成されている筈なので、そのファイルの最後尾に



export ANDROID_NDK_ROOT=C:/cygwin/home/ユーザー名/android-ndk-1.5_r1-windows


を追加して保存します。


そして、再度、cygwinのシェルを起動させます。


cygwinシェル上で、



$ cd andoird-ndk-1.5_r1


としてNDKのディレクトリに移動し、



$ sh build/host-setup.sh


と入力します。


成功するとこのように出力されます。



$ sh build/host-setup.sh
Detecting host toolchain.

CC : compiler check ok (gcc)
LD : linker check ok (gcc)
CXX : C++ compiler check ok (g++)
Generate : out/host/config.mk
Toolchain : Checking for arm-eabi-4.2.1 prebuilt binaries

Host setup complete. Please read docs/OVERVIEW.TXT if you don't know what to do.





これでNDKのインストールは完了です。











hello-jniライブラリのビルド


NDKのappsディレクトリにhello-jniのサンプルアプリがあります。今回はこれをビルドしてみます。


cygwinシェルのandoird-ndk-1.5_r1ディレクトリで以下のようにコマンドを実行します。



$ make APP=hello-jni





成功すると以下のように出力されます。



$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'
Compile thumb : hello-jni <= sources/samples/hello-jni/hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => apps/hello-jni/project/libs/armeabi





この段階ではライブラリファイルの生成しか行われず、apkファイルは作成されません。


apkファイルを作成する為に、今回はEclipseでhello-jniプロジェクトを取り込みます。





Eclipseにhello-jniプロジェクトを取り込む




  • Eclipseが起動している状態で、Ctrl+Nキーを押下して新規プロジェクト作成画面を開き、「Android Project」を選択して「Next」ボタンを押します。


f:id:bs-android:20090707160908g:image













  • 「Create project from existiong source」を選びます。


f:id:bs-android:20090707161300g:image













  • 「Browse」ボタンを押します。


f:id:bs-android:20090707161645g:image













  • NDKを解凍したディレクトリの下の「apps/hello-jni/project」を選択して「OK」ボタンを押します。


f:id:bs-android:20090707161722g:image













  • ソースコードがインポートされ、以下のような画面になるので、「Finish」ボタンを押します。


f:id:bs-android:20090707161836g:image













  • HelloJniプロジェクトが取り込まれたところ。libsの下にlibhello-jni.soファイルが含まれています。


f:id:bs-android:20090707161943g:image











ここからはいつも通り、普通のAndroidプロジェクトとして実行可能です。





もしライブラリ側のソースコード(~/android-ndk-1.5_r1/sources/samples/hello-jni/hello-jni.c)を更新した場合は、cygwinシェルから



$ make APP=hello-jni


を再度実行してライブラリファイルを更新した後、Eclipseの「Project Explorer」のHelloJniプロジェクトのルートを選択してF5キーを押下すると、ライブラリファイルが更新されたことが検知され、再コンパイルが走ります。


この手順を忘れると、apkファイルが再生成されないので注意が必要です。





Good luck!






AndroidのNDK 1.5でHelloJNIを動かす手順



f:id:bs-android:20090707164602p:image


先日発表されたAndroidのNDK(Native Development Kit)のお陰でapkファイルにライブラリを同梱するためにソースコードをすべてダウンロードする必要がなくなった上に、Windowsだけでも作業できるようになり、開発がかなり楽になりました。


今回はNDKに付属しているhello-jniという単純なサンプルプロジェクトをWindows上でビルド、実行するまでの手順をまとめてみました。











準備


cygwinのダウンロード、インストール



  • ここからhttp://www.cygwin.com/cygwin-icon.gifのアイコンをクリックしてsetup.exeをダウンロードします。

  • setup.exeを実行すると以下のような画面になるので、「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131141g:image













  • さらに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131332g:image













  • cygwinのrootディレクトリを変更する必要がなければ、何も変更せずに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131437g:image













  • cygwinパッケージのディレクトリを変更する必要がなければ、何も変更せずに「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131556g:image













  • インターネット接続にProxyを設定していなければ「Direct Connection」、IEと同じ設定を使用する場合は「Use IE5 Settings」、Proxyを手動で設定する場合は「Use HTTP/FTP Proxy」を設定し、「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707131634g:image













  • ダウンロード先を選んで「次へ(N)」を押して先に進みます。日本のドメインを選んだ方がスピードは速いです。また、ftpだと繋がらないことが多いので、httpのものを選んだほうが良いようです。


f:id:bs-android:20090707131848g:image













  • 以下のような画面がでるので、しばらく待ちます。


f:id:bs-android:20090707132444g:image













  • インストールするパッケージを選択する画面になります。


f:id:bs-android:20090707132531g:image













  • スクロールさせて、「Devel」の「+」ボタンを押してDevelのカテゴリのリストを展開します。


f:id:bs-android:20090707133945g:image













  • さらにスクロールし、gccのパッケージを選択(※赤丸のしるしの部分をクリック)します。自動的にgcc-coreなどにもチェックが入りますが、そのままにしておきます。


f:id:bs-android:20090707134133g:image













  • さらに下にスクロールし、makeのパッケージを選択(※赤丸のしるしの部分をクリック)します。同じく自動的に他のパッケージにもチェックが入りますが、そのままにしておきます。そして「次へ(N)」を押して先に進みます。


f:id:bs-android:20090707135430g:image













  • すると以下のような画面になるので、完了するまで待ちます。


f:id:bs-android:20090707135634g:image













  • この画面が出れば完了です。「完了」を押して終了します。


f:id:bs-android:20090707135721g:image











Windows環境変数の設定

デスクトップ上にできるhttp://www.cygwin.com/cygwin-icon.gifのアイコンから起動させると、WindowsのユーザーアカウントのディレクトリがHOMEディレクトリになり、Windows XPの場合はパスにスペースが含まれるため、後の作業がうまくいきません。


その為、環境変数「HOME」を設定して、あらかじめ任意のHOMEディレクトリを指定しておきます。





環境変数の設定方法




  • マイコンピュータのプロパティを開く


f:id:bs-android:20090707140338g:image













  • システムのプロパティ画面が出るので、「詳細設定」タブを選択します。


f:id:bs-android:20090707141333g:image













  • 詳細設定の画面で「環境変数」ボタンを押します。


f:id:bs-android:20090707141430g:image













  • 環境変数のユーザー環境変数の「新規」ボタンを押します。


f:id:bs-android:20090707141456g:image













  • 変数名に「HOME」、変数値に「/home/ユーザー名」(※ユーザー名部分は任意)を入力し、OKで抜けます。


f:id:bs-android:20090707141558g:image





これでWindows側の環境変数の設定は完了です。


デスクトップ上にできているhttp://www.cygwin.com/cygwin-icon.gifのアイコンから起動させると、



c:\cygwin\home\ユーザー名


ディレクトリが自動的に生成され、ここがHOMEディレクトリになります。











NDK1.5のダウンロード、インストール



  • ここからNDK1.5のandroid-ndk-1.5_r1-windows.zipをダウンロードします。





ダウンロードが終わったら、android-ndk-1.5_r1-windows.zipを先程自動生成された



c:\cygwin\home\ユーザー名


のディレクトリに展開します。





展開後に



c:\cygwin\home\ユーザー名\android-ndk-1.5_r1-windows


のようになるようにしてください。



c:\cygwin\home\ユーザー名\


に.bashrcファイルが自動生成されている筈なので、そのファイルの最後尾に



export ANDROID_NDK_ROOT=C:/cygwin/home/ユーザー名/android-ndk-1.5_r1-windows


を追加して保存します。


そして、再度、cygwinのシェルを起動させます。


cygwinシェル上で、



$ cd andoird-ndk-1.5_r1


としてNDKのディレクトリに移動し、



$ sh build/host-setup.sh


と入力します。


成功するとこのように出力されます。



$ sh build/host-setup.sh
Detecting host toolchain.

CC : compiler check ok (gcc)
LD : linker check ok (gcc)
CXX : C++ compiler check ok (g++)
Generate : out/host/config.mk
Toolchain : Checking for arm-eabi-4.2.1 prebuilt binaries

Host setup complete. Please read docs/OVERVIEW.TXT if you don't know what to do.





これでNDKのインストールは完了です。











hello-jniライブラリのビルド


NDKのappsディレクトリにhello-jniのサンプルアプリがあります。今回はこれをビルドしてみます。


cygwinシェルのandoird-ndk-1.5_r1ディレクトリで以下のようにコマンドを実行します。



$ make APP=hello-jni





成功すると以下のように出力されます。



$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'
Compile thumb : hello-jni <= sources/samples/hello-jni/hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => apps/hello-jni/project/libs/armeabi





この段階ではライブラリファイルの生成しか行われず、apkファイルは作成されません。


apkファイルを作成する為に、今回はEclipseでhello-jniプロジェクトを取り込みます。





Eclipseにhello-jniプロジェクトを取り込む




  • Eclipseが起動している状態で、Ctrl+Nキーを押下して新規プロジェクト作成画面を開き、「Android Project」を選択して「Next」ボタンを押します。


f:id:bs-android:20090707160908g:image













  • 「Create project from existiong source」を選びます。


f:id:bs-android:20090707161300g:image













  • 「Browse」ボタンを押します。


f:id:bs-android:20090707161645g:image













  • NDKを解凍したディレクトリの下の「apps/hello-jni/project」を選択して「OK」ボタンを押します。


f:id:bs-android:20090707161722g:image













  • ソースコードがインポートされ、以下のような画面になるので、「Finish」ボタンを押します。


f:id:bs-android:20090707161836g:image













  • HelloJniプロジェクトが取り込まれたところ。libsの下にlibhello-jni.soファイルが含まれています。


f:id:bs-android:20090707161943g:image











ここからはいつも通り、普通のAndroidプロジェクトとして実行可能です。





もしライブラリ側のソースコード(~/android-ndk-1.5_r1/sources/samples/hello-jni/hello-jni.c)を更新した場合は、cygwinシェルから



$ make APP=hello-jni


を再度実行してライブラリファイルを更新した後、Eclipseの「Project Explorer」のHelloJniプロジェクトのルートを選択してF5キーを押下すると、ライブラリファイルが更新されたことが検知され、再コンパイルが走ります。


この手順を忘れると、apkファイルが再生成されないので注意が必要です。





Good luck!






Related Posts Plugin for WordPress, Blogger...