Andoid NDKにおいて、SharedLibraryの場合は自動的にstripされてデバッグ情報が消去されるのですが、StaticLibraryの場合はreleaseビルドにしても消去されません。これは、Android NDKのビルドシステムが、releaseビルドの場合でも-gオプションを付けてコンパイルしているためです。

実際に、C:\cygwin\android-ndk-r6b\build\coreの中にある、add-application.mkを見てみましょう。


# set release/debug build flags. We always use the -g flag because
# we generate symbol versions of the binaries that are later stripped
# when they are copied to the final project's libs/ directory.
#
ifeq ($(APP_OPTIM),debug)
APP_CFLAGS := -O0 -g $(APP_CFLAGS)
else
APP_CFLAGS := -O2 -DNDEBUG -g $(APP_CFLAGS)
endif



このように、将来のstripを見越して、常に-gが付いていることが分かります。SharedLibraryの場合は確かにstripされるのですが、include $(BUILD_STATIC_LIBRARY)と設定してStaticLibraryでビルドする場合はstripされません。コードパスやデバッグ情報が丸見えです。

ということで、release時は-gを付けないように書き換えて、上書きしてしまいます。すると、例えば300KBだった出力ファイルが59KBになります。