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
- android编写JNI方法
- android 中 编写jni
- Android Jni编写
- Android Studio 编写Jni
- Android开发-jni的编写
- android studio编写jni成功
- android JNI 简单demo(2)之JNI demo 编写
- android jni 的编写一(JNI的静态注册)
- Android NDK: 用 NDK 编写 JNI
- android jni代码编写规则--整理总结
- android开发——关于编写JNI
- android jni代码编写规则--整理总结
- android jni代码编写规则--整理总结
- Android NDK--自己编写调用JNI
- android jni的编写, 控制led灯
- android开发——关于编写JNI
- android jni代码编写规则--整理总结
- android JNI的编写最全过程
- MySQL索引背后的数据结构及算法原理
- ZOJ3778 Talented Chef(贪心)
- POJ 1182 食物链
- 三种观察者模式的C#实现
- javascript的基础学习笔记
- Android Jni编写
- js的get set, 构造函数,匿名函数,prototype(原型)
- 堆的操作
- JavaWeb开发-tomcat目录详解
- Activity setContentView(int layoutResID) 发生了什么
- 易语言学习第十三课
- 生成一颗具有关键字从1到2^(H+1)-1且高为H的理想平衡二叉树
- VIM学习(1)
- 刷新后页面回归原处