做源码开发的一般都涉及到多个分支,都是同一套源码,但面对不同的客户不同的定制,经常会多开分支。
最简单的就如每个客户开机logo都不一样,经常打系统的你肯定会很魔怔,今天换这家的logo明天另外一家的logo。
这篇就是为了解决这一痛点,如何在一个分支搞定 N 个客户的开机 Logo。
MTK 的开机logo图片路径在
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo\xxx 目录下
xxx 定义对应宏 BOOT_LOGO = wxga
device\mediateksample\型号\ProjectConfig.mk
vendor\mediatek\proprietary\bootable\bootloader\lk\project\型号.mk
修改 BOOT_LOGO 就能去对应的文件夹中找指定的开机logo
主要包含两张 xxx__kernel.bmp 和 xxx_uboot.bmp,图片格式必须是 bmp 的,注意不是改后缀就行了,而是原图保存的时候就选 bmp,这两张图片一般都是一样的,uboot 对应开机时第一帧图片,kernel 对应进入开机动画前的过程显示。其实 MTK 已经为运营商提供了多种分辨率对应开机logo文件夹
但每次都要进入这么深的目录修改也是挺麻烦的,所以我写了个脚本从其它路径拷贝至对应的文件夹,编译的时候就打包我们拷贝的
**1、在 device\mediateksample\型号\ProjectConfig.mk 中新增宏定义 **
用于判断是否需要从自定义的路径拷贝 logo 至 dev 路径下
MTK_CUSTOM_BOOTLOGO = yes
用于对应客户名称logo文件夹
MTK_CUSTOM_BOOTLOGO_FOLDER = tencent
以后每次编译只需修改 MTK_CUSTOM_BOOTLOGO_FOLDER 宏,
比如这次打包 tencent,下次打包 pdd,在下次打包 jd,不想拷贝时,修改 MTK_CUSTOM_BOOTLOGO = no
2、在 vendor/mediatek/BootLogo 下新建 tencent、pdd、jd 文件夹
文件夹中放置客户提供的两张开机logo图片 wxga_kernel.bmp wxga_uboot.bmp
3、编写 mk 和 sh 脚本文件
在 BootLogo 路径下新建如下的两个文件
Android.mk
用 MTK_CUSTOM_BOOTLOGO 判断是否需要执行 logo.sh 脚本文件,执行时传递参数 客户文件夹名称 和 目标文件夹名称
ifeq ($(MTK_CUSTOM_BOOTLOGO), yes)
LOCAL_PATH := $(call my-dir)
$(info ${TARGET_OUT})
COPY_FILES = $(shell ${LOCAL_PATH}/logo.sh ${BOOT_LOGO} ${MTK_CUSTOM_BOOTLOGO_FOLDER})
$(info ${COPY_FILES})
$(info pathl ${TARGET_COPY_OUT_VENDOR})
endif
logo.sh
接受参数,先删除 out 目录下的 lk.img 便于重新生成,烧写时验证效果,
从客户文件夹拷贝 bmp 到 BOOT_LOGO 文件下,判断名称是否是 wxga,
如果不是则根据 boot_logo 重新命名
#!/bin/bash
echo -e "logo_path=${2}"
echo -e "param_sytem_path=${1}"
echo -e "out_system_path=${OUT}"
echo -n "remove old lk.img... "
rm ${OUT}/lk.img
echo "done."
target_logo_img_path=$(pwd)/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/${1}
echo target_logo_img_path=$target_logo_img_path
kernel_img_path=$(pwd)/vendor/mediatek/BootLogo/${2}/wxga_kernel.bmp
uboot_img_path=$(pwd)/vendor/mediatek/BootLogo/${2}/wxga_uboot.bmp
echo kernel_img_path=$kernel_img_path
echo uboot_img_path=$uboot_img_path
cp -f $kernel_img_path $target_logo_img_path
cp -f $uboot_img_path $target_logo_img_path
if [ ${1} != "wxga" ]
then
echo "target folder not wxga"
mv ${target_logo_img_path}/wxga_kernel.bmp ${target_logo_img_path}/${1}_kernel.bmp
mv ${target_logo_img_path}/wxga_uboot.bmp ${target_logo_img_path}/${1}_uboot.bmp
echo "rename target logo done"
fi
echo -e "\n logo.sh make done...."