MTK关于克隆工程有好几个FAQ:
[FAQ13465] L版本How to clone project
[FAQ17707] M版本如何clone project
刚开始接触全志觉得克隆工程好麻烦,没有文档支撑,不知道从何入手,后来才知道全志也做了类似的工作,并且直接写在了/device/softwinner/common/vendorsetup.sh里面:
function clone()
{
if [ $# -ne 0 ]; then
echo "don't enter any params"
return
fi
local source_device=$(get_build_var TARGET_DEVICE)
local source_product=$(get_build_var TARGET_PRODUCT)
local source_path=$(gettop)/device/softwinner/$source_device
# PRODUCT_DEVICE
read_var PRODUCT_DEVICE "$source_device"
if [ $source_device == $PRODUCT_DEVICE ]; then
echo "don't have the same device name!"
return
fi
TARGET_PATH=$(gettop)/device/softwinner/$PRODUCT_DEVICE
if [ -e $TARGET_PATH ]; then
read -p "$PRODUCT_DEVICE is already exists, delete it?(y/n)"
case $REPLY in
[Yy])
echo "delete"
rm -rf $TARGET_PATH
;;
[Nn])
echo "do nothing"
return
;;
*)
echo "do nothing"
return
;;
esac
fi
# copy device
cp -r $source_path $TARGET_PATH
rm -rf $TARGET_PATH/.git*
sed -i "s/$source_device/$PRODUCT_DEVICE/g" `grep -rl $source_device $TARGET_PATH`
# PRODUCT_NAME
read_var PRODUCT_NAME "$source_product"
if [ $source_product == $PRODUCT_NAME ]; then
echo "don't have the same product name!"
return
fi
mv $TARGET_PATH/$source_product.mk $TARGET_PATH/$PRODUCT_NAME.mk
sed -i "s/$source_product/$PRODUCT_NAME/g" `grep -rl $source_product $TARGET_PATH`
# config
read_var PRODUCT_BOARD "$(get_build_var PRODUCT_BOARD)"
sed -i "s/\(PRODUCT_BOARD := \).*/\1$PRODUCT_BOARD/g" $TARGET_PATH/$PRODUCT_NAME.mk
read_var PRODUCT_MODEL "$(get_build_var PRODUCT_MODEL)"
sed -i "s/\(PRODUCT_MODEL := \).*/\1$PRODUCT_MODEL/g" $TARGET_PATH/$PRODUCT_NAME.mk
density=`sed -n 's/.*ro\.sf\.lcd_density=\([0-9]\+\).*/\1/p' $TARGET_PATH/$PRODUCT_NAME.mk`
read_var DENSITY "$density"
sed -i "s/\(ro\.sf\.lcd_density=\).*/\1$DENSITY/g" $TARGET_PATH/$PRODUCT_NAME.mk
# 160(mdpi) 213(tvdpi) 240(hdpi) 320(xhdpi) 400(400dpi) 480(xxhdpi) 560(560dpi) 640(xxxhdpi)
if [ $DENSITY -lt 186 ]; then
PRODUCT_AAPT_PREF_CONFIG=mdpi
elif [ $DENSITY -lt 226 ]; then
PRODUCT_AAPT_PREF_CONFIG=tvdpi
elif [ $DENSITY -lt 280 ]; then
PRODUCT_AAPT_PREF_CONFIG=hdpi
elif [ $DENSITY -lt 360 ]; then
PRODUCT_AAPT_PREF_CONFIG=xhdpi
elif [ $DENSITY -lt 440 ]; then
PRODUCT_AAPT_PREF_CONFIG=400dpi
elif [ $DENSITY -lt 520 ]; then
PRODUCT_AAPT_PREF_CONFIG=xxhdpi
elif [ $DENSITY -lt 600 ]; then
PRODUCT_AAPT_PREF_CONFIG=560dpi
else
PRODUCT_AAPT_PREF_CONFIG=xxxhdpi
fi
sed -i "s/\(PRODUCT_AAPT_PREF_CONFIG := \).*/\1$PRODUCT_AAPT_PREF_CONFIG/g" $TARGET_PATH/$PRODUCT_NAME.mk
}
那么就是说只需要cp一下longan/device/config/chips/a50/configs/xxx项目为新的项目,然后在Android下面执行clone就可以完整的克隆出新的项目了,以下是全志回复。
目前是支持克隆方案,仅限于同一芯片的多个方案克隆,不同系列芯片不支持克隆替换。
具体步骤如下:
1、在android目录下,正常编译固件那样lunch一个基准方案(以A100 b3 Android 10标案参考):
android$ source build/envsetup.sh
android$ lunch ceres_b3-userdebug
2、进入板卡配置目录复制方案(如果同一个硬件可以不修改):
android$ cbd
longan/device/config/chips/a100/configs/b3$
$ cd ..
longan/device/config/chips/a100/configs$
$ cp -rf b3 myboard
3、然后回到android目录下克隆android方案:
android$ ca
android$ clone
please enter PRODUCT_DEVICE(ceres-b3): mydevice
please enter PRODUCT_NAME(ceres_b3): myproduct
please enter PRODUCT_BOARD(b3): myboard
please enter PRODUCT_MODEL(QUAD-CORE A100 b3): "QUAD-CORE MYMODEL"
please enter DENSITY:
其中,
a. mydevice为设备名称,myproduct为产品名称,具体会生成方案配置如下:device/softwinner/mydevice/myproduct.mk。
b. 克隆的方案仍会引用对应common的内容,如device/softwinner/ceres-common/ceres-common.mk。
c. longan与android方案中的myboard名字需要保持一致。
d. PRODUCT_MODEL如果包含空格需要使用引号引起来。
e. 如果不填值则使用括号中原来的值,如上例中density=160。
PS:System AService 写到:
克隆的Android,编译的时候会报如下错误,请问怎么解决
FAILED: ninja: 'hardware/xradio/bt/libbt-vendor/include/vnd_generic.txt', needed by 'out/target/product/MID_1089IPS/gen/SHARED_LIBRARIES/libbt-vendor_intermediates/vnd_buildcfg.h', missing and no known rule to make it
14:25:17 ninja failed with: exit status 1
你好,克隆的方案目录下device/softwinner/mydevice/configs/bluetooth/vnd_ceres-b3.txt这个文件改成vnd_mydevice.txt。这个之前处理的时候漏掉了。