camera_click,camera_focus无法客制化研究(一)

本文详细记录了在Android系统中尝试客制化camera_click和camera_focus音频文件的过程,包括尝试将文件放置在不同路径、修改Android.mk文件以及分析编译顺序和错误。作者探讨了MTK框架下的资源覆盖问题,以及编译过程中遇到的障碍,如PRODUCT_COPY_FILES的使用限制。目前有两种可能的解决方法:深入理解并解决mk文件报错,或研究MTK客制化文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次尝试:


将二者放置在第三方
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的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值