00:00
同学们,我们开始上课了,那么呢,早上呢,我们把它写了第一个,第一个我们Java调C这么一个小程序,好我们看一下同学们在我们这个地方里面呢,我们是怎么做的呀,首先我们就这里写了一个类,好这类的话呢,有一个方法,这个方法的话呢,它要调的是什么。叫C对吧,叫C代码,然后C代码在哪里写呢?在这里面创了一个J目录,有hello c,然后在我们的这个地方里面,它就去调我们C里面有有个对应的c hello方法,好,然后它这里面有一个返回值,这个计时俊呢,其实就是我们的这个返回值。好,那么在我们这个地方里面的话呢,前面加上一个Java,后面呢,就是一个全等名加上方法名,这个参数是固定的,这个参数也是固定的,就是一定要,虽然我们这个地方里面这有参数吗?没有参数,但是以后的所有的调用都会加上这两个,那么它里面就包含一些我们Java和C调用的一些方法。
01:19
啊,就是通过它,你看比如说叫U斯菌,Utf就得到一个斯菌,你看它里面得的是一个杰斯菌,那杰斯菌刚好它对应的就是我们我们的这个GI里面的杰斯菌,那么它又对应的是Java的斯菌,啊Java菌好,那这样的话呢,就形成这么一个对应,好那么我们的地方里面呢,就返回MC对吧,把它返回这样的一个信息。好,那么有了过后,如果词,然后当它编译过后呢,它就会生成我们的一个库,一个库好给大家看一下,这个库呢,在我们这个地方。
02:08
这个库的名字叫做Li hello.so那也就是说Li是正加上的,后面这个加上的,那假如说我们在这个地方里面,假如说这个不显,它也会默认生成给他看一下,只是说它默认的生成出来的内容。他呢不叫这个哈了,他以这个当前的工程呢命名了啊,大家看好我们就编译。好,大家再来看一下,你会发现他的名字变了吧,叫APP100APP,那是因为他以当前工程去做的事情呢。但是在这个地方里面,他把所有支持的都编译出来了啊,就是当前的NDK里面所有能支持的都编译出来了,那么。
03:03
假如说像市面上的,假如说他没有这样的一个手机,那么的话,你可以不编译,你就可以什么指定,而且这个名字可以改。对吧,好,比如说我只要这个好,只只要这三种CPU架构,注意啊,这几种是针对不同不同的CPU架构的,比如说这种是对我们的V7这样的架构的,这是对叉八六这样的手机处理器的,那也就是说我这个模拟器它都属于我们叉八六的,给大家看一下在这地方怎么样。它是一个X6的好,那甲,那现在我去运行起来,它是可以正常去把它显示的,好,我去运行起来,然后一会看一下日志。它都能够打印出来,好去拼起来。
04:04
好,那么在我们这个过程中呢,我们运行起来过后,我们看一下它都打印出来,安芙C感叹号也加上了,对吧,那假如我们在这个可能把它给去掉。这个好,我再去运行,再去运行的时候呢,现在有三个是吧,一会的话呢,他就啊,我看一下在这个地方里面。三个六好,那也就是说我把它给取消过后,你看它都不让你运行了,对吧?好,我们再去,我们再试一下。好,他就不让你运行了,那就说他发现你没有叉六对吧,那以前在一上啊,我跟你说,如果是在一六上它是能运行的,那这个时候会导致一个问题,就是你没有这样的,没有编译。
05:00
就是你看现在它只有你看是只有两两两种了,但是它运行起来过后呢,就是如果你把这样的APK装到这样的模拟器上,它会出现崩溃,他会找不到这样的二手文件,知道吧,也就是说针对每一个。每一个手机的CPU,它会编辑成不同的文件,也就是我们平时所讲的动态链接库,动态链接库好,我们把它给翻圆,然后再去把它运起来,好这个时候大家看一下,那么呢就可以把它运起来。好。分写来过后呢,就可以把它打印出来了,对吧,在这个里面就得到这个信息,那么这就是一个非常一个简单一个代码,好那同学们,这是我们对早上的一个复习,好那接下来我们就要去讲我们的这个Java调C,那我们还会讲C调Java,那也就是我们第一天这个内容里面,这张图基本上呢,就会去涉及到就是我们这个地方里面大家看一下,那这个时候呢,到时候我们就会讲Java调C。
06:16
C调Java,那么刚才这个地方里面,刚才在这个C里面写的这个代码。这个这个方法它其实就是什么呀,这个是GI,这个里面代码是C代码,通过它这个方法把他们呢,实现一个转调。明白了吧,这么一个回事,好,那同学们接下来的话呢,我们就要去讲下一个知识点,就Java调C了,其实这个小案例也是Java调C啊,好,我们就创建一个新的model。好,然后呢,我们往下一步加往扣C,好,然后我们点击下一步。
07:06
然后Java掉C的话呢,我们大概有四个案例啊,四个案例。好,然后我把它给写上,在对方里面的话呢,我就创建一个类,注意这个类的名字叫J或叫其他都可以啊,别觉得诶这个老师难道都要叫J吗?其实叫任何名字都可以无所谓啊,这个名字无所谓好我们这个地方里面作用我们要做的事情,有时要讲的是Java JA,调用CC代码,好那么这次有了过后呢,接下来。我们就要去把这几个方法给拿过来。啊,大概是有四个案例,1234个案例,好,我们把它给复制过来,好,那么在这个地方里面的话呢,改一下,第一个就是让C去做一个加法平算,然后把结果呢返回我们的什么加va,这个的作用就是让我们的C代码啊这个做加法。
08:20
做做加法运算预算,然后呢,把结果返回啊好,那这就是我们从两个组进去,好那这个呢,注意了,我们要做的一个事情,就是从我们的Java纯入我们的字符串,字符串做算,然后呢,存了过后我们C代码进行一个拼接,好说怎样的一个东西呢?就是我们传的一个值,传进去就是M浮动加Y。
09:20
那么他回来的时候注意了,回来的时候就是m flow加va,然后ad再加上M,弄C,就是后面这部分的是在C加上的,做这样的一个事情啊,好,那么接下来还有一个就是速度,就是让我们的C代码给我们的每个元素都加上十,就这个数,要做这样的一个事情,原来过后这个是降解一个密码,正确返回我们的这个200,否则返回佛返回400,做这样的一个事情,好,那同学们在我们这个地方里面的话呢,我们要去挨个方法去实现啊,那么让CC组这的一个事情。
10:21
好,那么接下来我们再在C去选我们的代码了,好,所以在地方里面创建一个我们的一个T目录,目录好,那GI目录有了过后呢,我们接下来就要生成它的一个头文件,啥意思呢?就是说这些方法在C中如何写,可以动态的去生成,那这里面呢,有一个啊有一个。有一个办法可以直接让我们去生成,好注意了,那么还有一种就是在这个地方去执行我们的这个Java h命令。
11:00
在你的工程里面去支撑他行这个命令做全的名,还有第二种的话呢,在第八个部下去,这种事情我们两种都可以试一试,好,我们来到这个里面。然后呢,在做事情之前最好去啊,把它先刷一下,刷一下,然后大家看好,我们要把它切换到这里去,来到这里。好,这里面是这个项目对吧,然后呢,我们CAD切换到哪里嘞?S是这个这个里面它有一个Java扣Java,那它里面的没有评级没有好,那也就是说稍等一下能输入没有CD,然后呢。加瓦扣C,好进来了,那进来过后大家看一下这个地方里面。
12:03
是有src呀,好,CDS RC CD may CD Java好,到这里来到这个后执行我们命令加va h好把这个全利名拷贝过来,拷贝好粘贴大家看好为飞车好,那他就报一些错误,但是呢,这错误的不不影响它的生成,它这里面多了,它会多一个头文件,这个文件你看没有全部这些方法该怎么写?都生成了。看吧,好,你看刚才我们在这个地方里面写的一个方法叫ADD在C中该怎么写,他已经帮我们写好了,ADDDD看到没有,好,然后这里面say hello写好了,还有这个数组的,还有这个she可的也写好了,这是一种办法,还有一种办法,同学们还有一种办法就是直接来到这里执行我们这个命令,点进去。
13:08
诶点到这,然后找到这里面,那也是进来,比如说我们先把它给删掉,删掉,然后呢,我们按shift的键右键。然后加va h也在这个地方里面,用这个空制态去执行,你看一下,你看是不是也产生了,好,那产生过后呢,我们就可以用这是一,这是两这一种方式,还有呢,来到这。就是刚才看到的,我们来到我们的这个目录下,Class debug下去执行,但这种情况的话,就是你上面上面这种情况无法实现的话,你就可以采用这种,好,我们把它给复制过来,来到这里把这个关掉,然后来自于叫做啊build build里面有一个叫。Class class,这面debug好,大家可以看一下,里面就有一些类对吧,好,这面。
14:08
啊,这个是这不是这个了,在我们这里啊,不能错在这个价位叫C这里啊,然后呢,点这个class debug好大家可以看一下这个经下类,这里面是都这几个方法都有了,对吧?都有了好那么这个时候有了过后呢,那接下来我们要就是来到这个地板目录下,好点进去。好进去,然后再去打开。然后粘贴好,粘贴过后你把刚才这个群的名粘贴过来。这个群里面就有它好右键拷贝好,注意了,在这个地方里面把它粘贴好,那么我们以回车。
15:03
好,没报任何错大大家要仔细看一下,咱们这个地方里面应该它会生成一个文件,看是多了一个文件,看到没有和刚才一样的啊,刚才一样的好,那这个的话呢,我们就像刚才一样的话呢,我们就不需要了,对吧?好,那接下来争论过后,注意你用三种方式生腾过后。如果前面这两种生成不了,那你就什么来这里试一试,那么在这里面有个脚本啊,这个脚本的话啊,就把它给去做这样的一个事情就可以了啊,这个是我网上找的,那有的客户在我们地方里面的话,把他拖到这里来。好,那么接下来我们就去写我们的C代码好去创建一个类,那类的话呢,我们可以叫做test test特好点击OK,然后注意了这个显得类啊,它不是Java了,应该是什么,我们把它给删除,重新选一下右键创建我们的C代码,可以点这个地方也点一个空白的都可以啊,点它然后呢,C不要投对吧,然后我们就叫做这个test,好然后接下来首先第一步可以把刚才我们这个文件呢打过来拷贝。
16:30
好,当然我们这个地方里面可以这样子,直接把它给拿过来,就是叫做框,你看它也可以提示好,就把这个文件打开,这个文件打开过后呢,就是头文件,这头文件是不是有有这个有这个GI这个啦,其实我们最终是要导这个对不对,导这个好,那有的各位同学们,接下来我们继续选我们的方法,首先先写第一个加法,加法好,然后来到这个地方好,这个地方里面过后注意了,像这些东西你可以留着。
17:06
也可以删除掉啊,它没有什么意义啊,这些也可以把它给取消掉,那本质上就和我们早上的一样,返回值Java,然后呢,选类名。是吧,选择名,然后这个是方法名好那有了过后,注意它生成的时候呢,它这个地方,它这个变量没有生成,没有生出来,所以我们要补上叫JOBJ好,那么这个的话呢,叫ji是吧,好,这里面的GD是吧,好那么这个时候有了过后,同学们我们要知道的是在这方里面的话,好,这个是返回值,这没问题吧,好再讲一下是吧,返回值,返回值好,那么这一个呢,是一个固定的一个弦法,它其实加法这些大写要注意,这个是一个全类名啊,全类名类名好这个是方法名。
18:18
对吧,好,那么这个变量注意了,这个变量是什么呀?它其实就是我们的一个方法,就是它其实就是我们的这个地方里面的,给大家看一下啊,点击GI里面我们可以看一个看一个这么一个,还不是他往下走,就是还不是这个就他那么他。是不是他的一个别名呢?那也就是说他是一个金哀内五音的face的一个什么的一个别名,它本身就是一个什么。本身就是一指针了吧,那么我们这个地方里面再加上这个是几级指针呢?是二级指针呢?注意啊,是A级指针呢,好大家注意一点,那二级指针里面取的话是我们至少要带一个箭头啊,一个心加个线头,就是二级指针去取它值才可以取嘛,是不是好那同学们在我们这个地方里面的话,再看在地方里面的话,好,大家看一些常用的方法结构题里面,你看它返回int。
19:31
然后大家看一下得到方法,这些是是什么,是不是函数指针呢?早上是不是看到这样的结构啊,有一个分号,这里面有一个括号,左上方有一个心,这的是一个什么函数指针嘛,对吧,函数指针你看早上我们不讲过函数指针吗?这样的结果都是函数指针,OK,好。那有了过后,接下来我们要做一个事情特简单,让他们相加,那么又因为在Java中,Java子是int j是JTJT。
20:13
In特,然后嘞,C中自也是int好,那么你也就是说在这个地方里面选的话就特别好了,为啥呢?他们一对in嘛,你就直接选个int也行,Int也行,然后就是说你S等于多少呢?等于这个们加上TD是吧,好直接返回一称好比S就可以了,对不对,这就是一个加法运算好那么同学们有了过后呢。有了过后,接下来我们就去用了吧,好来到我们这地方里面。我去把这个点击事件给做一做好,我把它改为线性布局好方向。
21:02
改一下指方向,然后呢,这个是我们的什么按钮,好,我们就要去做这个。就是让去去加我们的Java扣C。裤细。For什么呢?未来的就是我们的ad为这个加法是吧?好,那我们点击事件就直接叫ADDDD。好ad好,那么有这个方法的话呢,注意了,它还有好几种,我们都把它一次选完,Ad还有c hello,对吧,好那么呢。他其实就就是字不错,名字对吧,那么就是叫叫石俊这天佛石俊好,那还有两个。
22:06
那么还有两个,第一个是就是我们数组,这是数组。就住,那么下面这个就是我们的什么呀,Check check kw检它密码对吧,好,那么呢,就叫它就它密码这个的数组对不对?好那同学们接下来呢,我们把这点击事件呢都开来做一做来这里面点击事件public well这个好,View view好,那么这个时候有哪个后呢?总共有几个啊四个对吧,两个三个四个。好,我们来把它给复制一下,这是一个好接下来数,接下来再去检查,好,那么这个有了过后呢,当我们点击加法的时候,接上我们用这个加这个类了吧,好,我们去把它给运用,把它溜出来好,在地方里面运用好,把它创建出来,好,那么在我们地方里面去调用这个加法,我们呢,从一个九十九一是吧,传进去,那么这个时候它返回我们的结果,这是我们的行与S,好那么这个时候呢。
23:57
Log点一好,就是我们的点class,点我们的什么内容,然后就是ex,好把它给翻出来,好,那在这个地方里面的话呢,要使劲对吧,好把它给复制一下。
24:20
导于点击做这段事情,大家想想我们现在还少一步是什么啊,就是我们动态链接库是还没有添加呀,好,那我们就这样,假如就这样的话呢,它是否这个会崩溃好大看好啊。你。好,正在去编译,然后呢,我们去运起来一会儿。这个可以退出好。大家看一下运起来是没问题,但是当我一点的时候,大家看好啊,一点崩了对吧,啊崩溃了,这个崩溃的话呢。
25:05
疯了,我看这个里面。没有就是没有弹出来,那我们再再试试一下,来到我们的这个地方。再运一下,好,并起来。一点看到没有,大家以后只要看到的这样的一个错误,你就知道了,是什么错呢?你看在这个地方里面,他就说去加载这个地方里面,你看他说加载的时候,他说你在C中啊,就没有实现这个方法,没有实现这样的方法。那么其实我们代码是已经显了,他告诉我们多少行代码,你看你调这个地方导致的那一调,那我显了是调这个方法,但这个方法里面好,那是因为我没有显了,为什么呢?是因为我们没有加载这个动态的库点搜,然后这个库的名称注意了,要叫叫什么名字啊,跟这个规定的就是。
26:15
就是要跟他一样。好,那么现在这个地方里面,它生成的同学们,在这个地方里面,它生成的它是叫。是叫Java q c呀,叫QC,那么但是我们我们我我问大家,你们觉得是以后在那里配置好是不配置好。如果不配置它会有一个问题,以后有有哥们把这个目录也改,那你家里的库是不是也得变呢?但有些人他不知道改这地方,导致死活运行不起来,懂意思吧?好,那也就是说其实配置地方是比较好的,我们最好呢,把这样的拷回过来,拷过来然后放在我们的这个里面,放在这里面好,当然我们现在名字变了,叫Java q QC好,那么这个地方里面它是它会编译过后变成二文件,然后在这个地方里面呢,它会前面动态加上U。
27:23
然后呢,So文件也可以加上啊,点后缀它是叫动态链接库啊好,我们呢,在电话里面去就一个动态链接库,好那么这个时候有了过后我们呢,就不要忘了把这个添加进来,对吧?把添加进来好这时候再去运行,刚才点击是崩溃了,现在再去点击的话,大家可以就可以看到我们的效果了啊好我就运起来。现在我们再去运行,好,大家看一下,你看得到100了吧,大家一定要注意啊,要加,所以我的建议就是你要配置这个。
28:04
配这个配置的好处就是以后这个工程model我改了,这个model改了没关系。因为我这个地方里面不会变,这个不会变对不对,这个不变的话呢,自然而然,我这个代码就是什么生效的,知道吧,明白了吧,好,那么就是我们加法到C,然后实现我们加法运算好。
我来说两句