Android Jni开发之基础概念介绍

一、ndk是什么?
帮助开发c/c++代码的工具。
二、什么场景使用?
cpu的运算、图形图像的处理等等。
常见几种情况:

1、代码保护:由于apk的java层代码很容易被反编译,而c/c++库反汇编难度较大。
2、在NDK中调用第三方c/c++库,因为大部分的开源库都是用c/c++代码写的。
3、便于移植,用c/c++写的库可以方便在其他的嵌入式平台上再次使用。

三、什么是交叉编译?
在一个平台上生成另一个平台上可执行的代码。
手机平台是基于arm平台,电脑平台是基于x86平台,机器码指令集不一样。
四、jni是什么?
Java Native Interface(JNI)标准成为java平台的一部分,它允许java代码和其他语言的代码进行交互。
jni的实现流程:

                                

注:有的人有时候会混淆这两者的概念, JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性。
NDK是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。它可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

五、什么是链接库?
(1)静态链接库:代码所依赖的文件代码都编译进去,编译后的文件特别大,一般后缀名.a。
(2)动态链接库:编译自己的代码,运行的时候动态加载所需要的资源。编译后的文件不是很大,一般是.so文件结尾。

六、make文件介绍?
命令在ndk开发包目录中可以找到,详情http://developer.android.com/ndk/guides/android_mk.html

七、ndk开发包目录doc介绍?
ndk -> doc 查看,可以从中学习,如图

       

八、armeabi armeabi-v7a mips x86

首先要明白ABI的概念:
ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,我们能用到的ABI 也就四种  armeabi armeabi-v7a x86 和mips ,前两者是最常见的。

其次这4个编译选项的含义:
1.‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
2.‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
3.‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集.
4.mips — 支持应用二进制接口

注:

1、APP_ABI 赋值,就是为了交叉编译生成相应芯片可执行的指令集。直观的看就是如果你将 APP_ABI := armeabi armeabi-v7a mips x86  那么在你的android工程下边的 libs 里边会出现 armeabi armeabi-v7a mips x86 这四个目录下会分别生成 4个.so文件。程序在Android手机运行时,根据手机自身CPU芯片不同,去选择调用相应的.so文件。
2、选择的平台越多,so库也越多,打包的apk体积也越大。
3、主要3个平台,x86,arm,mips,arm又分为是否支持硬件浮点运算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值