当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,