android NDK的学习

标签: android ndk 学习 | 发表时间:2012-04-07 10:52 | 作者:sweetsnow24
出处:http://blog.csdn.net

一、NDK概述

NDK是基于系统原生的C/C++的开发,但是它不是一种主流,而是Android SDK开发的有益补充,因为NDK没有提供界面,也没有提供生命周期管理这一类环境。

1、NDK和JNI的关系

NDK是一系列的工具包,使用这些工具包能够让我们很方便的进行JNI的开发

2、什么是JNI

Java native interface,JNI就是java和C/C++相互调用的接口

JNI的定位在于C和Java的接口,而不是要你专注去做C的开发

JNI起源于JVM虚拟机(java虚拟机的作用屏蔽掉java语言的不同,让java能在不同的操作系统上运行)

3、JNI应用的场合

a、需要与操作系统底层交互的时候,因为操作系统的底层全部都是用C编写的代码,应用层如果需要调用操作系统底层的代码时,就需要用JNI。

b、对于运算速度有要求的时候,我们会把这一部分代码用C实现,再用Java去调用,这样子就可以获取更高的性能。如:音频视频的解码、Android上游戏的核心算法,大部分游戏都会把核心算法用C来实现然后在游戏引擎上层调用这些核心算法

C、已经有现成的C的代码实现的时候,如:openGl、ffmpeg

4、JNI的问题

a、JNI的代码比较复杂,使用不方便

b、容易导致内存的泄露,严重的时候可能导致虚拟机的崩溃(所以JNI开发需要慎重)

c、用JNI开发导致应用程序不能跨平台

d、JNI是由虚拟机来底层实现的,所以没有虚拟机就不能运行JNI

二、JNI第一个实例

用Java调用C的代码,C的代码必须要封装成动态链接库的形式,动态链接库在windows上的后缀名是dll,而在linux上是so

(所有java调用C的代码都用native标识)

1.在java代码用native标示C中需要被调用的方法
2.编译java源文件,形成class文件;
3.用javah -jni处理class文件形成头文件
4.创建C的工程,将生成的头文件拷贝过来
5.根据头文件里的方法声明写方法实现
6.到jdk的include目录下,将jni.h和jni-md.h两个文件拷贝到工程下;
7.编译生成dll或so
8.将生成的dll或so加入到环境变量中
9.在java源代码中通过system.loadlibrary加载dll或so,且dll名称后面 不需要后缀名
10.加载完毕之后,重新启动eclipse

作者:sweetsnow24 发表于2012-4-7 10:52:21 原文链接
阅读:13 评论:0 查看评论

相关 [android ndk 学习] 推荐:

android NDK的学习

- - CSDN博客推荐文章
NDK是基于系统原生的C/C++的开发,但是它不是一种主流,而是Android SDK开发的有益补充,因为NDK没有提供界面,也没有提供生命周期管理这一类环境. NDK是一系列的工具包,使用这些工具包能够让我们很方便的进行JNI的开发. Java native interface,JNI就是java和C/C++相互调用的接口.

基于 Android NDK 的学习之旅-----数据传输一(基本数据类型和数组传输)(附源码)

- UnderSn0w - 博客园-首页原创精华区
基于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输).        之前的一些文章都有涉及到上层和中间层的数据传输,简单来说,也就是参数和返回值的使用. 因为中间层要做的最多的也就是数据传输与转换,下面来介绍下这方面的知识.        数据传输可分为 基本数据类型传输 和 引用数据类型的传输 , 因为数组传输也比较特别(其实数组也是引用类型),所以这里也专门分出来讲讲.

Android NDK开发Crash错误定位

- - 极客521 | 极客521
在Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误). 其中 未捕获的异常根据logcat打印的堆栈信息很容易定位错误. ANR错误也好查,Android规定,应用与用户进行交互时,如果5秒内没有响应用户的操作,则会引发ANR错误,并弹出一个系统提示框,让用户选择继续等待或立即关闭程序.

Android 之 JNI 开发 详解 - NDK从入门到精通

- - CSDN博客推荐文章
-- 第一个JNI示例程序下载 :  GitHub - https://github.com/han1202012/NDKHelloworld.git . JNI概念 : Java本地接口, Java Native Interface, 它是一个 协议, 该协议用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码;.

Android NDK开发扫盲及最新CMake的编译使用 - 简书

- -
本篇文章旨在简介 Android 中. NDK是什么以及重点讲解最新 Android Studio 编译工具. NDK之前还是首推 Android 官方. 官方文档分别从以下几个方面介绍了. ABI是什么以及不同 CPU 指令集支持哪些. 如何使用您自己及其他预建的库. 所以建议先浏览一遍文档,或者看完本篇文章再回头看一遍文档.

android学习路线图

- Enlizh - Starming星光社最新更新
      首先表扬一下iteye,本来想把这些文章发表在CSDN(虽然都是一家的). 但发现CSDN博客功能用户体验做的不是那么友好,图片压缩的太厉害. 好好的图片上传之后已经面目全非. 只好又再iteye注册了个相同的博客,当然内容也相同. 做android开发有一段时间了,一直想挤出点时间,写点什么.

Android学习之路——7.Service

- - ITeye博客
这两天又学习了Android四大组件之一的Service. (1)Service不是一个单独的Process,除非特别指派了,也不是一个Thread,但也不是运行在Main Thread中. (3)Service的生命周期:. 调用的Context.startService()   oncreate() --> onStartCommand ()--> Service is running --> The service is stopped by its or a client--> onDestroy() --> Service is shut down .

Android学习笔记(六)SQLite

- - 博客园_首页
SQLite是一个极轻量型的数据库. 它在提供了和大型数据库相当的功能,还具有轻便、跨平台等优点,SQLite使用非常方便,并不需要我们像常规数据库(SQLServer,Mysql等)那样进行安装,在Android的JDK中,其实是已经包含了SQLite这个数据库的核心. 当然我们必须要强调一点,SQLite并不是只针对Android的,其实它还可以用在别的很多地方.

Android Native 代码开发学习笔记

- iDesperadO - WindStorm
本文提供排版更佳的PDF版本下载. JNI,全称Java Native Interface,是用于让运行在JVM中的Java代码和运行在JVM外的Native代码(主要是C或者C++)沟通的桥梁. 代码编写者即可以使用JNI从Java的程序中调用Native代码,又可以从Native程序中调用Java代码.

Android学习笔记之Gallery(2)

- - CSDN博客推荐文章
Toast.makeText(GalleryActivity.this, "点击了第"+arg2+"张图片", Toast.LENGTH_LONG).show();. // 给ImageView设置资源. // 设置布局 图片120*80. 创建一个新的XML文件在 res/values/目录下 attrs.xml命名.