2013年3月27日水曜日

Android JNIでライブラリ作成

JNIで作ったC/C++ソースコードの使い回しはみんなどうしているんだろう?
ソースのコピペ?

コピペで新しいファイル作成も面倒なので、ライブラリ化してみた。

■ Android.mkの記述
    include $(BUILD_STATIC_LIBRARY)と記述する。



BUILD_SHARED_LIBRARYをBUILD_STATIC_LIBRARYに置き換える。
 
■ Application.mkの記述
   APP_OPTIM    := release
  APP_MODULES    := devInf ← モジュール名

モジュール名を定義する。
 これでCソースをビルドすると、objフォルダ内にライブラリファイル(libdevinf.a)が生成された。
■ ライブラリの使用
 生成されたライブラリを別のプロジェクトで使用してみる。
 ※新しいCソースには以下の記述を定義しておくことで、ライブラリ内の関数を呼び出すことができる。
  // ---------------------------------------------------------
//         devinfライブラリ内の関数定義
  // ---------------------------------------------------------
  extern void    _initDevInf( void );
 上記で生成されたライブラリ(libdevinf.a)をJNIフォルダにコピーし、Android.mkに定義を追記する。
  LOCAL_MODULE    := devicelib ← 一時的に生成するライブラリ名
LOCAL_SRC_FILES    := libdevInf.a ← 上記で生成したライブラリ名
  include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
  LOCAL_MODULE    := CheckInf
  LOCAL_SRC_FILES := checkInf.c ← 新しいプロジェクトのCファイル
  LOCAL_STATIC_LIBRARIES    := devicelib ← 一時的に生成するライブラリ名
  LOCAL_LDLIBS    := -llog

  include $(BUILD_SHARED_LIBRARY) ← .soライブラリを生成する


これでビルドすることで、いつものようにlibsフォルダ内にライブラリファイル(.so)が生成できた。

そうなんやぁ ・・ って感じ。
こんな使い方するのって誰もいないんかな?

0 件のコメント:

コメントを投稿