今天一天看下来,有了大致的了解,感觉还是有必要用写下来把思路过一遍比较好,这其中理解的跟碎片一样,很多地方不到一起,
或者理解有错误,所以如果有哪位仁兄偶然看见了或者看过了,还请指正,万分感谢!
1:平台项目中的zrevo主要目录:
a80_xx02(项目配置目录):
---customer_a80_xx02.cfg
---env_a80_xx02.ini
---prj_config_a80_xx02.h
---PRJPreConfig_a80_xx02.mk
a80_xx02-huawei(a80_xx02衍生的配置目录):
---customer_a80_xx02-huawei.cfg
---env_a80_xx02-huawei.ini
---prj_config_a80_xx02-huawei.h
---PRJPreConfig_a80_xx02-huawei.mk
目录中各个文件的作用和关联性:
customer_a80_xx02.cfg文件:主要定义了文件的定制和文件的拷贝
[a80_xx02-huawei-huawei]
CUSTOM_SP=BASE
packages=audio_para
wificonnectivity_cfg
bootsound
bootanimation
a80_ruiou_inlay_ring
[a80_xx02-huawei-admo]
CUSTOM_SP=admo
packages=audio_para
wificonnectivity_cfg
bootsound
bootanimation
huawei_admo_ring
customer_a80_xx02.cfg文件中可能会有多个不同配置,如上面存在两个不同的配置a80_xx02-huawei-huawei和a80_xx02-huawei-admo。
当前项目使用的是哪一个,就是看编译代码时选择的配置是那个决定的。
cfg中packages变量(如bootsound,huawei_admo_ring)就指定了你当前配置下使用的开关机动画铃声,来电铃声。
cfg中packages变量只是配置好了,真正定义的地方是由:public-binary文件中的packages.xml文件定义的。
这里实现了将源文件拷贝到系统当中:
<package name="bootsound">
<file dst="system/media/bootsound.mp3" src="system/media/bootsound.mp3"/>
<file dst="system/media/shutdownsound.mp3" src="system/media/shutdownsound.mp3"/>
</package>
<package name="huawei_admo_ring">
<file dst="system/media/audio/ringtones/AdvanC1.ogg" src="project/a80/media/AdmoC1.ogg" />
<file dst="system/media/audio/ringtones/AdvanC2.ogg" src="project/a80/media/AdmonC2.ogg" />
<file dst="system/media/audio/notifications/AdvanN1.ogg" src="project/a80/media/AdmoN1.ogg" />
<file dst="system/media/audio/notifications/AdvanN2.ogg" src="project/a80/media/AdmoN2.ogg" />
<file dst="system/media/audio/alarms/AdvanA1.ogg" src="project/a80/media/AdmoA1.ogg" />
<file dst="system/media/audio/alarms/AdvanA2.ogg" src="project/a80/media/AdmoA2.ogg" />
</package>
cfg中packages变量的值用于选择那些应用或这二进制资源将被拷贝到out目录中.
[a80_xx02]
HUAWEI_PRODUCT_NAME="a80_xx02"
CUSTOM_SP=BASE
DRIVER_SP=BASE
TARGET_PRODUCT=huawei_xx02
TARGET_BUILD_VARIANT=userdebug
[a80_xx02]:这个定义作为一个配置的key值定义,用于区分各个配置。
REVO_PRODUCT_NAME="a80_xx02" 这个变量非常重要,它用于告诉编译系统,当前所属的配置在哪个目录?
并且确定了各个配置文件的文件名。比如这里HUAWEI_PRODUCT_NAME="a80_xx02",给我们提供了以下信息:
当前需要的配置文件在目录a80_xx02目录下
使用的配置文件是env_a80_xx02.ini、customer_a80_xx02.cfg、prj_config_a80_xx02.h,PRJPreConfig_a80_xx02.mk等..
注意:下面a80_xx02-jisanlianlong的所有衍生项目的REVO_PRODUCT_NAME值都是也必须是a80_xx02-jisanlianlong。
env_a80_xx02-jisanlianlong.ini定义为:
[a80_xx02-jisanlianlong]
REVO_PRODUCT_NAME="a80_xx02-jisanlianlong"
[a80_xx02-jisanlianlong-uerdebug]
[a80_xx02-jisanlianlong-a45s]
[a80_xx02-jisanlianlong-a45s-uerdebug]
CUSTOM_SP:默认设为BASE,这个变量主要用于二进制文件的拷贝,驱动文件的选择等。
DRIVER_SP:默认设为BASE,这个变量驱动文件的选择。
PRJPreConfig_a80_xx02.mk
LOCAL_PATH := zrevo/$(HUAWEI_PRODUCT_NAME)
ifneq ($(CUSTOM_SP),BASE)
PRODUCT_PACKAGE_OVERLAYS += zrevo/$(HUAWEI_PRODUCT_NAME)/overlay/$(CUSTOM_SP)
endif
PRODUCT_PACKAGE_OVERLAYS += zrevo/$(HUAWEI_PRODUCT_NAME)/overlay/BASE
$(call inherit-product, zrevo/common/PRJPreConfig_common.mk)
该文件主要的设计用途是用于android overlay机制资源的覆盖,也可以覆盖原有编译系统中针对客户不同配置的部分逻辑信息的覆盖,解决客制化问题。
features目录:
---default目录
---env.ini
---features.mk
该目录的引入是为了方便各种通用性的定制话需求,比如新UI的属性定制、客户公共需求等。
env.ini中定义通用的feature相关的环境变量,可以作为features.mk中值得补充。features.mk中定义的feature会被
脚本转换为JAVA中可用FeatureOption常量供java中调用。
例如:env.ini中:
HUAWEI_B_LEFTKEY_START_UNLOCK=true
features.mk中:
PRJ_FEATURE_HUAWEI_B_LEFTKEY_START_UNLOCK = bool-HUAWEI_B_LEFTKEY_START_UNLOCK
public-binary目录:
这个目录里面的二进制资源和packages.xml文件都是服务以 customer_a80_xx02.cfg文件,前面已经讲过了。
---logo目录
---开机log资源源文件
---project目录
---media目录
---铃声资源、来电铃声,短信铃声,闹钟铃声,内置音乐....
---system目录:
---media
---开关机动画,开关机铃声
---当然还有其他的资源...
---packages.xml文件(这个很重要了)
2.平台项目中的zrevo目录下主要文件(我知道的而已):
envsetup.sh 这个研究不来,技术目前太差了,目前只知道这么个浅概念:
准备好编译环境后,编译Rom的第一步是 source build/envsetup.sh,该步骤把e\nvsetup.sh里的函数声明为当前会话终端可用的命令。
这些命令能让我们切换目录,提交代码,编译Rom更方便。
在envsetup.sh里将执行vendor和device目录及各自子目录下所有的vendorsetup.sh,这些vendorsetup.sh做的事情是调用add_lunch_combo
将它们各自的产品添加到 LUNCH_MENU_CHOICES 变量里。