前言—JNI技术简介

JNI是Java Native Interface的缩写,即“Java本地调用”,它是Java世界和Native世界的中介桥梁。其中Native世界一般指C/C++的世界。众所周知,Java是一种跨平台的语言,即Java编写的应用与平台无关。但是,计算机的世界在Java出现之前已经发展了很久,有很多优秀健壮的代码可以复用。比如Linux下的好多驱动模块、文件系统等。Java若去重新实现这些功能,未免费力不讨好,落下重复造轮子的名声。通过JNI技术,使用这些Native的模块,便成了一个折中的办法。同时,Java的世界依靠虚拟机构建,而虚拟机是native语言实现,并且虚拟机运行在具体的平台上,所以虚拟机本身是无法做到平台无关。通过JNI技术,可能做到在Java层的平台无关,即在Java层,底层的细节完全被屏蔽掉了。综合来讲,JNI技术一直支撑这Java世界,只不过我们平时接触的较少。

在Android的世界里,不允许纯C/C++的程序出现,但是它支持JNI,通过JNI来实现java和C/C++的交互。因此,JNI对于需要接触到Android源码、底层驱动、图形图像等领域的开发者来讲异常重要。

在Android中,Native语言实现的代码最终要编译成*.so动态库的方式,供java层调用,目前有两种途径实现。

两种编译环境

  • 源码编译环境:Android平台提供基于Make的编译环境,为App正确的编写Android.mk即可使用该编译环境,该环境需要通过git从Android的官方的源码平台获取源码并编译,得到环境。具体见:http://source.android.com/index.html
  • 基于Android NDK的编译环境:NDK的全称叫做Native Development Kit。是google提供给我们用于本地编译JNI的工具。事实上,NDK和源码编译环境一样,都是使用Android的编译系统,通过Android.mk来控制编译。本文重点介绍这种方式。

NDK编译环境

在Mac下,配置NDK的环境十分简便,你只需要去官网下载ndk包,前提是你已经安装好ndk需要的工具,一般你如果安装过xcode,基本的环境都会有。解压缩到任意一个目录下,把该目录加到你的PATH中即可。比如我的:

在~/.bash_profile中把路径加入PATH,如果没有,可以创建一个.bash_profile,在最后加入下面语句。

1
export PATH=$PATH:/Users/youpath/android-ndk-r8e

重启bash,即可使用ndk-build

1 2
HaibotekiMacBook-Air:jni haibowu$ source ~/.bash_profile 
HaibotekiMacBook-Air:jni haibowu$ ndk-build 

运行Hello-jni

ndk包解压缩之后,自带一些jni的例子,下面我们就来编译运行下hello-jni,感觉下jni的世界。该demo的路径在ndk安装路径的sample目录下。进入该路径,执行下列命令:

1 2 3 4 5 6
HaibotekiMacBook-Air:jni haibowu$ ndk-build Gdbserver      : 
[arm-linux-androideabi-4.6] libs/armeabi/gdbserver Gdbsetup       : 
libs/armeabi/gdb.setup Compile thumb  : 
hello-jni <= hello-jni.c SharedLibrary  : 
libhello-jni.so Install        : 
libhello-jni.so => libs/armeabi/libhello-jni.so

当系统提示生成*.so文件时,即代表编译成功。可以通过eclipse或者intellij idea导入该工程,运行查看效果。

Android JNI MAC OS环境配置的更多相关文章

  1. Cordova 系列之Mac OS 环境配置

    1.从AppStore 安装xcode 2.安装node.js环境 http://nodejs.org/ 3.使用命令行安装 cordova 命令行帮助:http://cordova.apache.o ...

  2. Mac OS环境下媒体文件分割工具mediafilesegmenter的简单使用(生成M3U8 TS文件)

    mediafilesegmenter是苹果开发的一款用于分割媒体文件的工具,其功能与mediastreamsegmenter相似,但操作更简单. * 具体可以对比博客中的另一篇简介<Mac OS ...

  3. 在Mac OS环境下安装MySQL服务

    在Mac OS环境下安装MySQL服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前介绍过window环境下安装mysql服务,以及在Linux环境下安装mysql服务,今 ...

  4. 桂电在linux、Mac OS环境下使用出校器(支持2.14)

    这是guetsec学长在三院科协学长所抓包逆向分析1.81版出校器的基础上,用python写的一款为Mac和linux环境开发的出校器. 最后我做了略微修改,支持暂时最新版本2.14.下面有直接从源码 ...

  5. Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置

    Oracle 12cR1 RAC 在VMware Workstation上安装(上)-OS环境配置 1.1  整体规划部分 1.1.1  所需软件介绍 Oracle RAC不支持异构平台.在同一个集群 ...

  6. Google Android Studio Kotlin 开发环境配置

    Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...

  7. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  8. Mac OS环境变量配置(Android Studio之Gradle)

    以gradle环境变量配置为例: Android Studio 自带的gradle路径为: /Applications/Android\ Studio.app/Contents/gradle/grad ...

  9. 在Mac OS上配置Android开发环境

    1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...

随机推荐

  1. 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式

    导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...

  2. 1284-Primitive Roots,学信安的路过

                                                      Primitive Roots 此题通过率如此之高,料想不会很难,但是再简单小菜还是不会.. 嗯,下 ...

  3. Spring Boot Reactive Streams

    1 响应式编程规范 目标:provide a standard for asynchronous stream processing with non-blocking backpressure ht ...

  4. hud 2073

    #include<stdio.h> #include<math.h> int main() { int i,j,k,n,m,t; double a]; a; for;i++) ...

  5. 亚瑟王(bzoj 4008)

    Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...

  6. 洛谷P2057 善意的投票

    题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...

  7. python学习之 -- 数据序列化

    json / pickle 数据序列化 序列化定义:把变量从内存中变成可存储或传输的过程称为序列化.反序列化:把变量内容从序列化的对象重新读到内存里称为反序列胡. 序列化模块之--pickle使用注意 ...

  8. HDU 6396 贪心+优先队列+读入挂

    Swordsman Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  9. eclipse 修改Java代码 不用重新启动tomcat

    例子: 1.在tomcat server.xml文件配置加上这句话: <Context debug="0" docBase="C:\Users\admin\Desk ...

  10. The Unique MST-POJ1679(次小生成树)

    http://poj.org/problem?id=1679 次小生成树 #include<stdio.h> #include<string.h> #include<st ...