完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 kjfd 于 2015-8-28 16:08 编辑 最近在学习安卓,我所使用的是芯灵思的开发板,核心板是全志的A31S,感觉性能挺好,而且老板还给了很多的资料,而且还带学习的视频,下面是我在学习完第三期之后的一个经验,希望能跟大家分享一下,也希望各位大神能多多的帮助小弟,小弟在此谢过了。有兴趣的朋友可以去芯灵思官网看一下。 这一期呢主要讲的是Android编译过程及脚本的分析,主要包括三个方面(1).build/envsetup.sh 的分析 (2)lunch做了什么,如何增加或者删除lunch [size=10.5000pt](3)Android编译命令使用 首先呢我们先来看一下Android的编译过程: [size=10.5000pt]1.初始化参数设置 [size=10.5000pt]2.检查环境变量与目标环境 [size=10.5000pt]3.选择lunch并读取目标配置和平台信息 [size=10.5000pt]4.清空输出目录 [size=10.5000pt]5.编译 [size=10.5000pt]6.生成升级包 .build/envsetup.sh 的分析 当我们执行.build/envsetup.sh 这条命令时我们做了两件事情,第一就是加载编译命令,第二就是加载平台信息 现在我们来看一下执行.build/envsetup.sh 命令前后有什么区别,首先我们先来看一下这个脚本,他就是把一些命令加载到我们的终端上 现在我们来执行上边的lunch命令,你会发现这里并没有lunch命令,相同的来执行mmm命令得到的结果是一样的,现在我们来执行一下这个脚本 执行完之后我们会发现他include的了一些文件,这些文件在device目录下,device目录下的这些脚本文件其实就是当我们选择lunch时,他要在这里面找平台信息,我们执行完之后我们会发现里面多了mm、mma、mmm、命令 当我们执行完这个脚本之后就可以执行lunch命令了 这时就会出现所有的lunch,而这些lunch信息就是从刚才include的那些文件中加载过来的 然后我们来看一下我们在lunch时做了些什么,打开我们的envsetup.sh,找到lunch函数 这个就是我们的lunch函数,进来之后他首先会做出一个判断,如果lunch后面跟了参数,那么就会直接找到了答案,直接使用哪一个分支,否则的话就会列出所有的的分支,那么这个分支是在什么时候加入的呢? 这里有个lunch_menu,他所做的就是把所有的分支全部列举出来,lunch分支保存的变量是lunch_menu_choose,那么他是怎么被添加的呢?我们再次寻找,会找到一个add_lunch_combo函数,他所做的就是添加lunch分支 我们再次执行.build/envsetup.sh这个命令,然后我们打开我们使用的一个脚本,也就是........fiber_a31st.......这个脚本,当我们执行时,他就会把fiber_a31st-eng和user加载到环境变量中 现在我们就知道了这些分支是在什么时候加载进来的,就是在我们在执行那个命令时加载进来的,当加载完之后我们就可以把他们打出来了,打出来以后我们就可以从里边进行选择了,当我们选择一个函数时,我们的lunch函数就会帮我们把所选择的分支记录下来,然后做一系列的初始化工作,,这样我们就完成了环境变量的配置。 现在我们再来执行一下lunch函数我们现在选择fiber_a31st-eng,这样我们就得到了一些安卓的平台信息 我们可以看一下我们当前的环境变量,用export命令来查看,我们可以看到多了很多安卓的一些配置 接下来我们来减少一些脚本,执行.build、envsetup.sh命令,然后我们把我们所使用的脚本进行更改 我们把最后两行给屏蔽掉,我们再来执行一下.build、envsetup.sh命令,然后执行lunch命令,我们可以看到,我们所屏蔽掉的a31st的分支就不会再出现了 所以说我们可以通过修改刚才的脚本来减少我们的分支,但是当我们想要添加一个真正的分支的时候,我们必须参考现有的分支,比如: 我们为什么要添加分支呢? 不管是硬件需求还是软件需求,都是在主线版本上进行修改的,当我们需要添加或者减少一些应用和功能时,就可以通过添加分支来解决,当我们的硬件增强时,我们也可以通过添加分支来解决,这样我们的源代码就只有一份,我们维护起来也就更加方便了 下面我们来看一下fiber-a31st目录下的fiber_a31st.mk做了哪些事情,他所做的就是当我们的系统编译完之后,我们会把当前这个fiber-a31st下面的某些文件覆盖到我们out目录下(也就是我们编译目标目录下的文件)这样我们打包时才能生成我们这个分支所需要的升级包 当我们的代码编译完成之后,我们对某一个模块进行了修改,我们可以使用mm或者mmm命令对他单独进行编译,我们来对externnal下面的libpng进行编译,我们首先使用mmm命令 由于我们没有进行更新,所以他会告诉我们并没有什么可进行编译的,那么我们来对这个目录下的某一个文件进行更新, 我们再来使用mmm命令来进行编译,这时我们就对这个模块进行了单独的编译,编译之后他会生成一个库文件,这个库文件就会替换到我们得out/taeget/product/fiber-a31st/的目录下。 当我们想要使用mm命令就必须进入到external/linpng的目录下 |
|
相关推荐
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
1207 浏览 1 评论
583 浏览 0 评论
1270 浏览 1 评论
1952 浏览 1 评论
飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
1149 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 16:22 , Processed in 0.847988 second(s), Total 91, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号