您的位置:首页 > 移动开发 > Android开发

Android JNI实现计算器demo

2015-10-26 19:39 471 查看


          通过JNI实现四则运算详细步骤

1.
创建android工程MathJni



 

2.声明jni类型的java类MathUtil

package com.mathjni;

/**

 *
@author
luyg

 *
@desc
实现四则运算的JNI方法

 */

public
classMathUtil {

 

  
static {

     
System.loadLibrary("MathJni");

  
}

  

  
public
native
int add(int
num1 , int num2);

  
public
native
int sub(int
num1 , int num2);

  
public
native
int squre(int
num1 , int num2);

  
public
native
int dived(int
num1 , int num2);

}

 

3.
通过命令编译生成JNI的.h文件

 找到MathUtil.class文件所在的目录,通过javah命令生成

 com_mathjni_MathUtil.h文件



[说明:先要进入到工程编译后的classes这级目录即可。
使用javah命令的时候,注意后边的JNI文件要带路径]

 生成的.h文件在工程的classes这一级目录下:



4.
实现.h文件:

 将生成的com_mathjni_MathUtil.h复制到项目的jni文件下,创建一个com_mathjni_MathUtil.cpp方法。实现里边的具体方法。[复杂的实现可以使用一些c的IDE工具实现]

 

#include
<jni.h>


#include
<stdio.h>


#include
<stdlib.h>


#include
"com_mathjni_MathUtil.h"

 

JNIEXPORT jint JNICALL
Java_com_mathjni_MathUtil_add(JNIEnv * een, jobject obj,jint num1 , jint num2)

{

   returnnum1+num2;

}

 

 

JNIEXPORT jint JNICALL
Java_com_mathjni_MathUtil_sub(JNIEnv * een, jobject obj,jint num1 , jint num2)

{

  
 return num1-num2;

}

 

 

JNIEXPORT jint JNICALL
Java_com_mathjni_MathUtil_squre(JNIEnv * een, jobject obj,jint num1 , jint num2)

{

  
return num1*num2;

}

 

 

JNIEXPORT jint JNICALL
Java_com_mathjni_MathUtil_dived(JNIEnv * een, jobject obj,jint num1 , jint num2)

{

  
return num1/num2;

}

 

5.
创建android.mk和application.mk文件。

1)android.mk文件:定义源文件及编译成动态链接库

2)application.mk文件:指定编译后so文件在libs下的目录

 

 

6.在Cgwin里使用ndk命令编译so文件



   
 1)进入MathUtil项目所在的目录
2)使用ndk-build命令编译so

   
 3) 在项目的libs生成了so文件



7.调用测试

  
把so文件复制到asset目录下。调用对应的方法测试



   

8.android里运行效果:

 





  



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JNI Cgwin NDK