南京广义软件:Android lunch分析以及产品分支构建

Android lunch分析以及产品分支构建

一、背景

随着Android应用范围越来越广泛,用户对Android的需求也越来越趋于复杂,在开发Android应用以及底层产品驱动时,往往两套产品所需要的硬件平台就大不相同,而软件功能却相差不大。在这种纷繁的情况下,是否每种产品就需要一套源代码来维护。如果真这么做的话,那工作量就太大了。所以提出了产品分支的概念。在Android源码中提供了这么一种强大的功能。

公司正在Android上针对硬件平台做调整和开发,手上现有多种方案,有的需要无线wifi,有的底层芯片不一致。在这种情况下,公司使用Android lunch的方式使用一套源代码维护多种方案。

二、文档目的

当前网络上没有成体系的对Android lunch调用关系的研究,所以将Android lunch分析以及产品分支构建这份文档共享出来以帮助对此过程不了解的开发者。如有疑问和建议,请留言。

三、Android lunch调用关系

1.      调用流程图:

南京广义软件:Android lunch分析以及产品分支构建

2)  Check_product:

检查指定的TARGET_PRODUCT是否允许,默认的有sim和generic。如果不允许,则输出错误信息,允许则不显示

3)  Print_lunch_menu()

该函数负责打印已经定义的版本

4)  Get_build_var()

列出make脚本中某变量的值,当前为build/core/config.mk

5)  Gettop()

返回当前android代码树的顶层路径。前提是当前路径位于android代码树中

6)  Add_lunch_combo()

向环境变量LUNCH_MENU_CHOICES标识的列表中添加项

7)  Set_stuff_for_environment()

设置android编译需要的环境变量

8)  Set_java_home

设置java运行环境

9)  findmakefile

此外还有一段比较重要的代码

这段代码寻找vendor,build,device指定目录下的vendorsetup.sh。在vendorsetup.sh中定义了各版本的产品。

 

 

四、Android lunch产品分支构建

背景:南京广义软件有限公司英文名generalizesoft,所以此处使用generalize来命名总的产品目录。其中generalizex和genx则是对公司产品共性的描述。每套产品将差异性的部分定义在自己产品当中。再调用共性的部分,形成一个完整的产品。这样做日后需要维护所有产品的时候只需要维护一套代码,而不是每套产品有一套代码,修改的内容页不方便管理。

1.  目录结构:

南京广义软件:Android lunch分析以及产品分支构建

南京广义软件:Android lunch分析以及产品分支构建

2)  对其中的文件分别进行编辑。generalize.mk 对应我们第一套产品的mk文件,这是差异性文件。不同的产品需要不同的mk文件。而generalizex.mk是无差异文件,意为产品的共性。所以在generalize.mk中定义如下,它需要引用generalizex.mk中定义的部分。这样做方便以后的产品差异性对比。同样的,BoardConfigCommon.mk定义了generalize一系列产品板文件的共性。在调用关系中可以看出它们之间的关系

南京广义软件:Android lunch分析以及产品分支构建

4)  上述步骤处理完之后。运行envsetup.sh:

. build/envsetup.sh

之后再使用lunch,就可以看到基础效果图:

 

南京广义软件:Android lunch分析以及产品分支构建

5)  编译android

南京广义软件:Android lunch分析以及产品分支构建             

 

 

来源:generalizesoft

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年1月11日
下一篇 2012年1月11日

相关推荐