Android(安卓)NDK入门实例 计算斐波那契数列一生成jni头文件
16lz
2021-12-04
最近要用到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 __cplusplusextern "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(安卓)下使用 JSON 实现 HTTP 请求
- 转:深入解读Linux与Android的相互关系
- Android(安卓)Camera的接口与架构介绍
- Android有用代码片断(五)
- 狂刷Android范例之2:剪贴板范例
- Android中MaterialDesign使用 (五)自定义Behavior实现UC顶栏效果
- Android与设计模式(4)外观/桥接/MVP
- Kotlin实现Android顶部导航栏与模块联动
- Android简易实战教程--第三十九话《Chronometer实现倒计时》