00:00
那今天我们来学习啊,经。那么也就是说,因为我们经I啊要用到C语言,所以我们会加一天的C语言。然后呢,在我们这个地方里面,我们要想学这个东西要用到C对吧,所以的话呢,要学C好,既然我们要学的这个主题叫兼哀,那什么是兼哀呢。对吧?什么是J呢?好,J,它的全称叫Java,内体为音的face,就Java本地开发接口,这没问题吧。好,他就是全称叫这个名字。那么它的作用,它的其实就是一种什么?Java和C之间调用的一种协议,它作用相当于桥梁。通过安,我们就可以让加瓦。去调用C语言,或者这一加,并且可以让C代表我们的,就是可以让C去调用我们的Java代码,就是Java调CC调Java掉。
01:06
好,画一张图。那同学们。大家来看一下,我们在这个地方里面,我们平时因为我们在座各位同学都属于我们什么Java系列的程序员,那你写的代码呢,肯定是我们的什么语言呢,Java语言对吧,我们画一个写一个。这是我们的一个家网语言,好,那么在我们的这个地方里面呢,好,它有我的C代码。好,注意还不只是C代码,C语言或者什么C加加也也可以啊。那么我们Java里面,假如说它有一个方法一,方法一。也有一个方法二。
02:01
好,那么假如这个方法一,它需要做大量的数学运算,那么Java这种语言呢,它效率它没有那个C语言那么高。啊,没有那个啊,实业家或者C那么高。跑,比如说解码,就万能播放器解码。基本上所有的解码都是用C或者是加去解码,那这个时候我们就要去去调调这个方法的时候要解码,那这个时候我们的就用,就一般是用什么C语言去做,那C语言可以同时选在这个在Java代码里面吗?肯定不可以呀,对不对,是不是啊,你看就比如说我们中国不可能让美国的军队住在我们天安门旁边嘛,对不对。是就肯定不兼容嘛,对不对,不管怎么样,所以就说在这个在一个Java类里面不可能显有。先有什么,先有C或者C加代码,那这个时候我们单独去选我们的C代码,好,那这个C代码里面,它就是有对应的什么函数。
03:07
函数一,注意在我们Java里面,我们叫的是方法,在我们的C语言或者C加加里面叫的是什么函数对吧?好,这里面有个函数啊,好,那么这时候有了过后,假如说我要做个解码,这个时候我们就要去调用我们的C,能够直接去调它吗?你想能够职业掉塑相当于一种笔啊。是不是就像我们中国人要和一个美国人去通话?直接能说话吗?我说你好。他他他不,他不知道说你好,除非他懂得汉语对吧,这个时候如果我们教的很深入,这个时候要一个翻译,那是翻译就是什么桥梁,对不对,同样我们要想这个方法去调C,是不可以直接这样调的。
04:01
那直接可以这样调的话,那我们以后太爽了是不是,但是但是那都直接可以掉的话。直接调的话,那是是是直接调查,那代码怎么显呢?对不对,那不是相当于直接去引用它,那怎么实定它对不对,那这个时候用JI才可以去调它啊,那如果直接调动就是一种语言了,对不对?好,那这个时候我们的基I就闪亮登场了。对吧,好进F3登场,那金I里面的话呢,这个时候他在这个地方里面充当的。角色就是协议和桥梁,好,那这个时候注意了,在这个地方里面,它也还会有一个对应的方法,叫做转调。调我们的函数。通过这个短调函数一,那么也就是说我要想调它可以,没关系,也这么。调一下。
05:03
照一下。好,这样的话呢,就可以掉了,注意这个过程呢,是我们的这个Java调C。他才是加va角C,然后我们还做一个事情,就是要。啊。C要的加法,这个时候也需要转函数啊。好,那么这是我们做。调函数。啊。好,同学们,这个时候也需要额外的方法啊,到时候我们在代码中会有体现。好。好,然后呢,在这里。
06:03
对吧,这种好,那么他在中间这部分就是我们J,它起到的作用J。的作用就是桥梁的作用。作用,然后呢,它本质上就是一种什么协议。协议,也就是说通过我们的这个协议就可以Java调c Java调C语言,同样C语言调Java c语言调我们的啊,直接加调我们的Java,那比如说我们解码过后。解码过后就用视频播放器从个视频进去来解码过后我们最终显示出来是把这个数据返回Java层呢。这个时候他就需要什么声调,Java这样的一个操作。好。但凡是大家。假如说你们用微信录一个视频。
07:01
这视频他要发给对方是做一个压缩呀,所以压缩它也是消很消耗性能的,他也用C去写。他录视频的时候对吧,然后他不管是上传还是做什么,他都是要。压缩。不管如此,假如说我们对这个视频进行处理。把你这个这个相机美白这种,因为一张图片有N多个像素,数据处理起来是很大的。那么这时候呢,用C它就比较高效对吧,是比较高效,都是这么做的啊,只要是大家看到这视频,视频的这个播放解码直播啊,图片的一个处理啊,以及视频的处理全部用C。还有那种。比如说我们的微信底层的核心的通讯模块,他为了提高这性能,也用的是C。对吧,然后它放到一个商城接口里,还有一些非常核心的。
08:01
功能,核心的功能,比如说很机密的一些算法。那么特别是一些游戏,游戏引擎等等这些它的底层都是用C。你看游戏,你看3D效果是吧,然后他需要大量的运算,这样的话底层都用了C,那么我们要给Java开发者用,给其他语言的开发者用,那么就通过gii就可以解决这个问题,知道吧,好,那所以的话呢,这就是我们的一个T。那GI,那么就是相当一个桥的作用,通过GI我们就可以让Java调C或者C加V,并且可以让C可以调Java了。对不对,好,那同学们,这就是我们的一个真爱。现在明白了什么时间了吧,既然就是这么一个东西,对吧,好。为什么用GI呢?比如说我们通过GI可以扩展安卓首页的功能,好,我们给大家看一张图。在我们这个地方里面的话呢。
09:01
啊,有这么一张图。这个图的话,就是系统的一个这么一个图,好我们打开一下。直接进行打开,那么这个是我们整个系统的。这个是安卓整个系统的一个什么一个结构图,对吧,底层什么内核。那粒子内核主要是用来驱间驱动我们什么硬件的吧。那么这些硬件就包含我们的WiFi啊。音频播放啊,就在那个手机不是有一个喇叭吗。对吧,USB啊等等驱动。然后上面这一层大家就比如说我们看一下显示驱动,相机驱动,蓝牙驱动驱动啊这IC驱动,然后us还有键盘驱动,WiFi驱动驱动,电源驱动,好那这些就是一个表皮管理对吧,多媒体的框架,好S是开源库,这些里面也包含。
10:01
开源库,然后这里面web key啊web key,然后就是浏览器内核,知道吧,浏览器内核。当然,但是呢,我们在4.4过后呢,内核换了。啊,合成的谷歌浏览器内核,然后这个自定义这个开源第三方的一个,啊,这个开源字体库,然后呢,3D引擎就是open兼容。啊,然后ID引擎安全介绍协议函数库啊,这些基本上都是C选的,还有安卓运行时这些核心库,虚拟机,然后上面就是Java线来了以后,大家按脚出去的话,可以做上面的一些应用,比如说我们改过,就比如说。比如说我们平时做一个按钮。我们作为按钮的话,在不同的手机运行起来的效果是不一样的。为什么会有这样的效果呢?就是因为我们的在这个地方里面,这个层,它提高了各种API,比如说按钮这个。八层这个控件是由这个层提供的。
11:01
那么它在这个地方,它引用的资源文件不一样,所以不同的手机引用的资源文件不一样,就会导致按钮在不同的手机显示效果是不一样的。他既然默认引用的资源是不一样的,所以的话,有时候我们按理说自定义啊,自定义的话就实现一个什么统一了,所以我们在知识之前学的自定义空间。就是可以解决统一这种问题,还有功能少可以增加,功能多可以减少,那自定义的内容对吧?那么假如说我们在这边去改一些系统提供的接口的一些样式,那么手机一用它就变了。对吧,好,那同学们在我们这个地方里面的话呢,它就啊有manager,然后window manager等等这些都是Java型的,也就大家以后工作可以走这一层,这些的话呢,到包括以后你工作就是你去找工作,也最好最好把简历写上work层。也有一点了解对吧,这样的话找工作就好一些,那这个是映衬,那假如说我想对这个系统里面进行扩展。
12:05
怎么扩展呢?现在是有一种技术叫NFC啊。NFC。5C是是近距离,近距离传输技术吧。那比如说我们刷卡,比如说我们用手机也会刷卡。那么是不是手机有一个芯片呐,芯片里面注意它就是一个硬件需要驱动,那这个时候我们就把这个硬件启动起来,是用我们内核驱动啊,其后这里面应该有个接口。去调它吧,那有这一层是有一个Java类啊,也去调它,那这个给用户用去去用这个选一个应用啊,这个用的话就是,诶刷卡够多少钱就显示啊是Java层。就是当我们在这个话里面的后,芯片一响应后,再直接在底层做出操作,然后得到信息还得反馈上去。对吧,相互调用是不是这样的。得到就说你支付钱会要把效果返回去,让他调用,当我一点的时候可能要调用。
13:02
调用对不对调用。那这个时候调用的话,这个这个时候可能我有个传感器,诶我我我要监听一下光啊,或监听一下这个就是因为手机掏出来。掏出来过后,看到光过后,可能你就把这个NFC启,就是这个启动起来,启动起来过后它的硬件被就被。驱动了,然后这个时候一放就起效果了,还有一种做法就是开机和NFC自自动式开启的,你只要是距离近了,它自动。就被什么。去判断就把你的钱给扣了对吧,然后呢,再返回给你回调上来。对吧,啊,做这样的事情就是不同做法,那有了之后,这个就是对一个什么扩展,那这个时候就用到什么。用的进来,因为这一层。C。或者是谁加加。上面这层是什么?Java。那通过什么呢?
14:01
G。进来。静爱,然后呢,实现他们的一个交互。来吧,好。那么GI的话,这个时候我们的话,他就去做这样的一个事情,比如说我我现场举个例,在我们的。后面有一个类。叫midplay,对这这个类学过吗?它是用来播放我们的视频的音音乐的,都是用它来做,但这哥们的话呢,它其实就掉了底层的解码。那么这个时候他就要通过G爱,他也就是也用到G爱,只是说我们用的时候,我们也不知道他是怎么跟敌人交互而已。对不对,不知道怎么给底层叫回来好了,同学们呢,这就是我们的这么一个啊架构图要扩展也要用到经验,不光如此,以后我们把这个系统移植到我们的,移植到我们的这个汽车里面,你看现在安卓里面在智能家居领域,比如说。
15:06
啊,我们因为我们家刚装修,然后我们家的电冰箱安卓系统。然后索尼电视。安卓系统。然后,呃。就是空调安卓系统对吧,基本上这些智能家居都是用什么安卓系统好,不光如此,以后咱们的车。这里面是不是以后装了这个按钮系统过后,假如说有一天他能解决一个问题,流量问题就是。这个车每一个月发的流量跟移动运营商合作对吧,然后嘞,就布置手机要走,手机太贵了对吧,然后他可能这个价格不一样,然后这样的时候嘞,你就可以在在这个安全系统上下个百度地图,那百度地图的话是不要钱呢,那你是不是以后下什么软件,是根本就在车里面看就不花钱了。对不对,如果是地图直接下就可以导航了,对不对,假如说啊,你下一个快播还可以开篇了,对吧?好,它就可以无穷的扩展了,但是呢,它也有个安全隐患,大家想想,如果你是一个安,如果这个安这个系统它可以控制车,那么我如果是黑客,我就是个坏蛋,我要你开下悬崖,让你消失。
16:20
对吧。是不是这也所以的话,要把它作为车里面的系统,这个系统它又能联网,那么它就有一定的危险,假如我是黑客攻破了,把它控制你的方向盘。对吧,当然他也肯定有安全机制,他可能就是以后你就算这个系统停进来也控制不了方向盘,那出黑客也没办法呀。所以的话呢,就看你怎么考虑对不对,看你怎么想了,所以的话呢,这个车肯定要安全,不安全的话,万一说明那就是要害你,说明了你去开车撞别人是吧,让别人找你麻烦是不是好。好,那那同学们的话呢,就是可以做一个扩展,这是一个这样的一个图,然后的话嘞,啊招聘现代啊,主要是安卓高级基本上有一个的一个。
17:09
你看没有安卓高级收的这些都要求要懂一些J爱对不对。好,前不久就有个有个学生,他就是。去这个智联招聘上呢,然后去看,诶他觉得。哪就是哪项技术。在别人的要求上写的多,他就把简历的改成这一项,刚好他的简历写了一个GI安,人家就要他,他说你这个简历其实一般我就看你写了简啊,NDK开发是吧,我就要你了。啊啊,这个时候,所以的话,我跟你说这个,那就是你这样想,在同样的简历上就说他只多了一个你可以,其他也显得挺好的,是这个意思,就他都多了,比别人多了这一项。知道吧,这样子啊,因为我们讲过嘛,对不对,好,那同学们那学了这个进爱过后,第一好找工作,第二以后还可以做一什么手机扩展,好还有一点,还有一点就是我们呢,用C语言写的内代码,注意我们C语言或者C加写的我们叫内为code啊,它执行的高效,比如说大量的数学运算,基基本飞车,那基本飞车你看游戏是吧,啊方向时的变化啊渲染等等,那这时候呢啊,它用的C还有万能解码框架,这个万能解码框架,注意了这个万能解码框架的话呢,后面我们会。
18:31
呃,用到它一个V探,它底层就用它,包括现在的暴风影音啊,QQ语音都是用它来改版,改版优化一点对吧,就是的效果了。还有open接3D渲染,那么它底层的也是用到的是C啊。好,大家想想它还有一个好处就是代码复用,你们觉得是Java语言这种它时间悠久呢,还是C语言历史悠久C对吧,那C语言悠久,但是肯定是早期的,搞建筑肯定是大牛啊。
19:03
那这帮帮这这部分人在选一些开源的库,比如说ipad是比较不错的,还有人脸识别库。人脸识别库。其实就是识别图像的一个库,还有其内,比如说我们这地方里面啊,这地方有就有个软件,其内有开源的,你们随便可以看一下,你看这都是C代码,看没有,那写好的就一个压缩软件知道吧。压缩软件解压压缩软件的一个源代码就在这。这个软件难道你没用过吗?七杠。没用过吗?用过的举手。你看肯定有人用过对吧,有有人用过,至于用过是开源的知道吧,好,那么有了之后,你把我们的整个安全系统,把它集成到汽车上,对吧,这时候呢就可以用了,好那么有了过后呢,当然以后你真要集成过后,你要考虑就一些特殊情况了,对吧?比如说我们举个例子啊,就是在2010年还是一二年的时候,北京下了一场非常大的雨,不知道大家有没有这样的一个。
20:08
一二年对吧,然后的话呢,在北京是有这样的一个啊挖下去。然后呢,车过来过后,这里面有水档,这哥们呢,有一哥们是吧,那车还不错,比较好的车,然后呢,但是这个车的系统啊。啊,它不是智能系统对吧,然后的话也一般系统,然后这个时候呢,就水比较慢慢慢进来了,那就其实有些人就是这样的,他他没有那种安全意识。因为在北京嘛,都是平面上,没有什么悬崖,没有什么,他没有安全意识,然后被水淹,他也不着急,后来这个水了,他已经有压力嘛,他门也开不上了,火车也熄火了。因为车一熄火,那个门窗是没没法没法这个让它自动开关了吧,对不对,门也打不开了,那这时候啊帮我就是打不开了,那怎么办呢?就。它它就你怎么砸手机又砸不动对吧?啊,那时候用水压,特别是水盖住来的时候,外面有水,我跟你说啊,当外面水往挤压的时候,你去掏,这就就很难撬动了,知道吧,你手机可能打不开了,最后呢,他打了个电话给他老婆是吧,就挂了。
21:16
那么呢,那么的话呢,就这个车是不是设计的不好啊,就是在这种情况下,这个门开不了了,对不对,是不是好,那么也就是说像这种车的话,其实他就没有考虑这种情况,那么如果以后你们去做车的开发,那你要考虑。即便熄火了,这个门也能开对吧,但是这个门一熄火后,它就是门打不开了,它就但是从我们这个防头防盗的角度,它是好的,门一关就是人不在里面了,是吧?那这个时候呢,小偷也打不开,倒挺好的,但是到遇到水人在里面就惨了,对不对。好,倒是有一些比较差的车,面包车是吧,它可以哐当哐弹的摇车窗,是不是正车还是比较好,好,但是大家也不怕,假如以后你们有车的话,教你们一招,拿根铁棍在车里面。
22:11
我就接到一个老师,就是我之前在黑马的时候呢,有一个老师我就看,诶他前面因为我们坐他车,因为我当时也刚买车嘛,然后就跟他交流车的心得是吧,然后就坐他车,他的车比我好,然后他车里面就准备一根铁棍。我当时不理解,我说为什么有扯不呢?是别人就是,难道是别人有威胁的时候要跟干架嘛?后来我一想,他有两大好处,第一大好处,说你以后女人有挑衅,我拿人棒别人,别人怕我对吧?这第二,如果遇到涉水这种情况,我拿这铁棍蹦蹦是可以挽救自己生命了。对不对,所以我就想我到时候也要买根铁棍对不对,好,那同学们在我们这个地方里面的话,大家注意以后包括你们去开发系统要考要考虑不同情况啊,不同情况也就是说啊,这个就是一个小小的扩展对不对。
23:10
好,那同学们,那么我们在这个地方里面的话呢,这是我们的静爱,那怎么用静爱呢?好,那么我们这今天的话呢,把C语言学过后,这个时候我们就要去做这样的一个事情。我们就去写Java代码,然后呢去通过GI去调我们的C,但是如果我们的C一点都不懂,那这样的话是没法没法上课啊,所以我们今天呢,就要去把我们的C语言来了解一点。啊,那在我们这个地方里面的话,我们要想去用,就要学C语言,注意我们一天有可能把C语言。不可能,你看你大学学了半年学懂吗?你半年写懂啊不懂对不对,好,那这个时候同学们我们就要去,我们的目标是看懂就可以了。
24:05
那么我们要去把这个C语言编译,这个时候提供了我们工具叫N啊,那么ND全是native develop case就是一个啊开发的一个套件,那么明天呢,我们就下次的时堂课的时候呢,会用到它。好用它,那它的话它就可以编译,把我们C语言编译成so文件,Java去加载,然后这个时候我们Java就给呼掉了,知道吧,那么今天我们重点就来学我们C语言啊,C语言好,那同学们,这就是我们GI,大家注意GI是什么一个协议,第二,它有几大好处,通过它可以扩展手机功能,不光如此还可以扩展车的功能,第三,那么为什么它它还有个好处,就是可以利用我们之前的。第三第三方库,还有后面会讲一个增增量升级,增量升级他就把APK啊。
25:00
新增加这部分以二进制的方式来打包一个额外的包,以后升级就把这个新增的这个包啊下载下来就可以了。那么他去分包活包都用的是CB。知道吧。增量升级听过这个概念吗?你看啊,什么叫增量升级,给你讲练练体啊,这个概念你想啊,现在游戏是有有100兆的APK,大家知道吗?那么也就是说,假如你新增一个版本,就可能换了一张图片。但用户一升级时是100兆啊,有必要吗?是不是我只要升级增加这部分呢?那增加这部分的话,那也就是说用增量升级,它就是用用一个C代码,它有一种算法,他把这个新增加的这部分。把它抽取为单独一个一个包,这个包的话呢,只有几KB,因因为刚加了一张图片嘛,对吧,那么用户升级的话,只要把这个图片下到本地,然后你再用C语言把这个完整的活变形成一个新的AP kap一个安装就可以了。
26:08
那么是不是用户就不用下载100兆了?那么它用到的是什么C语言?对吧,C语言好,后面会讲到,好,那同学们有了过后还有代码的重复利用,像这些ipad,现在暴风语音,QQ语音全是用它,包括风行的那个播放器全用它。那么呢,开源的他用的C选的好,然后有了过后,这是我们学啊,我们的这的好处好,那么怎么用,就要用看懂词以后才可以解决啊好,那同学们这个是我们。
我来说两句