初次使用Android studio 开发JNI的项目,个人认为比Eclipse下的JNI简单的多,至少Android studio 下不用配置Android.mk(其实也需要Android.mk,只不过配置gradle时会自动生成罢了),不啰嗦了,看下面步骤:
1、创建IOCtrl.java , 里面声明Native方法,如下:
public class IOCtrl {
public native int On();
public native void Off();
}
2、生成.h文件
使用终端(Terminal)工具
切换到Java目录下,cd app/src/main/java,
然后运行命令 javah com.demo.IOCtrl,
在该目录下自动生成com_demo_IOCtrl.h 文件,生成代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_demo_IOCtrl */
#ifndef _Included_com_demo_IOCtrl
#define _Included_com_demo_IOCtrl
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_demo_IOCtrl
* Method: On
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_demo_IOCtrl_On(JNIEnv *, jobject);
/*
* Class: com_demo_IOCtrl
* Method: Off
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_demo_IOCtrl_Off(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
3、创建jni目录,将生成的.h文件拷贝到该目录下,创建一个IOCtrl.c文件,实现头文件的方法。代码如下:
#include <jni.h>
jint JNICALL Java_com_demo_IOCtrl_On(JNIEnv * jenv, jobject obj)
{
//将厂家提供的方法拷贝到这里
return 0;
}
jint JNICALL Java_com_demo_IOCtrl_Off(JNIEnv * jenv, jobject obj)
{
//将厂家提供的方法拷贝到这里
return 0;
}
4、在调用的类中,添加
static {
System.loadLibrary("IOCtrl");
}
//打开IO口
IOCtrl ioCtrl = new IOCtrl();
ioCtrl.On();
//关闭IO口
IOCtrl ioCtrl = new IOCtrl();
ioCtrl.Off();
5、打开build.gradle(Module中,不是在Project中)
在defaultConfig标签下添加如下代码:
ndk {
moduleName "IOCtrl"
}
6、打开gradle.properties,添加 android.useDeprecatedNdk=true
javah -encoding utf-8 com.xxx..MainActivity
开始编译吧。这样就可以控制IO口了。