D:\programming\java\YourSafe>ndk-build
[armeabi] Compile++ thumb: hello <= hello.cpp
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libhello.so
[armeabi] Install : libhello.so => libs/armeabi/libhello.so
编译前配置的mk文件:Android.mk(android的a要大写)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
include $(BUILD_SHARED_LIBRARY)
编译过程:
编译class文件得到jni文件。
把编译好jni的c的头文件放在项目根目录jni文件夹下,没有jni文件夹就自己创建一个。
接下来,编译得到so文件,在项目根路径下编译啊(也许还要设置NDK_PROJECT_PATH环境变量指向你的项目根路径!)
必须在项目的根路径编译:parentPath\ndk-build(ndk-build为ndk下文件配置到环境变量path中可随处使用)
eg.D:\androidProject\ndk-build
接下来就是自动编译了,是在windows下编译
--遇到问题上面已经显示了:
解决问题1:版本问题:本jni编译器只支持android-15以上,所以设置AndroidManifest.xml文件中的
<uses-sdk
android:minSdkVersion="15" android:targetSdkVersion="21" />//设置minSdkVersion到合适版本
--遇到问题2:APP_BUILD_SCRIPT points to an unknown file就是Android.xml文件名a要大写。
--遇到问题3:代码错误,漏写变量啊,错误函数啊,这个编译器应该会指出,照提示修改。
编译后会有obj文件夹,运行程序会自动将so文件加载到libs文件下。
编译后obj文件路径:
obj/local/armeabi/objs
--hello
--hello.o
--hello.o.d
--libhello.so
--libstdc++.a
编译后的so文件路径:
libs/armeabi/libhello.so