向Android系统中添加模块及产品流程

 添加Android模块 


一、基础知识:

(1)在Android系统中,编译都是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称;
(2)为了将模块编译到Android系统中,每个模块都需要一个专门的Make文件,也即是“Android.mk”文件;


二、实现hello.c 模块的编写 


1. 如在 hardware/test目录下,编写hello.c
技术分享

2. 在hardw/test目录下,编写Android.mk

Android.mk编写的步骤:
(1)设置当前模块的编译路径为当前文件夹路径
            LOCAL_PATH := $(call my-dir)
(2)清理(可能由其他模块设置过的)编译环境中用到的变量
            include $(CLEAR_VARS)
(3)块编译变量
            LOCAL_SRC_FILES := 要编译的文件        //当前模块包含的所有源代码文件
            LOCAL_MODULE := 生成模块的名称       // 当前模块的名称,这个名称应当是唯一的,起名字要特殊一些,防止相同 ;          
            LOCAL_CFLAGS := 编译的参数              //C/C++编译器的参数
            LOCAL_MODULE_TAGS := 标签            //必须有标签,标签的值可能是debug, eng, user, development 或 optional
                                                                            optional是默认标签, 标签是提供给编译类型使用的

(4)模块类型           
            include $(BUILD_模块类型)
              
            模块类型有:
                BUILD_EXECUTABLE                     编译目标机上的可执行文件(ELF)
                BUILD_STATIC_LIBRARY              编译目标机上的静态库(*.a 编译时使用)
                BUILD_SHARED_LIBRARY             编译目标机上的动态库文件(*.so)
                BUILD_JAVA_LIBRARY                  编译目标机上的java动态库
                BUILD_STATIC_JAVA_LIBRARY    编译目标机上的java静态库
                BUILD_PACKAGE                           编译目标机上的java包
技术分享

3. 返回到源码顶层目录,执行 source build/envsetup.sh

作用:
(1)添加编译命令到当前终端上(如:lunch、模块编译命令m/mm/mmm)
(2)添加 产品名-编译类型到lunch菜单上;

4. 执行lunch命令,可以选择Android提供全志A13的nuclear_top产品 ,选择对应的 产品名-编译类型;
技术分享

5. 模块编译,指定目录使用mmm,当前目录使用mm
技术分享


----------------------------------------------------------------------------------------------------------------

 添加Android产品 


参考nuclear-top产品,实现属于我们自己的产品目录

nucler-top 表示设备     nuclear_top 表示产品
技术分享


1. 在device目录下,找到对应的厂家,新建一个属于我们自己产品的目录,如Joki_device

技术分享
说明:
<1>选择的厂家是farsight(华清),即在该厂家目录下新建一个属于我们自己产品目录;
<2>注意创建的产品目录,一定要以设备的名字作为产品的目录名
<3>用 “Joki”  表示产品的名字;

2. 进入产品目录下Joki_device, 添加vendorsetup.sh文件 ,该文件作用是添加 产品名- 编译类型 到lunch菜单

( 可以复制nuclear-top下的vendorsetup.sh 到自己的产品目录下,把产品名和编译类型修改一下即可;)

修改内容:
技术分享

说明:
<1> Joki-eng 意思是:Joki表示的产品名字,eng表示的是编译类型是工程机版本,也即开发阶段的编译版本;
<2> 在执行 source build/envsetup.sh 这个脚本时,vendorsetup.sh脚本相应会被执行,用于添加自己的产品名及
编译类型到lunch菜单中; 


3. 添加产品信息文件: 产品名.mk,如Joki.mk   (不一定非要是产品名,只要和AndroidProducts.mk指定的信息文件名保持一致就行)
( 可以复制nuclear-top下的nuclear_top.mk 到自己的产品目录下,并改成自己的产品名 Joki.mk )

修改内容:
技术分享
说明:
<1>必须修改的两个参数:
PRODUCT_NAME(产品的名字) :  Joki
PRODUCT_DEVICE(产品的设备):Joki_device (设备的名字一定和创建的产品目录名一致


4. 添加AndroidProducts.mk 文件,用来指定产品信息文件的位置;
( 可以复制nuclear-top下的AndroidProducts.mk 到自己的产品目录下)

修改内容:
技术分享
说明:
第二行的意思是:产品信息文件Joki.mk是在当前目录下

5. 添加设备的配置文件:BoardConfig.mk
( 可以复制nuclear-top下的BoardConfig.mk 到自己的产品目录下)


不要修改内容


 ...文件添加完毕...之后进行配置编译

6. 执行source build/envsetup.sh

作用:
<1> 添加配置编译命令到控制终端;(如:croot,lunch等命令)
<2> 会执行所有vendorsetup.sh脚本,该脚本的作用是添加"产品型号-编译类型"到lunch菜单中
技术分享


7. 执行lunch命令,进行配置   (由于执行了上面的脚本,所以在lunch菜单中可以看到我们的 “产品型号-编译类型”)

作用:
<1> 选择要编译的产品和编译类型;   (选择5)
<2>检查选择的产品是否存在, 存在, 获取产品信息,根据产品信息, 检查产品的设备信息是否存在, 存在, 获取设备信息;
<3>找到选择产品的版本配置文件
<4>检查选择的编译类型是否正确
<5>打印选择的产品信息及其设备信息
技术分享


技术分享

8. 执行make命令,进行编译; (编译时间较长)
技术分享



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。