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
分享到:
相关推荐
`serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C++或C)编写的代码进行交互。这个“Android--JNI-Device.zip”文件显然是一个关于Android平台上使用JNI与硬件设备...
在Android系统中,Java Native Interface (JNI) 是一个关键组件,允许Java代码与其他语言(如C++或C)编写的代码进行交互。本项目聚焦于如何利用JNI来访问硬件资源,特别是控制LED设备。以下是对这个主题的详细阐述...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下是必要的,比如优化性能、利用硬件特性、调用C/C++库或者与第三方库集成。Android ...
### Android深入研究JNI详解 #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言写的代码进行交互。这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中...
在Android平台上,JNI(Java Native Interface)允许开发者使用C++代码来增强应用程序的功能,尤其是在处理图形和计算密集型任务时,如使用OpenGL ES和OpenCV。这个特定的项目旨在通过JNI调用来结合这两个强大的库...
在Android平台上,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++或C)交互。在Delphi XE FMX框架下,开发者可以利用JNI来访问Android系统的底层API,其中包括对网络功能的控制,比如...
Android 2.3中的截屏功能可以通过JNI(Java Native Interface)来实现,这是一种在Java程序中调用本地(C/C++)代码的技术。JNI允许开发者利用Java的跨平台特性,同时利用C/C++的强大性能和低级别操作能力。在这个场景下...
Android 通过 JNI 调用.so 动态库 Android 通过 JNI(Java Native Interface)调用.so 动态库是 Android 开发中的一种常用技术。JNI 是一种允许 Java 代码与 native 代码之间进行交互的接口。通过 JNI,我们可以在 ...
Android JNI,全称为Java Native Interface,是Android系统中用于连接Java层和原生代码(C/C++)的一个关键技术。JNI允许开发者在Android应用中调用本地方法,从而利用C和C++的强大性能和库来解决特定问题,比如优化...
在Android开发中,JNI常用于提升性能、调用系统库或者实现特定的硬件功能。本教程聚焦于在Android Studio环境下使用JNI进行学习,涵盖了基本数据类型转化、引用数据类型转化以及JSON格式数据类型的转化。 首先,...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件...
在Android系统中,JNI扮演着非常重要的角色,因为它使得Java应用程序能够与底层Linux操作系统进行通信,进而访问和控制硬件以及执行性能要求较高的操作。 在Android系统中,Java的应用层和框架层主要使用Java语言...
Android JNI(Java Native Interface)是Android系统中一个重要的技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中扮演着不可或缺的角色,尤其是在进行性能优化、利用硬件加速、调用C/C++库或者...
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。本示例着重于使用JNI在Android系统中实现音频的播放功能,这是一个深入理解Android NDK(Native ...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,...
在Android系统中,APP(应用程序)与硬件交互通常通过JNI(Java Native Interface)和HAL(Hardware Abstraction Layer)层来实现。随着Android13的发布,这个交互过程得到了进一步优化和增强,使得APP能更高效、...