一、什么是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

NDK以及C语言基础语法(一)的更多相关文章

  1. NDK以及C语言基础语法(二)

    一.字符串类:(属于类类型) -String (在C++中才有) 使用之前必学引入String 类型: 引入String头文件(系统的头文件): #include <string>   p ...

  2. C语言基础语法

    #include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...

  3. Smali语言基础语法

    1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...

  4. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  5. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  6. php语言基础语法与编程工具推荐

    php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...

  7. C语言基础语法之指向函数的指针

    指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...

  8. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  9. Go语言--基础语法笔记

    ### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...

随机推荐

  1. python3列表推导式和生成器。

    1.把一个字符串变成 Unicode 码位的列表 >>> symbols = '$¢£¥€¤' >>> codes = [] >>> for sy ...

  2. mysql5.7 mysql库下面的user表没有password字段无法修改密码

    如题所述,mysql5.7  mysql库下面的user表没有password字段无法修改密码, 5.7版本已经不再使用password来作为密码的字段了  而改成了authentication_st ...

  3. HDU 1021 Fibonacci Again【打表找规律】

    Fibonacci Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. Codeforces 482B Interesting Array(线段树区间更新)

    题目链接 Interesting Array 区间更新.然后对于每一个约数重新求一遍区间的&值,不符合就跳出. #include <bits/stdc++.h> using nam ...

  5. CSDN博客已经打不开了

    CSDN博客已经打不开了,移动和联通的网都一样,怀疑是辽宁节点到骨干网出现故障 tracert结果 4跳和5跳本来是国际出口,相当于出国绕了一圈再回来访问 Hop IP地址 所在地 耗时(ms) 1 ...

  6. 使用Fiddle监听HTTPS网页

    HTTPS相对于HTTP增加了安全性,但是仍然不能有效的防止中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”) 这就使得Fiddle工具能够有效的监听HTTPS流量 一 ...

  7. Google Cloud服务免费申请试用以及使用教程

    简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...

  8. Java编程经验汇总

    JDK和JRE 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做.因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environ ...

  9. luogu P1336 最佳课题选择

    题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...

  10. 初探ggplot2 geom__制作面积图

        大家大概都对如下信息图并不陌生,该图用100%堆积面积图的方式来表现不同时期不同国家人数所占的比例.这是一种很有意思的表达方式,而面积图也是很常用的数据图表,现在让我们一起来看看如何在R里用g ...