Andorid: ndk-buildについて

NDKで提供されているネイティブコードを生成するスクリプトndk-buildについて少し調べてみました。

  • ndk-buildはBourne Shellスクリプト
  • オプション。以下の他にもたくさんある。
     ndk-build             対応するマシンコードでリビルドする         
     ndk-build clean       生成したすべてのバイナリを削除         
     ndk-build V=1         生成時に実行されるコマンドを表示     
     ndk-build NDK_LOG=1   内部的なログメッセージを表示
    
  • 最終行で $GNUMAKE -f $PROGDIR/build/core/build-local.mk "$@" を実行する
    Scientific Linux6.x、Fedora15では/usr/bin/make(/usr/bin/gmakeはシンボリックリンク)が実行される。

  • 最初にbuild/core/build-local.mkが実行され、build/coreの下のmakefileをはじめ、includeされた色々なmakefile xx.mkが実行され、最終的にプロジェクトのjniディレクトリの下のAndroid.mkが実行されてネイティブなシェアードライブラリ、あるいは実行プログラムが生成される。

参考:
NDKのdocs/NDK-BUILD.html
http://www.gnu.org/software/make/manual/make.txt

オプション NDK_LOG=1を付けてndk-buildを実行すると処理のプロセスがわかります。
以下は、sample/native-activityディレクトリの下で実行した例です。

$ /usr/local/android-ndk-r6b/ndk-build NDK_LOG=1 
Android NDK: NDK installation path auto-detected: '/usr/local/android-ndk-r6b'
Android NDK: GNU Make version 3.81 detected
Android NDK: Host OS was auto-detected: linux
Android NDK: Host CPU was auto-detected: x86
Android NDK: HOST_TAG set to linux-x86
Android NDK: Host awk tool was auto-detected: awk
Android NDK: Host awk test returned: Pass
Android NDK:  This NDK supports the following toolchains and target ABIs:
Android NDK:    arm-linux-androideabi-4.4.3:  armeabi armeabi-v7a
Android NDK:    x86-4.4.3:  x86
Android NDK: Found platform root directory: /usr/local/android-ndk-r6b/platforms
Android NDK: Found supported platforms: android-3 android-4 android-5 android-8 android-9
Android NDK: PLATFORM android-3 supports: arm x86
Android NDK:   ABI arm sysroot is: /usr/local/android-ndk-r6b/platforms/android-3/arch-arm
Android NDK:   ABI x86 sysroot is: /usr/local/android-ndk-r6b/platforms/android-3/arch-x86
Android NDK: PLATFORM android-4 supports: arm x86
Android NDK:   ABI arm sysroot is: /usr/local/android-ndk-r6b/platforms/android-4/arch-arm
Android NDK:   ABI x86 sysroot is: /usr/local/android-ndk-r6b/platforms/android-4/arch-x86
Android NDK: PLATFORM android-5 supports: arm x86
Android NDK:   ABI arm sysroot is: /usr/local/android-ndk-r6b/platforms/android-5/arch-arm
Android NDK:   ABI x86 sysroot is: /usr/local/android-ndk-r6b/platforms/android-5/arch-x86
Android NDK: PLATFORM android-8 supports: arm x86
Android NDK:   ABI arm sysroot is: /usr/local/android-ndk-r6b/platforms/android-8/arch-arm
Android NDK:   ABI x86 sysroot is: /usr/local/android-ndk-r6b/platforms/android-8/arch-x86
Android NDK: PLATFORM android-9 supports: arm x86
Android NDK:   ABI arm sysroot is: /usr/local/android-ndk-r6b/platforms/android-9/arch-arm
Android NDK:   ABI x86 sysroot is: /usr/local/android-ndk-r6b/platforms/android-9/arch-x86
Android NDK: Found stable platform levels: 3 4 5 8 9
Android NDK: Found max platform level: 9
Android NDK: Looking for AndroidManifest.xml in /home/user01/Android/my-NDK-samples/native-activity
Android NDK:     Found it !
Android NDK: Found project path: /home/user01/Android/my-NDK-samples/native-activity
Android NDK: Parsing /home/user01/Android/my-NDK-samples/native-activity/jni/Application.mk
Android NDK:   Defaulted to APP_BUILD_SCRIPT=/home/user01/Android/my-NDK-samples/native-activity/jni/Android.mk
Android NDK: Application 'local' is not debuggable
Android NDK: Selecting release optimization mode (app is not debuggable)
Android NDK: Adding import directory: /usr/local/android-ndk-r6b/sources
Android NDK: Building application 'local' for ABI 'armeabi'
Android NDK: Using target toolchain 'arm-linux-androideabi-4.4.3' for 'armeabi' ABI
Android NDK: Looking for imported module with tag 'cxx-stl/system'
Android NDK:   Probing /usr/local/android-ndk-r6b/sources/cxx-stl/system/Android.mk
Android NDK:     Found in /usr/local/android-ndk-r6b/sources/cxx-stl/system
Android NDK: Looking for imported module with tag 'android/native_app_glue'
Android NDK:   Probing /usr/local/android-ndk-r6b/sources/android/native_app_glue/Android.mk
Android NDK:     Found in /usr/local/android-ndk-r6b/sources/android/native_app_glue
Compile thumb  : native-activity <= main.c
Compile thumb  : android_native_app_glue <= android_native_app_glue.c
StaticLibrary  : libandroid_native_app_glue.a
SharedLibrary  : libnative-activity.so
Install        : libnative-activity.so => libs/armeabi/libnative-activity.so