Android NDK入门实例 计算斐波那契数列二生成.so库文件
下面实现本地代码,再用ndk-build编译生成.so库文件。由于编译时要用到make和gcc,这里很多人是通过安装cygwin,搭建一个linux环境编译。我是直接用Android NDK里ndk-build工具编译,没有安装cygwin,也能编译。
一、编写本地代码fib.c
首先在过程fiblib下新建一个目录jni,将上一篇生成的jni头文件添加到这个目录,接着在源码目录下新建文件fib.c:
文件jni/fib.c:
?#include "com_example_fiblib_FibLib.h" //递归的斐波那契算法 long fibN(long n){ if(n<0) return 0; if(n==1) return 1; return fibN(n-1)+fibN(n-2); } //迭代的斐波那契算法 long fibNI(long n){ long previous = -1; long result = 1; long i = 0; int sum = 0; for (i=0;i<=n;i++){ sum = result + previous; previous = result; result = sum; } return result; } //与头文件生成的JNI方法的签名一致,否则运行时无法调用到本地代码 JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibN (JNIEnv *env, jclass obj, jint n){ return fibN(n); } JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibNI (JNIEnv *env, jclass obj, jint n){ return fibNI(n); } #include "com_example_fiblib_FibLib.h" //递归的斐波那契算法 long fibN(long n){ if(n<0) return 0; if(n==1) return 1; return fibN(n-1)+fibN(n-2); } //迭代的斐波那契算法 long fibNI(long n){ long previous = -1; long result = 1; long i = 0; int sum = 0; for (i=0;i<=n;i++){ sum = result + previous; previous = result; result = sum; } return result; } //与头文件生成的JNI方法的签名一致,否则运行时无法调用到本地代码 JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibN (JNIEnv *env, jclass obj, jint n){ return fibN(n); } JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibNI (JNIEnv *env, jclass obj, jint n){ return fibNI(n); }
二、编写Makefile·
创建本地库之前,需要编写Android.mk,描述编译项目
文件jni/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := fib LOCAL_SRC_FILES := fib.c include $(BUILD_SHARED_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := fib LOCAL_SRC_FILES := fib.c
include $(BUILD_SHARED_LIBRARY)三、编译构建共享库
这里需要在jni下执行ndk-build生成库文件,即在libs下生成共享库libfib.so
右击工程Refresh下,就看到生成了libfib.so
补充:移动开发 , Android ,