Android版での注意点

はじめに

Android NDKを利用して,spComponentを用いて開発したGUIアプリケーションを Androidで動作させることができます.基本的に,すでにspComponentを用いて 開発済みのアプリケーションのソースコードをそのままで動かすという感じではなく, ソースコードをAndroid用に改変して動かすことを想定しています.

ソースコードの互換性はある程度高いと思いますが,細かい挙動が結構異なります (詳細は下記の制約の項を見て下さい).

以下では,サンプルプログラムのビルド方法と,サンプルプログラムをベースに 新しいプロジェクトを作成する方法を説明しています. Androidでの開発に精通している人は,サンプルプログラムを用いる必要は ありません.その際には,コンパイル時に,#define ANDROIDを行う必要があります. あるいは,サンプルプログラムのように,-DANDROIDオプションをjni/Android.mkの LOCAL_CFLAGSに追加します.

動作環境

Android SDKとAndroid NDKが正しくインストールされていることが必要です.まずは, Googleの提供するNDKのサンプルプログラムがndk-buildによりビルドでき, プログラムが正しく動作することを確認して下さい.また,サンプルプログラムは eclipseを用いて動作チェックを行っていますので,eclipseを使用することを お勧めします.

このライブラリを使用するには,拙作のspBaseとspComponentの2つのライブラリが 別途必要になります.サンプルをそのままビルドするには,以下のようなディレクトリ 構成である必要があります.なお,OpengGLを用いる場合には,さらにspComponentEx ライブラリも必要となります.OpenGLを用いない場合には,下記の spComponentEx の記述の部分は不要です.

[ディレクトリ構成パターン1]

 include/
   sp/*.h (spBase,spComponent,spComponentEx の全てのヘッダファイル)
 spBase/
   android/
 spComponent/	    (このREADMEファイルがあるディレクトリ)
   android/
   example/
     android/

[ディレクトリ構成パターン2]

 spBase/
   sp/
   android/
 ../	    (このREADMEファイルがあるディレクトリ)
   android/
   example/
     android/
 spComponent/
   sp/
   example/
 spComponentEx/		(OpenGLを使用する場合)
   sp/

上記の「../」ディレクトリは,配布形態によっては [ディレクトリ構成パターン1] と 同様にspComponentディレクトリと統合されている場合があります.

spComponentに依存した不都合はそれほどないと思いますが,Androidの開発環境自体 が正常にインストールするために苦労することが多いですので,Androidの開発経験に 乏しい人はご注意下さい(例えば,インストール状態によってはndk-buildがまともに 動作しないとか,Android SDKのいくつかのバージョンではデフォルトでインストール されるProgurardがまともに機能しないなど).

サンプルのビルド

example/android にeclipseとAndroid Studio両用のサンプルプロジェクトがあります. 通常のAndroidのNDKを用いたプロジェクトのビルド方法とほぼ同様にビルドできます.

なお,サンプルのビルドには,予めspBase(spBase/android)と spComponent(spComponent/android)のスタティックライブラリ,そしてspComponent のexampleのソースコードが必要です.具体的には,この内容と同じREADMEファイルのあるディレクトリから 見て,以下のファイル・ディレクトリが用意されている必要があります.

android/obj/local/armeabi/libspc.a
../spBase/android/obj/local/armeabi/libspb.a
../spComponent/example (spComponentのexampleのソースコードがあるディレクトリ)

eclipseとAndroid Studioのそれぞれのビルドまでの手順は,以下の通りです.

eclipseの場合

  1. 「File」メニューから「Import...」を選択して以下の手順でサンプルプロジェクトを インポートします(ここでは特にAndroidに依存した手順はありません).
    1. ダイアログを開いた後,「Existing Projects into Workspace」を選択し「Next」をクリック.
    2. 「Select root directory」で特定のサンプルのあるディレクトリを指定
    3. 「Projects」のリストの欄にプロジェクト名が表示されており, かつチェックが入っていることを確認の上「Finish」ボタンを押し, サンプルプロジェクトをインポート
  2. コマンド上で,サンプルプロジェクトのあるディレクトリ(1.で指定した ディレクリ)に移動した後,ndk-buildを実行します.再ビルドしたい場合は, -Bオプションを付けると良いでしょう.
    ndk-build -B
    
    arm以外のアーキテクチャ用のビルドも行いたい場合は,下記のように APP_ABI=all オプションを付けます.
    ndk-build -B APP_ABI=all
    
    NDKの制約で,再ビルド時にエラーが発生することもありますが,その場合は binディレクトリの中身とobjディレクトリの中身を全部消去してからやり直すと うまくいくことが多いようです.
  3. パッケージ・エクスプローラから,読み込んだサンプルプロジェクトを右クリック してリフレッシュし,実行して下さい.

Android Studioの場合

  1. 「File」メニューから「New」>「Import Project...」を選択してサンプルプロジェクトを 選択してインポートします.正確には,Android Studio専用のプロジェクトではなく, gradleのプロジェクトとして読み込むことになります.
  2. 上記のeclipseの場合と同様にndk-buildを実行します.まだAndroid StudioのNDK に関する仕様が固まっていない気がすることもあり,Android Studioで直接ビルド できるようにはしていません.
  3. 「Run」メニューから「Run '****'」を選択し,実行します.

サンプルのテンプレート

example/android/template ディレクトリが,サンプルプログラムをビルドする ためのテンプレートとなっています.このディレクトリを別名でコピーし, 以下の箇所を修正すると,eclipse・Android Studio用の新しいサンプルプロジェクトを作成できます.

  1. 「.project」ファイルの3行目のtemplateの部分を新しいサンプルの名前に変更 (eclipse用)
  2. 「AndroidManifest.xml」ファイルの3行目のtemplateの部分を 新しいサンプルの名前に変更
  3. 「build.xml」ファイルの2行目のtemplateの部分を新しいサンプルの名前に変更 (eclipse用)
  4. 「build.gradle」ファイルの27行目のtemplateの部分を新しいサンプルの名前に変更 (Android Studio用)
  5. 「res/values/strings.xml」ファイルの3行目のtemplateの部分を 新しいサンプルの名前に変更
  6. 「jni/Android.mk」の11行目のtemplateの部分を新しいサンプルの名前に変更
  7. 「jni/Android.mk」の12行目のtemplate.cの部分を新しいサンプルの ソースファイル名に変更(例:test.c).このテンプレートでは,下記のように 実際のソースファイルを #include を使って読み込んでいます.
    #include "../../../../../spComponent/example/track_bar.c"
    
  8. 7. で変更したソースファイルの中身のtrack_bar.cの部分を実際に存在する サンプルのソースファイルに変更
  9. これらの処理が全て終わった後,上の「サンプルのビルド」と同じ手順でビルド して下さい.

注意点

制約


Last modified: "2016-04-10 12:43:32 hideki"