1.生成.h头文件,配置.c文件(可查看Android之JNI:Android Studio使用Gradle编译C/C++源码)
2.编写Android.mk
//Android.mk简介参考链接:http://blog.sina.com.cn/s/blog_602f8770010148ce.htmlLOCAL_PATH:= $(call my-dir) //Android.mk 文件首先必须定义LOCAL_PATH变量,以便用于在开发树中查找源文件.宏函数‘my-dir‘由编译系统提供,用于返回当前路径(即包含Android.mk的目录)include $(CLEAR_VARS) //CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH.因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的,所以有必要.LOCAL_MODULE := juziJni //表示编译的动态库名称.名称必须唯一,而且不包含任何空格且不要以lib开头LOCAL_SRC_FILES:= jni_use.c //表示源代码文件include $(BUILD_SHARED_LIBRARY) //表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用‘include $(CLEAR_VARS)‘以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做.(BUILD_STATIC_LIBRARY:编译为静态库;BUILD_SHARED_LIBRARY :编译为动态库;BUILD_EXECUTABLE:编译为Native C可执行程序)
3.linux环境下使用ndk-build命令编译生成.so文件
若要指定架构,可以使用如下命令:
ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"
4.使用生成的.so文件【Android之Android Studio下使用JNI:Android Studio下使用.so文件】
小Tips:
1.Android.mk:2: *** missing separator. Stop.
LOCAL_PATH:= $(call my-dir)include$(CLEAR_VARS)LOCAL_MODULE := juziJniLOCAL_SRC_FILES:= jni_use.cinclude$(BUILD_SHARED_LIBRARY)
解决办法:$符号前面必须加一个空格
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := juziJniLOCAL_SRC_FILES:= jni_use.cinclude $(BUILD_SHARED_LIBRARY)
2./home/emily/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: ./obj/local/armeabi/PassWorld: Input/output error
collect2: error: ld returned 1 exit status
解决办法:在虚拟机和window的共享文件中编译会出现这种问题,copy项目至linux目录即可。
时间: 2024-10-24 22:56:35