狠狠撸

狠狠撸Share a Scribd company logo
ANDROID HACKS #47  アプリケーションから JNI を使う 担当:かわらたん Twitter : @pfkawara Blog : http://kawara-tan.blogspot.com/ 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ NDK で JNI を使用する JNI メソッドを定義したアプリケーションを作成する JNI ライブラリを実装する JNI ライブラリをビルドする Hack をさらに Hack する ※ JNI ??? Java Native Interface の略。 Java と他言語 ( 大抵は C/C++) を連携するための仕組み 09/19/11
1. NDK で JNI を使用する 09/19/11
1. NDK で JNI を使用する NDK を使用して JNI ライブラリの実装を行うと、アプリケーション配布形式である apk ファイルにネイティブライブラリとして同梱する事が出来る。 ソースの配置場所 アプリ: {NDK_HOME}/apps/sampleHack47 JNI ライブラリ: {NDK_HOME}/apps/sampleHack47/project/jni 名前について JNI ライブラリモジュール名はアプリのプロジェクト名と同じにする Make して出来るライブラリファイル名はプレフィックスに” lib” 、拡張子は” .so” になる。 例:プロジェクト名 (JNI ライブラリモジュール名 ) が” sample” ならば    libsample.so ※ 拡張子の so は Shared Object の略 09/19/11
2. JNI メソッドを定義したアプリケーションを作成する 09/19/11
2. JNI メソッドを定義したアプリケーションを作成する Android プロジェクトを Eclipse で作る 「新規 Android プロジェクト」ダイアログの「ロケーション」で、あらかじめ決めたアプリの場所を選択する 先ほどの例で言うと、 {NDK_HOME}/apps/SampleHack47/projet 09/19/11
MainActivity 2. JNI メソッドを定義したアプリケーションを作成する 09/19/11 Activity が初めて参照されたときに JNI ライブラリを読み込む JNI ライブラリのメソッドを定義する (native 修飾子をつけて Java 以外でコンパイルされている事を示す )
3. JNI ライブラリを実装する 09/19/11
3. JNI ライブラリを実装する JNI ヘッダ ( ヘッダファイル ) を作成 ※ クラスファイルからヘッダーファイルを作るので、 Java ソース (MainActivity) のコンパイルが済んでいる事が前提 生成されたヘッダファイルは以下 09/19/11 %> cd NDK_HOME/apps/SampleHack47/project %> javah –classpath bin –d jni sample.hack47.MainActivity
3. JNI ライブラリを実装する ネイティブコードを C 言語で実装 JNI ヘッダと同じディレクトリにソースを置く JNI ヘッダに宣言された JNI 関数を実装する 09/19/11
3. JNI ライブラリを実装する Android.mk ファイル作成 JNI ライブラリをビルドするための make ファイル (Android.mk) を C のソースコードと同じディレクトリに作る ファイルの中身は以下 09/19/11 ライブラリモジュール名を指定 ソースファイルを指定 my-dir マクロで現在のディレクトリを指定 LOCAL_PATH を除く LOCAL_xxx の定義をクリーンアップ 共有ライブラリを作成する際に指定
4. JNI ライブラリをビルドする  09/19/11
4. JNI ライブラリをビルドする make コマンドでビルド apps ディレクトリに配置されているプロジェクトを指定 ビルドが完了すると、 SampleHack47/libs/armeabi/  の下にライブラリファイルが出来る 09/19/11 %> cd NDK_HOME %> make APP=SampleHack47
5. Hack をさらに Hack する 09/19/11
5. Hack をさらに Hack する ごめん。業務多忙のため、これ以上できませんでした 09/19/11
参考 URL Android Developers http://developer.android.com/intl/ja/index.html JNI メモ (Hishidama’s Java native interface Memo) http://www.ne.jp/asahi/hishidama/home/tech/java/jni.html Android NDK で JNI を使用してアプリを高速可にするには (@IT) http://www.atmarkit.co.jp/fsmart/articles/android15/android15_3.html ARM で使われる二つの ABI http://www.oidon.net/linux/arm-eabi-oabi 09/19/11

More Related Content

Android Hacks - Hack47

  • 1. ANDROID HACKS #47 アプリケーションから JNI を使う 担当:かわらたん Twitter : @pfkawara Blog : http://kawara-tan.blogspot.com/ 09/19/11
  • 2. この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
  • 3. アジェンダ NDK で JNI を使用する JNI メソッドを定義したアプリケーションを作成する JNI ライブラリを実装する JNI ライブラリをビルドする Hack をさらに Hack する ※ JNI ??? Java Native Interface の略。 Java と他言語 ( 大抵は C/C++) を連携するための仕組み 09/19/11
  • 4. 1. NDK で JNI を使用する 09/19/11
  • 5. 1. NDK で JNI を使用する NDK を使用して JNI ライブラリの実装を行うと、アプリケーション配布形式である apk ファイルにネイティブライブラリとして同梱する事が出来る。 ソースの配置場所 アプリ: {NDK_HOME}/apps/sampleHack47 JNI ライブラリ: {NDK_HOME}/apps/sampleHack47/project/jni 名前について JNI ライブラリモジュール名はアプリのプロジェクト名と同じにする Make して出来るライブラリファイル名はプレフィックスに” lib” 、拡張子は” .so” になる。 例:プロジェクト名 (JNI ライブラリモジュール名 ) が” sample” ならば    libsample.so ※ 拡張子の so は Shared Object の略 09/19/11
  • 7. 2. JNI メソッドを定義したアプリケーションを作成する Android プロジェクトを Eclipse で作る 「新規 Android プロジェクト」ダイアログの「ロケーション」で、あらかじめ決めたアプリの場所を選択する 先ほどの例で言うと、 {NDK_HOME}/apps/SampleHack47/projet 09/19/11
  • 8. MainActivity 2. JNI メソッドを定義したアプリケーションを作成する 09/19/11 Activity が初めて参照されたときに JNI ライブラリを読み込む JNI ライブラリのメソッドを定義する (native 修飾子をつけて Java 以外でコンパイルされている事を示す )
  • 10. 3. JNI ライブラリを実装する JNI ヘッダ ( ヘッダファイル ) を作成 ※ クラスファイルからヘッダーファイルを作るので、 Java ソース (MainActivity) のコンパイルが済んでいる事が前提 生成されたヘッダファイルは以下 09/19/11 %> cd NDK_HOME/apps/SampleHack47/project %> javah –classpath bin –d jni sample.hack47.MainActivity
  • 11. 3. JNI ライブラリを実装する ネイティブコードを C 言語で実装 JNI ヘッダと同じディレクトリにソースを置く JNI ヘッダに宣言された JNI 関数を実装する 09/19/11
  • 12. 3. JNI ライブラリを実装する Android.mk ファイル作成 JNI ライブラリをビルドするための make ファイル (Android.mk) を C のソースコードと同じディレクトリに作る ファイルの中身は以下 09/19/11 ライブラリモジュール名を指定 ソースファイルを指定 my-dir マクロで現在のディレクトリを指定 LOCAL_PATH を除く LOCAL_xxx の定義をクリーンアップ 共有ライブラリを作成する際に指定
  • 14. 4. JNI ライブラリをビルドする make コマンドでビルド apps ディレクトリに配置されているプロジェクトを指定 ビルドが完了すると、 SampleHack47/libs/armeabi/ の下にライブラリファイルが出来る 09/19/11 %> cd NDK_HOME %> make APP=SampleHack47
  • 15. 5. Hack をさらに Hack する 09/19/11
  • 16. 5. Hack をさらに Hack する ごめん。業務多忙のため、これ以上できませんでした 09/19/11
  • 17. 参考 URL Android Developers http://developer.android.com/intl/ja/index.html JNI メモ (Hishidama’s Java native interface Memo) http://www.ne.jp/asahi/hishidama/home/tech/java/jni.html Android NDK で JNI を使用してアプリを高速可にするには (@IT) http://www.atmarkit.co.jp/fsmart/articles/android15/android15_3.html ARM で使われる二つの ABI http://www.oidon.net/linux/arm-eabi-oabi 09/19/11