andorid JNI 入门详解

转载 2015年07月07日 11:54:09

Android NDK开发入门实例

        写这个,目的就是记录一下我自己的NDK是怎么入门的。便于以后查看,而不会忘了又用搜索引擎一顿乱搜。然后希望能够帮助刚学的人入门。先转一段别人说的话:

“NDK全称:Native Development Kit。

1、NDK是一系列工具的集合。

* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

2、NDK提供了一份稳定、功能有限的API头文件声明。

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。”

在深入理解之前,暂且就把NDK当成是一种工具,这种工具使得JAVA能够使用C/C++编译出的so包。并将此包一起打入apk包中。

下面开始正式入门:

一、开发环境搭建(以Windows平台下为例,Linux平台下类似)

1.      下载NDK压缩包,至于从哪里下载借助搜索引擎吧。

2.       解压NDK压缩包,配置环境变量。将解压的地址写入环境变量PATH中

3.       在命令提示符下输入ndk-build如果弹出如下的错误,而不是说ndk-build not found,就说明ndk环境已经安装成功了。特别提示一下,搜索引擎中会告诉一些早期的NDK版本的使用,是在命令提示符下输入build/host-setup.sh;但是NDK经过更新,这个文件已经没有了。只需要输入ndk-build就可以了。

Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
/home/braincol/workspace/android/android-ndk-r5/build/core/build-local.mk:85: *** Android NDK: Aborting    .  Stop.

4.       cygwin的安装,至于如何安装,从哪里安装也去借助搜索引擎吧。在Cygwin安装过程中,可能比较慢,必须安装的项目有make和gcc;建议安装下面几个包:autoconf2.1 ,automake1.10 ,binutils ,gcc-core ,gcc4-core ,gdb ,pcre ,pcre-devel,都安装最新版本。安装完毕后,运行Cygwin,输入"make -v"和"gcc -v"来检测是否安装成功;make版本要在3.81以上。

5.       以上任务结束后,就表示基本的开发环境搭建完成了。

二、编写JAVA代码

1.       建立一个android的工程HelloJni,创建MainActivity.java文件。

MainActivity.java:

package com.my.hellojni;

import android.app.Activity;

public class MainActivity extends Activity {
private TextView display; 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.display);
exe();
}

public void exe(){
Utils utils = new Utils();
display.setText(utils.stringFromJNI()
+" 10+5="+String.valueOf(utils.add(10, 20))
+" 10-5="+String.valueOf(utils.sub(10, 5))
+" 10*5="+String.valueOf(utils.multi(10, 5))
+" 10/5="+String.valueOf(utils.div(10, 5)));
}

}


Uitls.java


package com.my.hellojni;
public class Utils {
public native String stringFromJNI();
public native double add(double a, double b);
public native double sub(double a, double b);
public native double multi(double a, double b);
public native double div(double a, double b);
static {
System.loadLibrary("hello-jni");
}
}


编译一下工程 (即:运行一下工程,会报错,不用管)

  运行命令   开始--》运行----》cmd

找到工作空间下该项目 E:\myroot\bwandroidspace\HelloJni>

输入 javah -classpath bin/classes -d jni com.my.hellojni.Uitils




这时在工程里就会生成jni文件夹,里面有.h文件

打开.h文件  周到对应的方法

根据对应的方法写.C文件



写好.C文件后在配置的ndk线面找到  E:\android-ndk-r7\samples\hello-jni\jni

下的 Android.mk文件复制到你工程中的jni文件夹中

打开Android.mk文件


更改对应的LOCAL_MODULE    和   LOCAL_SRC_FILS(次例子中不用更改,因为引用类库名也是hello-jni)

改好后

打开Cygwin  找到对应的路径   cygdrive/e/myroot/bwandroidspace/HelloJni

输入 :


这事重新打apk包就成功了!


JNI入门教程之HelloWorld篇

   本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第一个HelloWorld程序。     Java Native Interface(JNI)是Java语言...
  • mingjava
  • mingjava
  • 2004年11月14日 08:59
  • 84740

JNI的环境配置与基础代码实现(AS)

/** * @author Hiushen * @date 2016/7/29 */JNI了解Java Native Interface定义本地调用接口,可以说是为了对java层屏蔽具体的虚拟机...
  • Linux_sheng
  • Linux_sheng
  • 2016年07月29日 17:19
  • 373

Java中JNI的使用详解第一篇:HelloWorld

今天开始研究JNI技术,首先还是老套路,输出一个HelloWorld:具体流程如下:在Java中定义一个方法,在C++中实现这个方法,在方法内部输出“Hello World",然后再回到Java中进行...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2013年12月21日 13:33
  • 81239

零基础 JNI 入门 + 进阶

JNI入门 简介 文档:Java Native Interface Specification http://docs.oracle.com/javase/6/docs/technotes/gui...
  • data_backups
  • data_backups
  • 2015年09月01日 14:18
  • 841

Android驱动(一)硬件访问服务学习之(一)Android通过JNI访问硬件

首先来看一下android的系统框图。google后期加入一层HAL层,硬件访问层 1.1  android访问硬件驱动的两种方式 (1)jni:多个设备同时访问,都可以来open吗? (2)...
  • fengyuwuzu0519
  • fengyuwuzu0519
  • 2017年02月15日 22:21
  • 839

搭建Eclipse+ADT+Android SDK 安卓开发环境+创建andorid project

作为java初学者最近接触了下andorid,于是乎,自己在网上搜集资料自己在eclipse上搭建andorid环境,下面是本人自己的总结,希望能帮助初学者减少不必要的麻烦(ps:我是在Window ...
  • wyf2017
  • wyf2017
  • 2017年10月27日 09:24
  • 146

andorid JNI开发总结

1。编写JniTest.java文件,里面定义出来native 函数,也就是需要c实现的函数2。采用javah xxa/xxb/xxc/JniTest.java,可以生成对应的.h文件,生成的函数是j...
  • hxxiaopei
  • hxxiaopei
  • 2010年06月08日 17:30
  • 1250

Android studio jni 入门helloworld

最近忙着面试 ,基本上每个面试官都会问一句 会不会jni?会不会ndk?像我这么厉害的c和c++,难道真的要荒废了吗,说了你会别人又不听,那么 我就得写个jni来试试了,说了这么多,要不是一本正经的胡...
  • salute_li
  • salute_li
  • 2016年09月08日 11:15
  • 1090

最简单的JNI入门

JNI helloworld级简单入门,so easy.
  • m0_38032942
  • m0_38032942
  • 2018年02月03日 11:34
  • 38

Android Studio JNI开发入门教程

概述 在Andorid Studio不支持JNI开发之前大家一般都是使用Eclipse开发JNI,各种配置让人觉得很蛋疼。从Andorid Studio支持JNI开发后,让我们开发JNI变的如此简单...
  • easyer2012
  • easyer2012
  • 2016年08月29日 14:38
  • 8913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:andorid JNI 入门详解
举报原因:
原因补充:

(最多只允许输入30个字)