第一次尝试:
将二者放置在第三方
Y:\6592\alps\wingcust\wt98601\w98601c4\vendor\artifacts\out\target\product\wt98601\system\media\audio\ui下
会在编译preloader的时候,把它copy到system下去,可以使用./mk n pl来做验证;
但是在后续
Y:\6592\alps\frameworks\base\data\sounds\effects\ogg
Y:\6592\alps\mediatek\frameworks-ext\base\data\sounds\effects
这二者路径下的
Y:\6592\alps\frameworks\base\data\sounds\AllAudio.mk
$(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \
$(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \
和Y:\6592\alps\mediatek\frameworks-ext\base\data\sounds\AudioMtk.mk
$(LOCAL_MTK_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
$(LOCAL_MTK_PATH)/effects/camera_shutter.ogg:system/media/audio/ui/camera_shutter.ogg \
会在编译android时,搜索完成所有.mk索引后,把原先copy好的文件覆盖掉
小结:小菜琳一直好奇这里的vendor是在什么时候复制粘贴过去到out目录下的system的,因为之前的apn-conf.xml无法客制化,初期都是用脚本
去强制进行复制清空工程此文件,相当拗口,后来有时间研究了下,是在脚本内有直接copy的位置,common.mk下
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,$(_product_line_overlay_dir)/mediatek/frameworks/base/telephony/etc/apns-conf.xml:system/etc/apns-conf.xml)
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,$(_product_line_overlay_dir)/mediatek/frameworks/base/telephony/etc/spn-conf.xml:system/etc/spn-conf.xml)
自然就无法客制化了。小菜琳把文件放置在vendor
这里的system/etc/目录下,就可以简单实现客制化了,开关机动画也是放置在此system\media,所以理所应当放置这两个文件也可以,但是不幸的是编译顺序里
居然这部分的copy是在pl就实现了,后续的frame下脚本执行盖掉了原本客制化的代码,
apn-conf.xml的尝试是庆幸刚好在此编译之前进行了copy的动作,否则应该也是无效的。
第二次尝试:
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\mediatek\custom\wt98601\system在这个路径下
放置Android.mk使用PRODUCT_COPY_FILES把当前路径文件夹下的文件copy到目标路径,但是这里build/core/main.mk:539:的检测却会报错
PRODUCT_COPY_FILES changed然后编译停止(原因不明,还需进一步调查)
第三次尝试:
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\data\sounds\effects\ogg放置客制话资源
编译出发现没有替换文件
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\mediatek\frameworks-ext\base\data\sounds\effects放置
camera_click客制化文件,没有替换文件,依旧无效
查看log
build/core/main.mk:539: *** Some files have been added to ALL_PREBUILT.
build/core/main.mk:540: *
build/core/main.mk:541: * ALL_PREBUILT is a deprecated mechanism that
build/core/main.mk:542: * should not be used for new files.
build/core/main.mk:543: * As an alternative, use PRODUCT_COPY_FILES in
build/core/main.mk:544: * the appropriate product definition.
build/core/main.mk:545: * build/target/product/core.mk is the product
build/core/main.mk:546: * definition used in all products.
build/core/main.mk:547: *
build/core/main.mk:548: * unexpected modules.order in ALL_PREBUILT
build/core/main.mk:549: *
build/core/main.mk:551: ALL_PREBUILT contains unexpected files
PRODUCT_COPY_FILES frameworks/base/data/sounds/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg ignored.
No private recovery resources for TARGET_DEVICE wt98601
有一个copycamera_click_48k.ogg的被忽略
47106:Copy: out/target/product/wt98601/system/media/audio/ui/camera_click.ogg
47107:Copy: out/target/product/wt98601/system/media/audio/ui/camera_shutter.ogg
47307:执行Copy: out/target/product/wt98601/system/media/audio/ui/camera_focus.ogg
由此可以推断先执行的是mediatek\frameworks-ext下的.mkcopy动作,然后是frameworks\base\data\sounds下的copy动作
那么在mediateck下客制化focus的想法也破灭了,一直不明白为啥有些文件可以客制化,编译使用的是meidatek下copy过去的客户文件夹下的
文件,但有些却无法客制化。
反思:
目前就两种方法可以研究,一个是研究透了客制化时加PRODUCT_COPY_FILES为啥make会报错,停止编译,因为4.2是可以客制化增加任意copy
编译的;一个就是研究MTK客制化文件的方法,为啥Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\core\res\res\values
的图片就可以替换,但是Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\data\sounds\effects\ogg
却无法客制化。
难度系数的话,应该第一种方法难些,而且第一种方法就算调试通过了,也不能保证客制化的这个.mk搜索出来的位置会在47106和47307的动作
之后,第二种方法意义比较大,一直有很多文件无法客制化,造成必须增加脚本去进行copy,交叉编译还需要全工程清除。小菜琳也一直感兴趣
第二种方法的研究。
# use to differentiate the project UI which use the some density resource . Just like the QHD resolution and WQVA resolution , they all use the hdpi resources, if you want to support this two projects , you do not need two code base ,you can use RESOURCE_OVERLAY_SUPPORT = hdpi to differentiate the QHD and WQVA in one code base. It could overlay the resources in build stage.
RESOURCE_OVERLAY_SUPPORT=generic FWVGA
决定从这个宏入手
先从./mk里面研究了下整个编译的逻辑,在mk中调用
$result += &p_system("$makeCmd $uAct CUR_MODULE=$uMod");
缺省情况下使用命令后加all
$result += &p_system("$makeCmd ${uAct}all");
实际使用的是$cmdArg = "CMD_ARGU=\"@mOpts\"";
$makeCmd = "make -f mediatek/build/makemtk.mk $cmdArg @mOpts";
我们继续打开mediatek/build/makemtk.mk看到了newall编译命令内包含了如下三个命令,第一个是自行添加的防呆检测,实际new也就是进行
cleanall和remakeall如果能知道cleanall主要做了什么,也能用remakeall来进行加速了。
newall: cr_list_auto_check cleanall remakeall继续往下看
.PHONY: mm
mm: $(PRJ_MF) $(MTK_ALL_CUSTGEN_FILES)
ifeq ($(HAVE_PREPROCESS_FLOW),true)
mm: run-preprocess
endif
mm:
$(hide) echo $(SHOWTIME) $@ing...
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(S_LOG)$@.log
$(hide) rm -f $(LOG)$@.log $(LOG)$@.log_err
$(hide) (source build/envsetup.sh;TARGET_PRODUCT=$(TARGET_PRODUCT) FLAVOR=$(FLAVOR) mmm $(MM_PATH) $(MAKEJOBS) $(SNOD) $(DEAL_STDOUT_MM);exit $${PIPESTATUS[0]}) && \
$(SHOWRSLT) $$? $(LOG)$@.log || \
$(SHOWRSLT) $$? $(LOG)$@.log
看到我们平时使用的mm命令实际调用 的地方了
$(hide) echo $(SHOWTIME) $@ing...
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(S_LOG)$@.log 这个是我们看到的打印信息;$(SHOWRSLT) $$? $(LOG)$@.log生成loglog名称定义在
最上面,看看我们最想看到的地方编译android的位置
将二者放置在第三方
Y:\6592\alps\wingcust\wt98601\w98601c4\vendor\artifacts\out\target\product\wt98601\system\media\audio\ui下
会在编译preloader的时候,把它copy到system下去,可以使用./mk n pl来做验证;
但是在后续
Y:\6592\alps\frameworks\base\data\sounds\effects\ogg
Y:\6592\alps\mediatek\frameworks-ext\base\data\sounds\effects
这二者路径下的
Y:\6592\alps\frameworks\base\data\sounds\AllAudio.mk
$(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \
$(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \
和Y:\6592\alps\mediatek\frameworks-ext\base\data\sounds\AudioMtk.mk
$(LOCAL_MTK_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
$(LOCAL_MTK_PATH)/effects/camera_shutter.ogg:system/media/audio/ui/camera_shutter.ogg \
会在编译android时,搜索完成所有.mk索引后,把原先copy好的文件覆盖掉
小结:小菜琳一直好奇这里的vendor是在什么时候复制粘贴过去到out目录下的system的,因为之前的apn-conf.xml无法客制化,初期都是用脚本
去强制进行复制清空工程此文件,相当拗口,后来有时间研究了下,是在脚本内有直接copy的位置,common.mk下
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,$(_product_line_overlay_dir)/mediatek/frameworks/base/telephony/etc/apns-conf.xml:system/etc/apns-conf.xml)
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,$(_product_line_overlay_dir)/mediatek/frameworks/base/telephony/etc/spn-conf.xml:system/etc/spn-conf.xml)
自然就无法客制化了。小菜琳把文件放置在vendor
这里的system/etc/目录下,就可以简单实现客制化了,开关机动画也是放置在此system\media,所以理所应当放置这两个文件也可以,但是不幸的是编译顺序里
居然这部分的copy是在pl就实现了,后续的frame下脚本执行盖掉了原本客制化的代码,
apn-conf.xml的尝试是庆幸刚好在此编译之前进行了copy的动作,否则应该也是无效的。
第二次尝试:
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\mediatek\custom\wt98601\system在这个路径下
放置Android.mk使用PRODUCT_COPY_FILES把当前路径文件夹下的文件copy到目标路径,但是这里build/core/main.mk:539:的检测却会报错
PRODUCT_COPY_FILES changed然后编译停止(原因不明,还需进一步调查)
第三次尝试:
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\data\sounds\effects\ogg放置客制话资源
编译出发现没有替换文件
Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\mediatek\frameworks-ext\base\data\sounds\effects放置
camera_click客制化文件,没有替换文件,依旧无效
查看log
build/core/main.mk:539: *** Some files have been added to ALL_PREBUILT.
build/core/main.mk:540: *
build/core/main.mk:541: * ALL_PREBUILT is a deprecated mechanism that
build/core/main.mk:542: * should not be used for new files.
build/core/main.mk:543: * As an alternative, use PRODUCT_COPY_FILES in
build/core/main.mk:544: * the appropriate product definition.
build/core/main.mk:545: * build/target/product/core.mk is the product
build/core/main.mk:546: * definition used in all products.
build/core/main.mk:547: *
build/core/main.mk:548: * unexpected modules.order in ALL_PREBUILT
build/core/main.mk:549: *
build/core/main.mk:551: ALL_PREBUILT contains unexpected files
PRODUCT_COPY_FILES frameworks/base/data/sounds/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg ignored.
No private recovery resources for TARGET_DEVICE wt98601
有一个copycamera_click_48k.ogg的被忽略
47106:Copy: out/target/product/wt98601/system/media/audio/ui/camera_click.ogg
47107:Copy: out/target/product/wt98601/system/media/audio/ui/camera_shutter.ogg
47307:执行Copy: out/target/product/wt98601/system/media/audio/ui/camera_focus.ogg
由此可以推断先执行的是mediatek\frameworks-ext下的.mkcopy动作,然后是frameworks\base\data\sounds下的copy动作
那么在mediateck下客制化focus的想法也破灭了,一直不明白为啥有些文件可以客制化,编译使用的是meidatek下copy过去的客户文件夹下的
文件,但有些却无法客制化。
反思:
目前就两种方法可以研究,一个是研究透了客制化时加PRODUCT_COPY_FILES为啥make会报错,停止编译,因为4.2是可以客制化增加任意copy
编译的;一个就是研究MTK客制化文件的方法,为啥Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\core\res\res\values
的图片就可以替换,但是Y:\6592\alps\wingcust\wt98601\w98601c4\custom\resource_overlay\generic\frameworks\base\data\sounds\effects\ogg
却无法客制化。
难度系数的话,应该第一种方法难些,而且第一种方法就算调试通过了,也不能保证客制化的这个.mk搜索出来的位置会在47106和47307的动作
之后,第二种方法意义比较大,一直有很多文件无法客制化,造成必须增加脚本去进行copy,交叉编译还需要全工程清除。小菜琳也一直感兴趣
第二种方法的研究。
# use to differentiate the project UI which use the some density resource . Just like the QHD resolution and WQVA resolution , they all use the hdpi resources, if you want to support this two projects , you do not need two code base ,you can use RESOURCE_OVERLAY_SUPPORT = hdpi to differentiate the QHD and WQVA in one code base. It could overlay the resources in build stage.
RESOURCE_OVERLAY_SUPPORT=generic FWVGA
决定从这个宏入手
先从./mk里面研究了下整个编译的逻辑,在mk中调用
$result += &p_system("$makeCmd $uAct CUR_MODULE=$uMod");
缺省情况下使用命令后加all
$result += &p_system("$makeCmd ${uAct}all");
实际使用的是$cmdArg = "CMD_ARGU=\"@mOpts\"";
$makeCmd = "make -f mediatek/build/makemtk.mk $cmdArg @mOpts";
我们继续打开mediatek/build/makemtk.mk看到了newall编译命令内包含了如下三个命令,第一个是自行添加的防呆检测,实际new也就是进行
cleanall和remakeall如果能知道cleanall主要做了什么,也能用remakeall来进行加速了。
newall: cr_list_auto_check cleanall remakeall继续往下看
.PHONY: mm
mm: $(PRJ_MF) $(MTK_ALL_CUSTGEN_FILES)
ifeq ($(HAVE_PREPROCESS_FLOW),true)
mm: run-preprocess
endif
mm:
$(hide) echo $(SHOWTIME) $@ing...
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(S_LOG)$@.log
$(hide) rm -f $(LOG)$@.log $(LOG)$@.log_err
$(hide) (source build/envsetup.sh;TARGET_PRODUCT=$(TARGET_PRODUCT) FLAVOR=$(FLAVOR) mmm $(MM_PATH) $(MAKEJOBS) $(SNOD) $(DEAL_STDOUT_MM);exit $${PIPESTATUS[0]}) && \
$(SHOWRSLT) $$? $(LOG)$@.log || \
$(SHOWRSLT) $$? $(LOG)$@.log
看到我们平时使用的mm命令实际调用 的地方了
$(hide) echo $(SHOWTIME) $@ing...
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(S_LOG)$@.log 这个是我们看到的打印信息;$(SHOWRSLT) $$? $(LOG)$@.log生成loglog名称定义在
最上面,看看我们最想看到的地方编译android的位置