新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

NDK

ndk のインストール。android で注意しなければならないのは、情報がすぐに陳腐化することだ。特に blog の内容などは信じないほうがよい。(これもブログ!!!)blog で書いている人の多くは、その時点で正しいようだが、android は開発が早いので陳腐化してしまう。
現在、私は android-ndk-r5b を使っている。これを cygwin の /opt にコピーしてさらに android-ndk-r5b を android-ndk にシンボリックリンクしてつかっている。基本的にはこれでおしまい。doc/INSTALL.html にもかいてあるが、

Previous releases required you to run the 'build/host-setup.sh' script to
configure the NDK. However, this step has been removed in release 4 (a.k.a. r4).

ということで、host-setup.sh が必要なくなった。もう ndk-build だけでよい。環境変数の設定も必要ないようだ。ただし、これも将来変わる可能性がある。

ということで、android の開発では 1年も前の情報だと使えない。結局、

                        • -

http://developer.android.com/sdk/ndk/index.html

                        • -

を参照するのが一番正しいことになる。(当たり前だが)。あとついでに書くとそのコンポーネント(例えば ndk)の Readme とか doc を見るのがよい。
ついでに書くとGetting Started with the NDK は

2.Create <project>/jni/Android.mk to describe your native sources to the NDK build system
3.Optional: Create <project>/jni/Application.mk

とある。jni の下に Android.mk を作る必要がある(手で作るようだ)のは今まで通りだが、Application.mk は jni の下でしかもオプショナルだ。

NDK が必要なもの

INSTALL.html によると make と awk が必要らしい。make は gmake で 3.81 以降のもの、awk はオリジナルではなく nawk か gnu awk。ndk-build が #!/bin/sh としているから shell も必要。ndk-build を読むと、、、、、最終的には make を読んでいるだけだ。
arm 用の gcc がついていたのでコンパイルできるか確かめてみる。

> /opt/android-ndk/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gcc.exe  main.c
main.c: In function 'main':
main.c:4: warning: incompatible implicit declaration of built-in function 'printf'
i:/cygwin/opt/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld.exe: crt0.o: No such file: No such file or directory
collect2: ld returned 1 exit status

crt.0 がないと言われる。ふ〜ん。-dumpspecs してみる。どうも linux 用に作ったわけではなさそう。まぁそうかもしれない。so を作るだけなので、exe を作るわけではない。
neon は使えそう。ndk のサンプル(ついてくる)に hello-neon というのがある。fir_filter_neon_intrinsics とう関数を呼び出しているな、、、#include とかして、、、アセンブラを書かずして neon を使っている。

Application.mk

Application.mk にはどうやら APP_PLATFORM や APP_ABI を書くらしい。つまり、android のどのバージョンで動くのか?どの CPU で動くのかをしているするみたいだ。

# The ARMv7 is significanly faster due to the use of the hardware FPU
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-9

単純なものには必要ない(オプショナルな .mk )。