博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NDK以及C语言基础语法(一)
阅读量:4348 次
发布时间:2019-06-07

本文共 2562 字,大约阅读时间需要 8 分钟。

 

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

 

   

 

 

             

转载于:https://www.cnblogs.com/huihuizhang/p/7904647.html

你可能感兴趣的文章
2018-07-13E-R图设计数据库+三大范式+修改用户密码+分配用户权限
查看>>
移动广告行业的复苏
查看>>
Cookie机制,session机制
查看>>
nginx配置错误
查看>>
47 【golang】mysql操作
查看>>
Using ARITHABORT with LLBLGen
查看>>
增量模型与快速模型的异同。
查看>>
Hanoi双塔问题(简单的枚举)
查看>>
lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)
查看>>
NDK以及C语言基础语法(一)
查看>>
ES6/ES2015核心内容 import export
查看>>
Day4-文件,json字典文件互转,函数
查看>>
vector引用参数
查看>>
NTC温度采集之数据拟合——freemat软件实现
查看>>
maven私服nexus3.9安装配置
查看>>
U盘出现大量乱码文件,并且不能彻底删除
查看>>
UEditor添加一个普通按钮及其他使用注意事项
查看>>
C语言的第一次实验报告
查看>>
spring JDBC 批量插入数据
查看>>
状态压缩题目小结
查看>>