Android Jni编写

来源:互联网 发布:苍南哪有淘宝培训 编辑:程序博客网 时间:2024/05/22 08:20

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");//打印Logreturn 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.cSharedLibrary  : libpwm.soInstall        : 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;@Overrideprotected 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

0 0
原创粉丝点击