Android NDK入门实例 计算斐波那契数列一生成jni头文件
最近要用到Android NDK,调用本地代码。就学了下Android NDK,顺便与大家分享。下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码。以及比较本地代码与java代码的效率。
开发环境搭建见以前写的XP下搭建Android开发环境和XP下搭建AR开发环境,具体过程不再重复。这里主要介绍利用Android NDK调用本地代码,实现全过程。
一、新建Android Application
其它默认,Next直至Finish完成新建工程。
二、使用javah命令生成供本地调用的头文件
1.新建java文件(class),文件FibLib.java
package com.example.fiblib;
public class FibLib {
//java的递归实现
public static long fibJ(long n){
if(n <= 0)
return 0;
if(n==1)
return 1;
return fibJ(n-1) + fibJ(n-2);
}
//java的迭代实现
public static long fibJI(long n){
long previous = -1;
long result = 1;
for(long i=0;i<=n;i++){
long sum=result+previous;
previous = result;
result = sum;
}
return result;
}
//本地实现在这里定义本地C代码的函数原型
static {
System.loadLibrary("fib");
}
public static native long fibN(int n); //本地的递归实现
public static native long fibNI(int n); //本地的迭代实现
}
2.编译、运行
现在编译运行主要是在过程bin目录下生成类文件,用于javah命令生成jni头文件。运行后会在bin下生成class目录,下面在dos下生成jni头文件。
开始没有用-classpath classes 指明类所在的位置,提示错误,加上-classpath classes选项就ok了,可以看到成功生成了com_example_fiblib_FibLib.h。下面贴出com_example_fiblib_FibLib.h代码,这个自动生成的,不需要修改。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_fiblib_FibLib */ #ifndef _Included_com_example_fiblib_FibLib
#define _Included_com_example_fiblib_FibLib
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_fiblib_FibLib
* Method: fibN
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibN
(JNIEnv *, jclass, jint); /*
* Class: com_example_fiblib_FibLib
* Method: fibNI
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibNI
(JNIEnv *, jclass, jint); #ifdef __cplusplus
}
#endif
#endif
Android NDK入门实例 计算斐波那契数列一生成jni头文件的更多相关文章
- Android NDK入门实例 计算斐波那契数列二生成.so库文件
上一篇文章输生成了jni头文件,里面包含了本地C代码的信息,提供我们引用的C头文件.下面实现本地代码,再用ndk-build编译生成.so库文件.由于编译时要用到make和gcc,这里很多人是通过安装 ...
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
- 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)
动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...
- 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)
先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...
- shell脚本计算斐波那契数列
计算斐波那契数列 [1,1,2,3,5,8,,,,,] #!/bin/bash n=$ num=( ) i= while [[ $i -lt $n ]] do let num[$i]=num[$i-] ...
- java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列
什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...
- 关于Haskell计算斐波那契数列的思考
背景 众所周知,Haskell语言是一门函数式编程语言.函数式编程语言的一大特点就是数值和对象都是不可变的,而这与经常需要对状态目前的值进行修改的动态规划算法似乎有些"格格不入", ...
- X86汇编——计算斐波那契数列程序(详细注释和流程图说明)
X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是A ...
- python计算斐波那契数列
斐波那契数列就是黄金分割数列 第一项加第二项等于第三项,以此类推 第二项加第三项等于第四项 代码如下 这一段代码实现fib(n)函数返回第n项,PrintFN(m,n,i)函数实现输出第i项斐波那契数 ...
随机推荐
- 关于PEER - PEER毅恒挚友 - Powered by Discuz!
关于PEER - PEER毅恒挚友 - Powered by Discuz! PEER Experience Exchange Rostrum(PEER)由海外中国留学生和中国知名高校学生组成,服务中 ...
- Research notes for Scientific Writing
Noun. complacency n. 自得;自鸣得意 nomenclature n. 专业术语:e.g. the nomenclature of music; 音乐的专门术语 Verb. abs ...
- hdu 1421 搬寝室 (dp)
思路分析: dp[i][j] 表示选取到第 i 个 组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...
- 用QT打开网页
原地址:http://blog.csdn.net/fjb2080/article/details/8136084 1.用qlabel. QLabellabel->setText(tr(" ...
- windows 2003 域控制器(AD)的常规命令行操作以及修复
查询服务器的角色 Netdom query fsmo 强制升级操作主机角色(如果两台DC都无损,可以直接用图形模式传送,这里指的是一台DC出问题,另一台强制升级占用角色的情况) Ntdsutil Ro ...
- Spring Mobile是如何判断访问设备的类型的
Spring最近换域名了,去转转,发现了一个有意思的项目:spring mobile. http://projects.spring.io/spring-mobile/ 这个项目有很多实用的功能,如识 ...
- haproxy timeout server 46000 后台超时时间
[root@wx03 ~]# sh ./1.sh Wed Jul 6 19:54:40 CST 2016 <html><body><h1>504 Gateway T ...
- Java描述语言、国家和地理的类——Locale
Locale类代表一个特定的地理.语言和国家环境.一个Locale的实例对象本身不会验证它代表的语言和国家地区信息是否正确,只是向一些对国家和语言.地理等比较敏感的类提供国家地区语言信息,这些类有Da ...
- [置顶] Jsp中的table多表头导出excel文件
首先引入两份JS:copyhtmltoexcel.js以及 tableToExcel.js /* * 默认转换实现函数,如果需要其他功能,需自行扩展 * 参数: * tableID : HTML中Ta ...
- TObject简要说明-对象的创建流程
TObject = class //创建 constructor Create; //释放 procedure Free; //初始化实列 class functi ...