JNA を Android で使う方法

C言語のライブラリを Java から使うときに便利な https://github.com/twall/jna (JNA) を Android で使う方法のメモです。(追記:JNA 4.0.0 に合わせて大幅に書き換えました)

JNA は 4.0.0 現在、Android に対応していますが、ドキュメントがないです。3.4.0 当時、Android 対応をしようとして、中途半端になっていて、3.5.1 でその残骸が残っていましたが、4.0.0 ではちゃんと対応しています。

手順

  1. https://github.com/twall/jna/raw/master/dist/android-arm.jar をダウンロードして、解凍して、libjnidispatch.so を取り出します。
  2. libjnidispatch.so を自分の Android アプリのプロジェクトフォルダの libs/armeabi に置きます。

注意点

注意点は、下記のように Structure にはフィールドの順番を指定しないといけないです。(追記:昔のJNAはこれが必須ではなかったのですが、JNA 3.5.0 からそもそも必須です。)

@Override
protected List getFieldOrder() {
    return Arrays.asList("x", "y");
}