一、什么是NDK?

Native Development Kit (本地开发工具包);

NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk;

作用是让java代码调用C和C++代码;

二、什么是JNI?

Java Native Interface (java 本地化接口);

是java调用C/C++的一套编码规范;

NDK是基于JNI编码规范进行编写的;

三、为什么使用NDK?

安全(代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反编译难度较大);

硬件方面: java不能直接访问硬件  图像处理方面C和C++比java处理的速度和性能都要好很多;

便于移植:可以跨语言、跨平台;

借助了C/C++优秀第三方开源库,比如openGL openCV;

四、NDK环境的搭建

1.环境搭建:

(1)电脑环境的熟悉(是64位还是32位的);

(2)安装对应的对应的JDK---http://www.oracle.com/technetwork/java/javase/downloads/index.html;

(3)安装Android Studio

(4)下载Cmake LLDB(支持同步调试和调用运行的插件)  NDK;

2.项目创建:

(1)新建项目勾选include c++ support的支持;

(2)异常处理的支持 exception support(支持异常处理);

(3)运行时类型信息的支持  runtime  type information support

生成c++类的描述:

CMakeLists.txt: NDK项目的配置文件;

nvtive-lib.cpp: 所要调用的C++文件;.cpp是c++文件

        stringFromJNI方法: c语言入口

   五、C语言基础知识:
1.基本数据类型(基本内置类型)
(1)整型:
短整型: short int 16bit 2个字节 无符号整型 0-65535
整型:int 16bit 2个字节
长整型: long int 32个字节
(2)浮点型:
单精度(float)只能保证6位有效数字;
双精度 (double)至少保证10位有效数字;
长双精度(long double) 至少保证10位有效数字,但是比double提供的精度更高;
(3)字符型
char 8bit
(4)布尔型(c++才有)
bool 只有0代表false,非0即为真(true)
C++标准规定了每个算术类型的最小空间,但是不阻止编译器使用更大的空间
2.构造类型
(1)枚举类型(enum)
(2)数组类型
(3)结构体类型(struct)
(4)共用体类型(union)
(5)类类型(class)C++才有
3.指针类型
4.引用类型
5.空类型(void)
类类型和引用类型是C++比c中新增加的类型

     6.数组
由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素的数据类型,维数指定数组中包含的元素个数。
(1)一维数组:
定义: 类型名 标识符[维数];int a1[3];
引用:标识符[维数];元素下标从0开始的;a1[1]
初始化:可以在定义的时候初始化(可以不写维数),也可以在使用前初始化(定义时必须写维数)维数在使用之前,必须是
固定的值(因为数组的长度是固定的)
(2)二维数组:
定义:类型名 标识符[维数][维数];
引用:标识符[维数][维数];
初始化:二维数组的初始化会自动补0,如果提供了全部的元素,那么定义时第一维可以省略,但第二维不能省略;
7.预处理命令:(在代码编辑之前处理的命令)在编译期执行
预处理命令是C++统一规定的,但是它不是C++语言本身的组成部分,不能直接对它们进行编译;
(1)宏定义:
#define 标识符 字符串 pc 3.1415
#define 宏名(参数表) 字符串 (2)条件编译:
#ifndef
#ifdef: 标识符 当指定的标识符已经被#define命令定义过,
程序段1 则只编译程序段1
#else 否则
程序段2 编译程序段2
#endif 限定#ifdef命令的范围 #if 表达式 表达式为真时
程序段1 编译程序段1
#else 否则
程序段2 编译程序段2
#endif 结束#if命令
(3)文件包含:
一个文件将另一个文件的全部内容包含进来
#include

最新文章

  1. 直播推流之blibli和拉流LFLiveKit
  2. Redis批量删除KEY的方法
  3. SlideAndDragListView,一个可排序可滑动item的ListView
  4. c#中匿名函数lamb表达式
  5. Git ~ 添加远程仓库 ~Git
  6. (转)c语言_链表实例讲解(两个经典例子)
  7. 在DDMS中查看网络使用详情
  8. sqlplus中常用设置参数
  9. 【HDOJ】2830 Matrix Swapping II
  10. relative与absolute相结合
  11. [Jobdu] 题目1511:从尾到头打印链表——单链表的倒置输出
  12. Valgrind: memcheck of memleak/mem-uninitialization; massif usage
  13. nefu 519 昨日重现
  14. Linux Centos 6.9中SSH默认端口修改的坑
  15. 实现Windows数据绑定
  16. 基于condition 实现的线程安全的优先队列(python实现)
  17. mysql之聚合函数、group by、having
  18. mysql 严格模式 Strict Mode说明(text 字段不能加默认或者 不能加null值得修改方法)
  19. 七牛云java(服务端)通用工具类
  20. C# 数组&集合&泛型集合

热门文章

  1. 《30天学习30种新技术》-Day 15:Meteor —— 从零开始创建一个 Web 应用
  2. js 验证数字的正则表达式集
  3. hadoop(三)HDFS 文件系统
  4. 转载——分享一个html+js+ashx+easyui+ado.net权限管理系统
  5. Sprak RDD简单应用
  6. HDU 1007 Quoit Design【计算几何/分治/最近点对】
  7. 洛谷——P1617 爱与愁的一千个伤心的理由
  8. ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)
  9. Topcoder SRM 668 DIV 2
  10. Zlib编译