当前位置: 首页 > news >正文

浙江非标电动车/徐州关键词优化排名

浙江非标电动车,徐州关键词优化排名,wordpress 写php页面,西安那些做网站的公司PRODUCT_COPY_FILES本质是和定义产品的AndroidProducts.mk(get-all-product-makefiles来获取系统中所有AndroidProducts.mk 文件路径)联系在一起,这个文件内部会定义所属的产品的PRODUCT_MAKEFILES,该变量可定义多个xxx.mk产品相关…
PRODUCT_COPY_FILES本质是和定义产品的AndroidProducts.mk(get-all-product-makefiles来获取系统中所有AndroidProducts.mk 文件路径)联系在一起,这个文件内部会定义所属的产品的PRODUCT_MAKEFILES,该变量可定义多个xxx.mk产品相关定义文件,在编译初始化环境时会将其include进来。如同PRODUCT_NAME/PRODUCT_DEVICE一样,PRODUCT_COPY_FILES等定义的变量都会通过import-products->import-nodes函数重新生成以下格式的变量:
PRODUCTS_xxxx_PRODUCT_NAME = name;
PRODUCTS_xxxx_PRODUCT_COPY_FILES = copy_flie;
注意:其中xxxx根据find到产品AndroidProducts.mk所在的相对路径从而确定变量LOCAL_DIR,进一步确定其PRODUCT_MAKEFILES的文件路径,一般位于device或者vendor目录下的子目录中,如device/xxx/fish/fish.mk。
1 PRODUCT_MAKEFILES := \
  2     $(LOCAL_DIR)/xxxx/fish.mk \ 这里必须写成LOCAL_DIR,变量值是取决于AndroidProduct.mk所在的路径。

以上的一组变量格局_product_var_list来生成,每个product node都会对应有一个这样的一组新的变量。而这些变量的初始化都是系统或者模块编译前的初始化过程(根据TARGET_PRODUCT来初始化Product相关的配置,以及确定TARGET_DEVICE),还没有到执行android.mk,任何一次编译都会执行该初始化过程。

对于PRODUCT_COPY_FILES来说,当确定好一种product后,新生成的PRODUCTS_xxxx_PRODUCT_COPY_FILES又会被赋值给PRODUCT_COPY_FILES:
/build/core/product_config.mk
331 PRODUCT_COPY_FILES := \
332     $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_COPY_FILES)) //获取确定了Product即TARGET_DEVICE后的这组变量值,INTERNAL_PRODUCT为xxx.mk所在的相对路径,用于区别不同类型产品的定义。


当include build/core/Makefile时,会执行对PRODUCT_COPY_FILES遍历的处理,可以看到当copy输出的是xml文件时,会直接执行copy操作,而对其他文件是:
24 define check-product-copy-files25 $(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error \26     Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!))27 endef28 # filter out the duplicate <source file>:<dest file> pairs.29 unique_product_copy_files_pairs :=30 $(foreach cf,$(PRODUCT_COPY_FILES), \31     $(if $(filter $(unique_product_copy_files_pairs),$(cf)),,\32         $(eval unique_product_copy_files_pairs += $(cf))))33 $(info $(unique_product_copy_files_pairs));34 unique_product_copy_files_destinations :=35 $(foreach cf,$(unique_product_copy_files_pairs), \36     $(eval _src := $(call word-colon,1,$(cf))) \37     $(eval _dest := $(call word-colon,2,$(cf))) \38     $(call check-product-copy-files,$(cf)) \39     $(if $(filter $(unique_product_copy_files_destinations),$(_dest)), \40         $(info PRODUCT_COPY_FILES $(cf) ignored.), \41         $(eval _fulldest := $(call append-path,$(PRODUCT_OUT),$(_dest))) \42         $(if $(filter %.xml,$(_dest)),\43             $(eval $(call copy-xml-file-checked,$(_src),$(_fulldest))),\44             $(eval $(call copy-one-file,$(_src),$(_fulldest)))) \45         $(eval ALL_DEFAULT_INSTALLED_MODULES += $(_fulldest)) \46         $(eval unique_product_copy_files_destinations += $(_dest))))47 $(info //$(ALL_DEFAULT_INSTALLED_MODULES));48 unique_product_copy_files_pairs :=49 unique_product_copy_files_destinations :=


这里本质是没有直接执行copy函数的,只是生成了一个目标与依赖的编译关系,同时将目标加入到来一个ALL_DEFAULT_INSTALLED_MODULES变量用于给系统的编译
2198 define copy-one-file
2199 $(2): $(1) | $(ACP)
2200     @echo "Copy: $$@"
2201     $$(copy-file-to-target)
2202 endef

跟踪后,发现如下依赖关系,即droidcore是编译整个系统的目标入口即make区别于mm等操作,具有以下的目标依赖关系:

在main.mk中
64 .PHONY: droid
65 DEFAULT_GOAL := droid //对于GNU make而言,当make无指定命令时,其预处理完成后,默认是将Makefile文件中第一个规则的目标依赖作为全局编译目标入口,即这里的DEFAULT_GOAL
66 $(DEFAULT_GOAL):
 817 # All the droid stuff, in directories818 .PHONY: files819 files: prebuilt \820         $(modules_to_install) \821         $(INSTALLED_ANDROID_INFO_TXT_TARGET)877 .PHONY: droidcore878 droidcore: files \879     systemimage \880     $(INSTALLED_BOOTIMAGE_TARGET) \881     $(INSTALLED_RECOVERYIMAGE_TARGET) \882     $(INSTALLED_USERDATAIMAGE_TARGET) \883     $(INSTALLED_CACHEIMAGE_TARGET) \884     $(INSTALLED_VENDORIMAGE_TARGET) \885     $(INSTALLED_FILES_FILE)971 # Building a full system-- the default is to build droidcore972 droid: droidcore dist_files


 784 modules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES)) //ALL_DEFAULT_INSTALLED_MODULES包含了需要copy的dst目的文件,此前在解析PRODUCT_COPY_FILES变量时已经建立了每个文件dst和src的目标依赖关系并将目标保存在ALL_DEFAULT_INSTALLED_MODULES变量中,即最终是执行copy-file-to-target函数。
    所以总的来说PRODUCT_COPY_FILES的执行是需要依赖于编译整个系统make时而言的,对于mm/mmm等单个Android.mk文件编译而言(编译入口为make all_modules和droid无关系)是不会进行任何编译的操作(虽然PRODUCT_COPY_FILES按初始化流程是被处理过的,也建立了编译的目标依赖关系,但all_modules只依赖于LOCAL_BUILT_MODULE和LOCAL_INSTALLED_MODULE),前者可以认为是系统级的大编译,后者是模块级的小编译。

这种解决方式只能利用Android.mk的BUILD_PREBUILT来解决

copy出现错误error The following variables have been changed
在mm编译模块时,会先_product_stash_var_list 函数保存_product_stash_var_list变量,然后include Android.mk文件,再回去使用assert-product-vars对保存变量进行检测,确保这些变量在加载了Android.mk后,不会变化,因为这个变量表都是和Board/Product相关的
282 define stash-product-vars
283 $(foreach v,$(_product_stash_var_list), \
284         $(eval $(strip $(1))_$(call rot13,$(v)):=$$($$(v))) \)
286 endef

289 # Assert that the the variable stashed by stash-product-vars remains untouched.
290 # $(1): The prefix as supplied to stash-product-vars
291 #
292 define assert-product-vars
293 $(strip \
294   $(eval changed_variables:=)
295   $(foreach v,$(_product_stash_var_list), \
296     $(if $(call streq,$($(v)),$($(strip $(1))_$(call rot13,$(v)))),, \
297         $(eval $(warning $(v) has been modified: $($(v)))) \
298         $(eval $(warning previous value: $($(strip $(1))_$(call rot13,$(v))))) \
299         $(eval changed_variables := $(changed_variables) $(v))) \
300    ) \
301   $(if $(changed_variables),\
302     $(eval $(error The following variables have been changed: $(changed_variables))),) //变量list加载Android.mk发生变化(在main.mk中会加载ONE_SHORT_MAKEFILE也就是Android.mk文件)
303 )
304 endef
变量list加载mm/make多个Android.mk时内部变量发生变化则会出该错误(在main.mk中会加载ONE_SHORT_MAKEFILE也就是执行mm/mmm时传入的Android.mk文件,make时通过脚本加载所有的Android.mk文件)

http://www.lbrq.cn/news/814987.html

相关文章:

  • 工艺品商城网站建设/信息流广告优秀案例
  • 发表评论的wordpress网站模板/无锡网站优化公司
  • 南城网站仿做/怎么做网络推广
  • 国外用tornado做的网站/学生个人网页制作
  • 百度推广引流/百度seo优化分析
  • 一个网站绑定2个域名/地推公司
  • 有没有教做网站实例视频/武汉seo霸屏
  • 做外文翻译的网站/seo如何优化网站
  • 怀柔区住房和城乡建设委员会网站/如何让百度搜索到自己的网站
  • 有关网站建设的视频/抖音运营推广策划方案
  • 免费学习做网站/竞价托管代运营公司
  • wordpress a 登录/网站页面优化包括
  • 徐州网站建设公司哪个好/网络营销的基本职能
  • 网站建站的流程/平面设计培训
  • 区政府网站建设方案/seo积分优化
  • 论文 网站建设可行性/网络平台销售
  • 免费永久个人网站注册/职业技能培训中心
  • 山西建设厅网站2016年3号文件/网络营销的发展历程
  • SEO网站布局优化/个人网站制作软件
  • 建站策划设计公司/推广之家官网
  • jeecms官网/武汉seo公司排名
  • 网站开发西安/学校网站建设哪家好
  • 给大家科普一下b站推广网站/网络广告形式
  • dreamweaver网站建设教程视频/西安百度竞价外包
  • web3d游戏网站开发/湖州网站建设制作
  • 无锡做公司网站/网页推广链接怎么做
  • 小程序开发制作公司哪家好/东营网站seo
  • 报名网站怎么做/计算机培训机构哪个最好
  • 网站欣赏/成功的品牌推广案例分析
  • 小程序怎么做微网站链接/今天的新闻最新消息
  • C++20 协程
  • 零基础 “入坑” Java--- 十四、【练习】图书小系统
  • 基于MySQL实现基础图数据库
  • 【Redis】 Redis 基础命令和原理
  • RCE真实漏洞初体验
  • 《剑指offer》-数据结构篇-链表