Android Jni编写

Android经常会调用到jni库,作为厂商经常需要提供jni库给用户,一方面是对客户提供接口,方便客户操作。

另一方面,算法或者设备操作细节不方便对客户公开,对我们代码起到保密作用。

以建立一个Pwm为例,以下分几步介绍jni创建,示例打印log,不具体操作设备文件。

文章分为5步:1、NDK环境配置 2、创建jni文件 3、激活NDK 4、Java编写 5、运行演示结果

1、NDK环境配置

eclipse基本配置就不描述了.NDK是编译jni的工具,可以理解成google修改过的可以编译Makefile的工具。

Window->Preferences->Android->NDK,配置NDK路径如下图。

2、创建jni文件

创建jni目录

创建pwm.c文件在新建的jni目录下.函数命名规则Java_包名_类名_函数名(...),必须和java包名类名一样,如果不一致,运行时候会报加载库错误。(参考“4、Java编写”的包名和类名)

#include <jni.h>
#include <android/log.h>
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "pwm", __VA_ARGS__)
JNIEXPORT int JNICALL Java_com_oo_pwm_Pwm_open(JNIEnv * env, jobject jobj)
{
	LOGD("pwm open\n");//打印Log
	return 0;
}

编写Android.mk文件在新建的jni目录下

LOCAL_PATH:= $(call my-dir)  
include $(CLEAR_VARS)  

LOCAL_MODULE:= libpwm   #库名
LOCAL_SRC_FILES:= pwm.c #源文件
LOCAL_LDLIBS :=-llog    #打印Log需要的库
include $(BUILD_SHARED_LIBRARY) #生成共享库

注意这部分代码,不能直接复制到你的工程,否则eclipse识别错误。需要自己手动输入。


3、激活NDK

Android Tools->Add Native Support

Project->Build Project,编译生成pwm.so

C:\jre\android-ndk-r8e\ndk-build.cmd all 
"Compile thumb : pwm <= pwm.c
SharedLibrary  : libpwm.so
Install        : libpwm.so => libs/armeabi/libpwm.so<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span>

4、Java编写

建立Pwm类到com.oo.pwm包下,请注意这里的包名和类名。

Pwm.java代码

建立Pwm接口

package com.oo.pwm;

public class Pwm {
	static {
		System.loadLibrary("pwm");//lib不用写
	}
	public native int open();

}
MainActivity.java代码

调用Pwm接口

package com.oo.pwm;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

	private Pwm mPwm;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mPwm = new Pwm();
		mPwm.open();
	}	
}

5、运行演示结果

提示"pwm open",成功执行到jni open函数



错误处理:

找不到include文件

Project->Properties->C/C++ General->Path and Symbols

点击Add,加入ndk的include路径

点击Export

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章