忘れちゃいそうなアレやコレをメモっておくサイト。

Android NDK関連のまとめ(中)

プロジェクトの準備

AndroidプロジェクトにJNI連携用の各種設定をする。

ADT r20からNative Pluginを導入することで実行することができるようになったようだが,
インクルードパスを設定しても「unresolved inclusion jni.h」の問題がでてしまう。
自前でjniフォルダを作成したときのプロジェクトの設定と比べると,
[C/C++ 一般]-[パスおよびシンボル]-[インクルード]の言語欄が違う。
Add Native Supportを使用すると「c,cpp」だが「GNU C」「GNU C++」「アセンブリー」がある。
「GNU C++」にNDKのインクルードパスを設定するとエラーが消える。
ADR r20の不具合のように読める。不具合報告ページ
問題が直るまでは手動で設定すると良さそうです。

ブログの方に回避方法を載せておきました。
  1. プロジェクトフォルダを選択して右クリック。
    [Androidツール]-[Add Native Support]を選択。
  2. ライブラリ名を入力する。
    jniフォルダが作成されて先ほど入力してライブラリ名のcpp(c)ファイルが作成される。
  3. ログ出力用の設定を追加。
  4. インクルードパスを設定。
    jniフォルダを
    「例:NDKのパス/platforms/android-14/arch-arm/usr/include」

コードを実装する

Javaコード側

Javaコード側にnativeメソッドを実装する。
難読化してリリースするときは,これらメソッドとパッケージ名は難読化対象外にしておく。

例)
-keep class com.example.NativeClass

ただ「${sdk.dir}/tools/proguard/proguard-android.txt」の標準設定でnativeメソッドがあるクラスの名前は難読化されないように設定されているので別途設定する必要はない。

Cコード側

ヘッダファイルの準備
ヘッダーファイルを自動生成する。
プロジェクトのルートフォルダへ移動して以下のコマンドを実行する。

javah -classpath bin/classes -o jni/<出力ヘッダーファイル名> <パッケージ名>

bin/classesフォルダに出力された指定したパッケージ名のclassファイルから
jniフォルダへ指定したファイル名で出力するというもの。
シグネチャの調査
bin/classesフォルダへ移動して以下のコマンドを実行する。

javap -private -c <パッケージ名> > <出力ファイル名>

privateメンバも含めて調査するときは-privateを設定する。
リダイレクトでファイルに出力する。

ビルド

Application.mkに以下の設定をしておくことで全CPUアーキテクチャ用の共有ライブラリをビルドしてくれる。
(Application.mkはAndroid.mkと同じフォルダに作成する)

APP_ABI := all

includeするヘッダがプロジェクトに設定しているものが使用されている。
アーキテクチャ別のヘッダを分けるときについては調査中。
タグ
×

この広告は60日間更新がないwikiに表示されております。

フリーエリア

Menu

メニューサンプル1

メニューサンプル2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人のみ編集できます