zoukankan      html  css  js  c++  java
  • NDK以及C语言基础语法(一)

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





















       

                 

  • 相关阅读:
    ARM标准汇编与GNU汇编
    使用友元,编译出错fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786) 的解决
    C++中值传递,引用传递,指针传递
    C++命名空间的用法
    关于初始化C++类成员
    vivi的配置与编译
    C++ 容器
    vivi分区问题,及移植时需要修改的地方(转)
    基于S3C2410的VIVI移植
    拷贝构造函数什么时候调用?
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/7904647.html
Copyright © 2011-2022 走看看