基于 Android NDK 的学习之旅-----序言

前些日子做了个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++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python开发中遇到的难题_初学者在Python开发中常见的问题(上)

前言:这篇文章主要介绍了Python程序员代码编写时应该避免的17个“坑”,也是Python程序员代码编写时应该避免的17个问题,如果有知友想要了解Python,文末有黑马程序员的Python免费教程,需要的知友可以参考一下~如果喜欢请点赞哈一、不要使用可变…

如何使用网上下载的arcgis工具箱,报错汇总

执行网格表达式错误 解决方法 更改环境变量里的并行处理设置成0即可

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

工欲善其事 必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建。 1、Android 开发环境搭建 Android开发环境搭建不是重点,相信看此文章的很多人都已经搭建成功,这里随便概述性的说说。 1) 下载 JDK 2) 下载 Eclipse 3) 下载 Android…

arcgis将小于0的数值设置成0.01

原始范围 打开栅格计算器 主要利用的是栅格计算器的con条件函数 con用法 con(条件,满足条件的部分赋值赋值,不满足条件的部分赋值) 运行完的范围 0.0008<0.01所以显示0.0008

vivo怎么调时间_卡西欧手表怎么调时间 怎么评估卡西欧手表的价格档次

在以前的手表是戴在手上方便看时间的&#xff0c;但是随着科技的发展&#xff0c;手表也越来越智能&#xff0c;很多的手表都是多功能的&#xff0c;但是我们的知道&#xff0c;一样东西越好用就会显得它的复杂性越高&#xff0c;慢慢着就会使很多人都不会使用&#xff0c;就拿…

PJSIP学习笔记——PJSUA层发起呼叫的主要流程

在上一篇学习笔记 从simple_pjsua.c示例程序了解PJSUA-LIB的基本使用流程中&#xff0c;使用了PJSUA层的 pjsua_call_make_call来发起一个呼叫&#xff0c;那么这个发起呼叫的流程是怎样的呢&#xff1f;先来看看这个函数&#xff1a; [cpp] view plaincopy/* * Make outgoin…

Jquery Money 验证,转换成千分位

function Convert(amtStr) {var a, renum ;var j 0;var a1 , a2 , a3 ;var tes /^-/;a amtStr.replace(/,/g, "");a a.replace(/[^-\.,0-9]/g, ""); //删除无效字符a a.replace(/(^\s*)|(\s*$)/g, ""); //trimif (tes.test(a)) a1 -;e…

离职证明电子版_离职证明中说劳动者因违纪离职的怎么办?

作者&#xff1a;吕武茂 衣尚民 范涛1.律师有话说&#xff1a;根据法律规定&#xff0c;解除或终止劳动合同后&#xff0c;给员工开离职证明是企业的法定义务&#xff0c;离职证明内容仅包括&#xff1a;劳动合同期限、解除或者终止劳动合同的日期、工作岗位、在本单位的工作年…

sip消息概念(一)

SIP 也是类似 HTTP 的一个协议集合&#xff0c;在网上搜索了一下相关的信息&#xff0c;摘录如下&#xff1a; SIP消息的第一行包含消息的类型和所使用的SIP版本&#xff08;2.0&#xff09;。在请求中&#xff0c;这一行还包含一个叫做SIP URI的地址。这代表消息的目的地。 这…

python特征递归消除

一、基础知识了解 特征递归消除官方给了两者方法 1.RFE 2.RFECV 一.RFE 官方解释 链接&#xff1a;sklearn.feature_selection.RFE — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?highligh…

SIP 中的Dialog,call,session 和 transaction .

如果你对Sip协议中Call, Dialog, Transaction和Message之间的关系感觉到迷惑,那么,那么我可以告诉你,你并不孤单,因为大多数初学者对于这些名词之间的关系都会感到疑惑.Messages(消息) 消息是在服务器和客户端之间交换的独立文本, 有两种类型的消息,分别是请求(Requests)和响应…

JS 获取当前日期时间(兼容IE FF)

以前在页面中获得当前时间的方法如下&#xff1a; function SelectTodayClient() {var d new Date();var taday d.getYear() "-" (d.getMonth() 1) "-" d.getDate(); alert($(taday);} IE运行正常&#xff0c;FF运行如下&#xff1a; 这…

再次携号转网_潍坊一小伙欲携号转网屡被拒 联通客服:试运营状态不支持携转...

携号转网&#xff0c;也就是在手机号码保持不变的情况下&#xff0c;可以更换运营商&#xff0c;潍坊市民夏先生给记者打来电话说&#xff0c;他有一张联通的电话卡&#xff0c;想要办理携号转网业务&#xff0c;十几天过去了&#xff0c;号没转出去&#xff0c;还生了一肚子气…

机器学习参数优化数据改用所有数据还是训练集

参数优化过程中所用数据应该用训练集 &#xff08;占所有数据的一部分&#xff09;&#xff0c;如果用所有数据会导致模型评估的所有结果都偏高&#xff0c;因为这些评估都涉及测试集&#xff0c;如果用所有数据进行训练&#xff0c;导致测试集预测结果大部分都正确&#xff0c…

《当程序员的那些狗日日子》(三十六)无名的配角

人事助理姐姐帮我办理完续签手续后&#xff0c;我也回到原来的工作状态&#xff0c;继续处理手上的工作。 之前洪协助我完成了客服后台的一些新功能&#xff0c;但是在投入使用后&#xff0c;我发现这些功能还是存在较大的问题&#xff0c;本来我以为就要离开公司了&#xff0c…

8个树莓派超级计算机_6 个可以尝试的树莓派教程

这些树莓派项目均旨在简化你的生活并提高生产力。-- Lauren Pritchett(作者)没有什么比体验树莓派创作结果更令人兴奋了。经过数小时的编程、测试和徒手构建&#xff0c;你的项目终于开始成形&#xff0c;你不禁大喊 “哇哦&#xff01;”树莓派可以带给日常生活的可能性让我着…

SIP应答消息状态码与功能

SIP应答消息状态码与功能 类型 状态码 状态说明 临时应答(1XX) 100 Trying 正在处理中 180 Ringing 振铃 181 call being forwarder 呼叫正在前向 182 queue 排队 181* session progress 会话进行 会话成功(2XX) 200 OK 会话成功 重定向(3XX) 300 multiple 多重选择 301 moved …

sklearn的逻辑回归

官方逻辑回归链接 sklearn.linear_model.LogisticRegression — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression 一&#xff0c;参数说明 1.1…

Ext scope 学习

首先&#xff0c;用一句话来概括scope的作用&#xff1a;scope就是用来解决 js 中 this 的指向问题。 下面进行讨论&#xff1a; 1、 关于JavaScript中this的使用&#xff0c;这是一个由来已久的问题了。我们这里就不介绍它的发展历史了&#xff0c;只结合具体的例子&#xff…