2012年11月19日月曜日

[NDK]armとx86の両方で動作するapkを作る

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に無い宣言があったので、少しソースを変えてビルドしました。

0 件のコメント:

コメントを投稿