为Android NDK编译库

时间:2011-09-13 13:52:52

标签: android android-ndk

我有一个c / c ++库。我在一些c ++程序中成功使用它。

我想测试它是否在Android上编译,以及它的大小等等。
有没有办法让我在没有整个Android Java项目的情况下将这个库编译成.so文件?我对Android开发一无所知,但有一位想要使用我的库的朋友。我可以给他一个编译好的.so文件吗? 我发现的每个资源都说它需要从Android项目中的JNI文件夹中编译。

2 个答案:

答案 0 :(得分:3)

我发现要使用build-ndk脚本,我不需要真正的项目。我创建了一个文件夹project,除了另一个文件夹jni外没有任何文件夹,并将我的所有资源都放在该文件夹中。然后我创建了Android.mk文件并按照ndk文档中的描述运行脚本。

答案 1 :(得分:2)

你需要做的是android原生开发工具包(NDK)http://developer.android.com/sdk/ndk/index.html和GCC编译器。

然后,您可以使用如下所示的参数创建一个Makefile(感谢ViTo Brothers Apoyan)并创建您的共享库。

GCC := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-gcc.exe
GPP := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-g++.exe
AR  := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-ar.exe

OPTIONS  :=\
-fpic \
-ffunction-sections \
-funwind-tables  \
-fstack-protector \
-D__ARM_ARCH_5__ \
-D__ARM_ARCH_5T__ \
-D__ARM_ARCH_5E__ \
-D__ARM_ARCH_5TE__ \
-Wno-psabi \
-march=armv5te \
-mtune=xscale \
-msoft-float \
-mthumb \
-Os \
-fomit-frame-pointer \
-fno-strict-aliasing \
-finline-limit=64 \
-DANDROID \
-Wa, \
-O2 \
-DNDEBUG \
-g \

default: all


all: obj
    $(AR) r mysharedlibrary.so *.o

obj:
    $(GCC) $(OPTIONS) -c *.c