armとx86の両方で動作するapkを作る
以前から懸案だったx86でもLuaridaを動かすために、最新のandroid-ndkを入れてみました。ついでなので、eclipseもIndigoにして、Javaもjdk1.7.0_02に入れ替えて開発環境を一新しました。
android-ndk-r7の注意
従来のようにndk-buildすると、awkがダメと言ってエラーになります。どうも、android-ndk-r7に入っているawk.exeがダメなようです。
そこで、android-ndk-r7\prebuilt\windows\bin\awk.exeを使わないように、名前を変更するか何かしましょう。cygwinにawkが無いと言われたら、gawkか何かをインストールしましょう。私は大丈夫でした。
x86用のビルド
x86のビルドはとても簡単です。ndk-build APP_ABI=x86 と、APP_ABIオプションを付けてビルドするだけです。
$ ndk-build APP_ABI=x86 Compile x86 : luavm_module <= main.c Compile x86 : luavm_module <= luavmClient.c Compile x86 : luavm_module <= luavmExec.c Compile x86 : luavm_module <= AridaGraphic.c Compile x86 : luavm_module <= AridaSystem.c Compile x86 : luavm_module <= AridaDialog.c Compile x86 : luavm_module <= AridaItem.c Compile x86 : luavm_module <= AridaSensor.c ... Compile x86 : luavm_module <= lundump.c Compile x86 : luavm_module <= lvm.c Compile x86 : luavm_module <= lzio.c Compile x86 : luavm_module <= print.c SharedLibrary : libluavm_module.so Install : libluavm_module.so => libs/x86/libluavm_module.so
これで、x86版のライブラリが出来上がります。場所はプロジェクトファイルのlibsの下にx86というフォルダができて、そこに入っています。
armとx86の共通apkの作成
これもまた簡単です。ndk-build APP_ABI=all と、APP_ABIオプションの引数をallにするだけです。
$ ndk-build APP_ABI=all Compile thumb : luavm_module <= main.c Compile thumb : luavm_module <= luavmClient.c ... SharedLibrary : libluavm_module.so Install : libluavm_module.so => libs/armeabi/libluavm_module.so Compile thumb : luavm_module <= main.c Compile thumb : luavm_module <= luavmClient.c Compile thumb : luavm_module <= luavmExec.c ... Compile thumb : luavm_module <= lzio.c Compile thumb : luavm_module <= print.c SharedLibrary : libluavm_module.so Install : libluavm_module.so => libs/armeabi-v7a/libluavm_module.so Install : libluavm_module.so => libs/x86/libluavm_module.so
すべてのライブラリを一気にビルドしてくれます。出来上がったライブラリはlibsの下にぞぞれはいっています。
ただし、armだとビルドできているのに、x86ではエラーが出てビルドできない場合があると思うので、allで一気にビルド使用と思うよりも、別々にビルドした方がいいかもしれません。私の場合は、x86に無い宣言があったので、少しソースを変えてビルドしました。