`
koliy
  • 浏览: 148648 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android初涉JNI

jni 
阅读更多
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_

    `serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C++或C)编写的代码进行交互。这个“Android--JNI-Device.zip”文件显然是一个关于Android平台上使用JNI与硬件设备...

    android通过JNI访问硬件LED

    在Android系统中,Java Native Interface (JNI) 是一个关键组件,允许Java代码与其他语言(如C++或C)编写的代码进行交互。本项目聚焦于如何利用JNI来访问硬件资源,特别是控制LED设备。以下是对这个主题的详细阐述...

    AndroidStudio加载jni

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下是必要的,比如优化性能、利用硬件特性、调用C/C++库或者与第三方库集成。Android ...

    Android 深入研究JNI详解

    ### Android深入研究JNI详解 #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式...

    Androidstudio调用jni的示例

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言写的代码进行交互。这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中...

    在Android中的jni里使用OpenGL ES和OpenCV渲染一幅图片

    在Android平台上,JNI(Java Native Interface)允许开发者使用C++代码来增强应用程序的功能,尤其是在处理图形和计算密集型任务时,如使用OpenGL ES和OpenCV。这个特定的项目旨在通过JNI调用来结合这两个强大的库...

    Androidapi.JNI.Net.Wifi

    在Android平台上,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++或C)交互。在Delphi XE FMX框架下,开发者可以利用JNI来访问Android系统的底层API,其中包括对网络功能的控制,比如...

    Android 2.3截屏JNI代码

    Android 2.3中的截屏功能可以通过JNI(Java Native Interface)来实现,这是一种在Java程序中调用本地(C/C++)代码的技术。JNI允许开发者利用Java的跨平台特性,同时利用C/C++的强大性能和低级别操作能力。在这个场景下...

    Android通过JNI调用.so动态库

    Android 通过 JNI 调用.so 动态库 Android 通过 JNI(Java Native Interface)调用.so 动态库是 Android 开发中的一种常用技术。JNI 是一种允许 Java 代码与 native 代码之间进行交互的接口。通过 JNI,我们可以在 ...

    android--JNI.zip_android_android 驱动_jni_jni android

    Android JNI,全称为Java Native Interface,是Android系统中用于连接Java层和原生代码(C/C++)的一个关键技术。JNI允许开发者在Android应用中调用本地方法,从而利用C和C++的强大性能和库来解决特定问题,比如优化...

    android studio 下jni学习

    在Android开发中,JNI常用于提升性能、调用系统库或者实现特定的硬件功能。本教程聚焦于在Android Studio环境下使用JNI进行学习,涵盖了基本数据类型转化、引用数据类型转化以及JSON格式数据类型的转化。 首先,...

    JniCallback.zip_Android jni_android_jni android_jni callback_jni

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件...

    Android下JNI和HAL技术

    在Android系统中,JNI扮演着非常重要的角色,因为它使得Java应用程序能够与底层Linux操作系统进行通信,进而访问和控制硬件以及执行性能要求较高的操作。 在Android系统中,Java的应用层和框架层主要使用Java语言...

    android-jni.zip_Android jni_android_jni_jni android

    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 NDK JNI 经典实例

    android下一个jni方式实现的音频播放

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。本示例着重于使用JNI在Android系统中实现音频的播放功能,这是一个深入理解Android NDK(Native ...

    安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,...

    Android13 增加 APP->JNI ->HAL

    在Android系统中,APP(应用程序)与硬件交互通常通过JNI(Java Native Interface)和HAL(Hardware Abstraction Layer)层来实现。随着Android13的发布,这个交互过程得到了进一步优化和增强,使得APP能更高效、...

Global site tag (gtag.js) - Google Analytics