1.打开eclipse新建一个android的工程,就叫"helloworld"吧。建立后添加一个class文件作为jni的接口,包名:package mtk.abc; 类名:Uart
public class Uart{
public native void print();
static{
try{
Log.i("JNI","try to load libmtkserial.so");
System.loadLibrary("mtkserial");
//加载本地库,也就是JNI生成的libxxx.so文件,下面再说。
}catch (UnsatisfiedLinkError ule){
Log.e("JNI","WARNING: Could not load libmtkserial.so");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_uart);
this.print();
}
-------------
这个就是native code在java中的接口了。添加完成后,project/build project(有时候需去掉build automaticaily才能选择。第一步的准备工作就此完成,很容易吧。
------------------
2.打开cmd并定位到刚刚新建的"helloworld"工程目录下的bin/classes目录,执行”javah -classpath . -jni mtk.abc.Uart“,没有意外的话,bin/classes目录下应该会产生一个mtk_abc_Uart.h文件。这个就是native code需要实现的函数了。
-jni mtk.abc.Uart: 指定class目录下的所要编译的类文件名。
如:\bin\classes\mtk\abc 下有定义的各种类文件!如jni像跟service接口,定义个一个bindservice.java。则\bin\classes\mtk\abc下就有个bindservice.class。
我们指定 -jni mtk.abc.bindservice就可以了。
-------------------
3.现在我们把刚刚得到的.h文件拷贝出,到工程目录下,并建立子目录jni(必须叫这个,否则后面会不能编译哦),并将.h文件拷贝到该目录下,并新建一个mtk_abc_Uart.c文件实现相关函数,代码如下:
#include <string.h>
02 #include "mtk_abc_Uart.h"
06 JNIEXPORT void JNICALL Java_mtk_abc_Uart_print
07 (JNIEnv *env, jobject thiz)
08 {
09
10 }
--------------------
接着还需要同一个目录下添加一个Android.mk文件,编译时候使用,具体内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mtkserial (最终so文件名是libmtkserial.so)
LOCAL_SRC_FILES := mtk_abc_Uart.c
include $(BUILD_SHARED_LIBRARY)
--------------
4.把hellworld工程包放入ndk工具目录里面
然后进入要编译的目录 \ndk(ndk的目录路径)\helloworld\
执行外面的工具 #: ..\ndk-build
可以了。会在libs\armeabi下生成 so文件。
把工程考出,然后编译烧录到板子上就可以了。
=====================================================
注意:
当出现错误信息:
make: /home/mx515/android-ndk-r9/samples/wireless/build/core/build-local.mk: No such file or directory
make: *** No rule to make target `/home/mx515/android-ndk-r9/samples/wireless/build/core/build-local.mk'. Stop.
-------------------
这时,我们就需要配置NDK的环境变量了。
vim /etc/bash.bashrc
export NDK=/home/mx515/android-ndk-r9
export PATH=$PATH:$NDK
-------------------------
# source /etc/bash.bashrc
# echo $PATH
:/home/mx515/android-ndk-r9
----
因此我们可以用 ndk的命令了。
root@ubuntu:/home/mx515/android-ndk-r9/samples/wireless# ndk-
ndk-build ndk-gdb ndk-gdb-py.cmd
ndk-build.cmd ndk-gdb-py ndk-stack
ndk-depends ndk-gdb.py ndk-which
===============================
我们在 需要产生 so文件的目录下 执行 ndk-build 就可以了。
如:
root@ubuntu:/home/mx515/android-ndk-r9/samples/wireless# ndk-build
Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion 4 in ./AndroidManifest.xml
Compile thumb : wireless <= nsk_rdev_wireless.c
SharedLibrary : libwireless.so
Install : libwireless.so => libs/armeabi/libwireless.so
分享到:
相关推荐
Android初涉JNI,从零打造你的第一个demo
Android 串口读写程序 JNI代码程序
android通过JNI访问硬件LED,包含应用程序APP,JNI代码,和LED驱动程序。
\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术\android 应用\JNI 技术
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。VM在Android平台里,扮演很重要的角色。 此外,在执行Java类的过程中,如果...
Android 2.3截屏JNI代码 Android 2.3截屏JNI代码 Android 2.3截屏JNI代码
Android使用JNI调用Python so解释器
在android中使用jni,在jni中调用jni里面的方法
android JNI,适合android开发人员,特别是驱动级别的开发人员
Android 通过JNI调用驱动代码实例
里面的内容很详细,下载了物超所值
非常简单的调用jni的示例程序,适合初学jni的,不懂的可以留言
Android中实现JNI的AES加解密源代码,绝对可以运行!
这是一个androidstudio环境下的jni的学习,里面包含了基本数据类型转化,引用数据类型转化,json格式数据类型的转化等
内容包含了jni的介绍和作用,jni在android系统中的具体应用,jni的编写和编译技术,hal的介绍,hal的编写技术
AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。
Android中调用JNI例子,对应博客http://blog.csdn.net/wwj_748/article/details/28300451
s5pv210_gpio驱动及其测试程序,包括了所有的io的操作,通过从设备号区分 在android2.3.1下jni调用~~包括完整的测试程序及使用过程 说明请查阅:http://blog.csdn.net/xdw1985829/article/details/7687917
Android 6.0 AS平台 JNI 实验