Android--Ndk编程之JNI(一)

Android--Ndk编程之JNI

在前面的章节中讲到了opencv在安卓上的环境配置https://blog.csdn.net/sm16111/article/details/81839401,那么在vs中用opencv和在as(Android studio)中用opencv的调用方法不同,毕竟前者是c++/c,后者是java。那么如何在安卓端也能用c或c++来编写呢?

jni就可以的实现这个功能。

一、JNI(Java Native Interface)

       1、什么是JNI:

              JNI(Java Native Interface):java本地开发接口

              JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)

              外部的c/c++代码也可以调用java代码

       2、为什么使用JNI

              效率上 C/C++是本地语言,比java更高效

              代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码

              java反编译比C语言容易,一般加密算法都是用C语言编写,不容易被反编译

       3、Java基本数据类型与C语言基本数据类型的对应

              

       3、引用类型对应

              

       4、堆内存和栈内存的概念

              栈内存:系统自动分配和释放,

                      保存全局、静态、局部变量,

                      在站上分配内存叫静态分配,

                      大小一般是固定的

              堆内存:程序员手动分配(malloc/new)和释放(free/java不用手动释放,由GC回收),

                      在堆上分配内存叫动态分配,

                      一般硬件内存有多大堆内存就有多大

 

二、交叉编译

       1、交叉编译的概念

          交叉编译即在一个平台,编译出另一个平台能够执行的二进制代码

          主流平台有: Windows、 Mac os、 Linux

          主流处理器: x86、 arm、 mips

       2、交叉编译的原理

          即在一个平台上,模拟其他平台的特性

          编译的流程: 源代码-->编译-->链接-->可执行程序

       3、交叉编译的工具链

          多个工具的集合,一个工具使用完后接着调用下一个工具

       4、常见的交叉编译工具

          NDK(Native Development Kit): 开发JNI必备工具,就是模拟其他平台特性类编译代码的工具

          CDT(C/C++ Development Tools): 是Eclipse开发C语言的一个插件,高亮显示C语言的语法

          Cygwin: 一个Windows平台的Unix模拟器(可以参考之前博客Cygwin简介及使用

       5、NDK的目录结构(可以在Google官网下载NDK开发工具,需要FQ)

          docs: 帮助文档

          build/tools:linux的批处理文件

          platforms:编译c代码需要使用的头文件和类库

          prebuilt:预编译使用的二进制可执行文件

          sample:jni的使用例子

          source:ndk的源码

          toolchains:工具链

          ndk-build.cmd:编译打包c代码的一个指令,需要配置系统环境变量

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

JNI开发代码 会在下一篇博客写出~~~~~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码敌敌畏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值