コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

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を使わないように、名前を変更するか何かしましょう。cygwinawkが無いと言われたら、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に無い宣言があったので、少しソースを変えてビルドしました。