Android编译库NDK
问题描述:
我在c/C++中有一个库。我已经在一些C++程序中成功地使用了它。Android编译库NDK
我想测试,如果它编译于Android,这将是什么规模等
有什么办法,我编译这个库到.so
文件,而无需一个完整的Android的Java项目?我对Android开发一无所知,但有一位朋友想要使用我的库。我可以给他提供一个编译好的.so
文件吗?
我发现的每一个资源都需要编译出Android项目中的JNI
文件夹。
答
我发现要使用build-ndk脚本,我不需要一个真正的项目。我创建了一个文件夹project
,除了另一个文件夹jni
以外没有任何内容,并将所有资源都放在该文件夹中。然后,我创建了Android.mk
文件并按照ndk文档中所述运行脚本。
答
你需要做的是安卓Native Development Kit(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
+0
谢谢,但我最终解决了这个更简单的方法。 – baruch
“项目”目录没有什么特别之处 - 将其命名为任何你想要的。源代码和'Android.mk'应该放在'$(project)/ jni /'中,并且在构建过程中会创建一些目录:'$(project)/ obj'和'$(project)/ libs'。 – jrr