精力都放在安卓上。所以说呢C这个东西不要纠结太多,对大家的要求就是能看懂,会调用。

Java的特点是一处编译到处运行,跨平台。优势是比native语言强,一处编译到处运行。native语言的劣势是不能跨平台。linux上不能用qq。

今天咱们要写的是native,写C,今天咱们要写程序部署到安卓的设备上。安卓设备是linux操作系统,而我现在是想在windows上编写native,本地的代码,然后我想让它运行在linux上。

native平台相关性强。现在咱们是在windows上写程序,最后想让它运行在安卓的手机上。


说一个概念:交叉编译。在一个平台上编译出在另外一个平台上可以运行的本地代码。

平台  cpu平台  x86(intel和amd)  arm(手机上使用的就是arm架构的cpu)  arm与pc上跑的这个x86架构的cpu在指令集和整个硬件的结构都是有区别的。 mips  少见的

安卓上最多的就是arm  pc上基本上就是这个x86.  早期的苹果电脑上是IBM搞的那个处理器,它的架构跟x86有区别,但是后来苹果跟IBM分手了,又转投入到了X86的怀抱,现在都用的           是英特尔的cpu.

操作系统平台  windows  linux  mac os   android就是一个类linux,在它基础之上进行修改.unix 实际上linux和mac os都叫一个类unix操作系统.都是在unix基础之上搞出来的这个东西.

不同的操作系统所支持的系统的命令是不一样的.x86 cpu支持的指令集和arm支持的指令集也是有区别的.

交叉编译工具的原理:模拟另外一个平台的特性进行编译.

NDK.  Native develop kit.  NDK可以帮助咱们在windows平台 x86 cpu上编译出在linux arm平台或者linux  x86平台上可以执行的二进制代码.可以编译出这样的本地代码.如果你是一个mac os的操作系统,你要下载一个mac版本的NDK来跑.它就是在mac的操作系统上mac os上模拟安卓的特点帮你编译出x86或者arm cpu可以执行的本地代码.

CDT:在eclipse上做C/C++开发的插件.你直接用它是不行的,你指定了一个NDK之后它可以帮助你编译C的代码.如果你不指定这个东西的话你直接想用它来写C的代码,要求你的操作系统,在你当前windows上得装一个C的编译环境.跑eclipse编译java的代码需要有一个JDK,JDK可以帮助你把java进行编译.CDT不包含C代码的编译工具,所以还需要装一个C的编译环境.

今天咱们主要就是写NDK的开发,NDK的包里面包含了C相关的编译的内容.


docs 在安卓下做JNI开发可能会用到的相关的这些文档.跟SDK的文档有点区别了.NDK里面每一个html页面就是一个小专题.界面也没有SDK好看,也没有中文的.

platforms  平台,有不同的安卓的版本.不同安卓版本它所支持的JNI相关的这些内容.最新的NDK版本是r11.

usr:unix  system  resource.unix系统资源.每一个类unix操作系统你都能找到usr这个目录.

include:存放跟JNI开发相关的头文件.头文件只不过是对你使用的某些函数的声明,具体的实现得有地方放才行.

lib:实现在lib里面.

需要特殊载入的咱们通过配置文件的方式把.so和.a它打包好的这些东西给它载入进来.

4.0以下的设备很少了.选android-13或者android-14即可.

samples:样例.

sources:源码.跟JNI相关的源代码.SDK的源码你愿意可以看一看,NDK的源码暂时不用看.有功夫还是看SDK的源码好过.

toolchains:工具链.交叉编译的工具链.针对不同CPU平台和不同操作系统平台所用到的交叉编译工具.

build->tools:有一系列的.sh文件..sh就是linux下的批处理命令.类似于windows下的bat文件..sh批处理命令封装了一系列的linux命令,通过它就可以去调用整个的交叉编译的工具链.调用toolchains里面的交叉编译工具,开启交叉编译的过程.

ndk-build.cmd:构建编译.交叉编译的过程是从ndk-build.cmd开始的.你想通过黑窗口在命令行里面编译一个NDK,做NDK的开发,把C的代码编译成可以在linux/安卓上运行的可执行文件,必须得使用ndk-build.cmd.所以说你想在黑窗口命令行里面搞的话就要把它放到环境变量里面.

它默认你一运行这个ndk-build会到你当前的这个文件夹里面去找有没有安卓的工程.实际上C:\Users\ZHONGZHENHUA>这个目录下没有安卓的工程.所以它报了找不到安卓工程的错.如果你没有配到环境变量里面你去敲ndk-build,它会报找不到系统命令的错误.把能够看见ndk-build的这一级目录放到环境变量里.


01_ndk目录介绍的更多相关文章

  1. JavaWeb——tomcat安装及目录介绍

    一.web web可以说,就是一套 请求->处理->响应 的流程.客户端使用浏览器(IE.FireFox等),通过网络(Network)连接到服务器上,使用HTTP协议发起请求(Reque ...

  2. SharePoint常用目录介绍

    SharePoint常用目录介绍 stsadm命令管理程序目录:C:\Program Files\Common Files\Microsoft Shared\web server extensions ...

  3. Android sdk目录介绍

    android sdk目录介绍 build-tools 各版本SDK编译工具 docs 离线开发者文档Android SDK API参考文档 extras 扩展开发包,如兼容架包. platforms ...

  4. android 源码目录介绍

    Android 4.0源码目录介绍|-- Makefile|-- bionic (bionic C库)|-- bootable  (启动引导相关代码)|-- build (存放系统编译规则及gener ...

  5. weblogic基本目录介绍,位数查看,启动与发布项目,修改JVM参数,设置项目为默认项目

    这里的基本目录%base%表示安装目录,如我的目录为:E:/weblogic就是%base% 1.weblogic目录介绍 weblogic主要的目录介绍: 1.日志目录: 每个domain(域)都有 ...

  6. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  7. Linux中 /boot 目录介绍 【转载】

    Linux中 /boot 目录介绍 转自:点击打开链接 一./boot/目录中的文件和目录 Linux系统在本地启动时,目录/boot/非常重要,其中的文件和目录有: (1)系统Kernel的配置文件 ...

  8. mysql 源代码目录及安装目录介绍

    1.源代码目录介绍: 1.BUILD    BUILD目录是编译.安装脚本目录,绝大部分以compile-开头,其中的SETUP.sh脚本为C和C++编译器设置了优化选项.2.client    cl ...

  9. mysql--mysql的安装与目录介绍

    一.mysql的下载安装 1.下载安装 1.windows10下安装 我们采用绿色免安装版, 打开你的mysql文件夹中的bin目录,我的是这个样子的 将这个路径添加入系统环境变量,首先右键此电脑-- ...

随机推荐

  1. elk 6.3.2 搭建

    CentOS7和java1.8.0)   然后登陆elastic的官网地址下载ELK组件:https://www.elastic.co/cn/products 我是下载了6.3.0版本的: elast ...

  2. MySQL基础:show命令总结

    show命令 show命令可以提供关于数据库.表.列,或关于服务器的状态信息. 总结 # 显示二进制文件以及文件大小(需要开启二进制日志记录功能) SHOW {BINARY | MASTER} LOG ...

  3. Semi-colon expected (eclipse 引入 json文件报错)

    最近做的项目用到的前端框架有一个json文件夹,里面全是json文件,所以导入Eclipse的时候会在整个项目上都是红叉,但是其实不影响项目运行的,之前忙着码代码也没时间管他,这个红叉存留了一个月!今 ...

  4. 微信小程序,获取点击元素的索引值index

    1.需求说明 点击 “加号图片” 上传图片,需要知道点击的是第几个图片,动态的修改src数组,这里图片用的 wx:for 循环出来的 2.遇到问题 按照官方最新文档循环的方式,索引值是以  wx:fo ...

  5. Java生成PDF文件(转)

    原文地址:https://www.cnblogs.com/shuilangyizu/p/5760928.html 一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iT ...

  6. 洛谷 2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver

    [题解] 每个格子可以到达的区域是一个菱形,但是我们并不能快速的求和,所以我们可以把原来的草地旋转45度,用二维前缀和快速处理菱形的区域的和. #include<cstdio> #incl ...

  7. 个人常用git命令

    最近开始使用git,将自己常用git命令做一个简单归纳,便于记忆. 初始化及配置 git init:初始化资料库 git config --global user.name 'xxx':配置用户名 g ...

  8. CF899F. Letters Removing

    给一个字符串支持以下操作:区间删除某个特定字符.最后输出字符串.n,m<=200000. 这题我居然不会可以回家了.. 首先,单点删除,选个平衡树比如set. 然后,他给的下标是会随删除操作变化 ...

  9. android Fragment用法

    Fragment常用的三个类:android.app.Fragment 主要用于定义Fragmentandroid.app.FragmentManager 主要用于在Activity中操作Fragme ...

  10. SQL SERVE BASE

    http://www.cnblogs.com/chillsrc/category/49632.html