添加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命令,进行编译; (编译时间较长)