前些日子做了个Android项目, 引擎层C, 准备写这个系类的文章,借此跟朋友来分享下我NDK开放的经验以及自己知识的总结和备忘。希望能给需要这方面资料的朋友提供一定的帮助。

主要涉及到:

  环境的搭建

Android.mk 文件的配置

HelloWorld

NDK 打印信息

JNI 数据类型

Java 调用 C

C 调用 Java

数据的传输(基本数据类型的传输,引用数据类型的传输,数组的传输)

C中新建Java对象

Java方法在C中的映射(包括了签名的使用)

C中如何调用Java的方法(包括了静态的和非静态的)

JNI中资源的释放等等

先详细介绍下NDK, JNI

What isthe NDK?

Google Say

The Android NDK is a toolset that lets youembed components that make use of native code in your Android applications.

Android applications run in the Dalvikvirtual machine. The NDK allows you to implement parts of your applicationsusing native-code languages such as C and C++. This can provide benefits to certain classes of applications, in the form of reuse ofexisting code and in some cases increased speed.

Android NDK是一个工具集合,让你嵌入组件,利用原生代码在你的Android Application

Android应用在虚拟机上执行.NDK允许你的应用通过原生代码如CC++去实现.这将给某些应用带来好处,这种方式能代码重用,并且在某些情况下提高执行速度】(个人翻译,翻译不准确的请指出)

NDK全称:Native Development Kit

Android NDK 是配合 Android SDK 的工具,Google 推出NDK的目的不是为了取代Android SDK,当然也不可能完全取代,它只是作为AndroidSDK 的一个补充。用来编译应用的原生代码。

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

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

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

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

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

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

What is the JNI?

Sun say

THE Java NativeInterface (JNI) is a powerful feature of the Java platform.

Applications that usethe JNI can incorporate native code written in programming languages such as Cand C++, as well as code written in the Java programming language. The JNIallows programmers to take advantage of the power of the Java platform, withouthaving to abandon their investments in legacy code. Because the JNI is a partof the Java platform, programmers can address interoperability issues once, andexpect their solution to work with all implementations of the Java platform.

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,JavaNative Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

基于 Android NDK 的学习之旅-----序言相关推荐

  1. 基于 Android NDK 的学习之旅-----资源释放

    基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...

  2. 基于 Android NDK 的学习之旅----- C调用Java

    2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...

  3. 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码)

    基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1.  String ...

  4. 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

    原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据 ...

  5. 基于 Android NDK 的学习之旅-----Java 调用C(附源码)

    基于 Android NDK 的学习之旅-----Java 调用C 随便谈谈为什么要Java调用C 吧: 我认为: 1.  有些公司开发Android项目的时候, 许多组件功能可能是C中已经实现了,所 ...

  6. 基于 Android NDK 的学习之旅-----环境搭建

    工欲善其事 必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发环境搭建 Android开发环境搭建不是重点,相信看此文章的 ...

  7. 基于 Android NDK 的学习之旅-----JNI 数据类型

    经典老套流程,学编程语言东西,先学它最基础的数据类型,JNI也是如此.JNI 定义了一系列基本数据类型和引用数据类型与java想对应. 1.基本数据类型 下面一张表是描述了 Java 基本数据类型和J ...

  8. Android热修复学习之旅——HotFix完全解析

    在上一篇博客 Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于An ...

  9. 基于android的交流平台,基于Android的移动学习交流平台的设计与实现

    摘要: 随着移动互联网技术的不断发展,智能手机的不断普及,现在越来越多的人通过手机等智能设备来进行学习和交流.为了满足教师和学生实时的沟通交流,提高学生的学习兴趣和效率,本文设计了基于Android的 ...

最新文章

  1. Xilinx zynq的资料获取总结
  2. HP小型机的信息的命令集(一)
  3. Linux内核分析作业第二周
  4. Redis 内存压缩实战
  5. 成功解决TypeError: take() got an unexpected keyword argument ‘fill_value‘
  6. python环境管理命令_conda管理Python环境
  7. 催收评分卡(一)催收评分卡介绍
  8. python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别
  9. C程序设计案例(矩形法求定积分问题)
  10. 整数规划---指派问题
  11. android有道翻译api,有道智云自然翻译服务API
  12. Java中修饰变量和方法的关键字总结分析
  13. 建立一个学生的简单信息表 c语言,简单的学生信息表
  14. AtCoder Beginner Contest 248 E - K-colinear Line「计算几何判三点共线」
  15. Hyperledger caliper 安装记录
  16. android朋友圈发文字换行,微信朋友圈全文展开 朋友圈文字怎么换行朋友圈发多行文字...
  17. using index
  18. [高数][高昆轮][高等数学上][第一章-函数与极限]04.无穷小与无穷大
  19. 【测试方法】黑盒测试、灰盒测试、白盒测试这些你确定都会了吗?
  20. 我,28岁程序员,没想到今年找工作这么难

热门文章

  1. linux查看命令类型,查看linux命令类型
  2. spring mvc 接收页面数据
  3. spring mvc 入门DispatcherServlet转发
  4. (四)ElasticSearch之数据
  5. (JAVA)List
  6. 扩展插件_Adobe扩展工具插件系列
  7. 【C语言进阶深度学习记录】三 浮点数(float) 在内存中的表示方法
  8. 【剑指offer - C++/Java】8、跳台阶
  9. flex布局应用与踩坑
  10. AutoLayout--masonry使用