开发示例
本章节提供开发者在准备好自定义厂商信息后的操作步骤,从而实现自定义厂商功能。
操作步骤
- 打开自定义厂商信息功能开关。
将配置文件project.conf的“_NeedCustomizedWebAssets”字段改为“yes”。
- 准备自定义厂商信息配置文件config.json,并将其存放在“{project_dir}/src/app/add_customized_web_assets/WhiteboxConfig/json”路径下。
- 准备自定义图片,并将其存放于“{project_dir}/src/app/add_customized_web_assets/WhiteboxConfig/img”目录下。
- 在“{project_dir}/src/app/add_customized_web_assets”目录下,实现配置脚本build_customized_web_assets.sh,参考示例如下。
#!/bin/bash VENDOR_CONFIG_PATH="." WEB_MANAGER_PATH="" IMG_DIR="WhiteboxConfig/img" IMG_LIST=("${IMG_DIR}/device.png" "${IMG_DIR}/device-en.png" "${IMG_DIR}/favicon.ico" "${IMG_DIR}/model.svg" "${IMG_DIR}/logo.png" "${IMG_DIR}/login.png") JSON_DIR="WhiteboxConfig/json" CONFIG_JSON_PATH="${JSON_DIR}/config.json" OS_NAME=$(< "/etc/os-release" grep "^NAME=" | awk -F "=" '{print $2}' | tr -d '"') function check_img() { local image_path="$1" local img_suffix="" local img_max_size="10485760" # 最大10M img_suffix="$(basename "${image_path}" | awk -F "." '{print $2}')" if [[ ! -f "${image_path}" ]]; then echo "${img_suffix} image ${image_path} file not exist" return 1 fi # 检查文件大小 if [[ $(stat -c %s "${image_path}") -gt "${img_max_size}" ]]; then echo "${img_suffix} image ${image_path} is too large" return 1 fi echo "check ${img_suffix} image ${image_path} success" return 0 } function check_config_json() { if [[ "${OS_NAME}" != "Ubuntu" ]]; then if ! dos2unix "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "convert ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check " return 1 fi fi if ! python3 -m json.tool "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "Invalid json ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" return 1 fi if ! grep -P '^\s*"model"\s*:\s*"[a-zA-Z0-9()\ ]{1,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <model> field" return 1 fi if ! grep -P '^\s*"systemName"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <systemName> field" return 1 fi if ! grep -P '^\s*"websiteTitle"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <websiteTitle> field" return 1 fi if ! grep -P '^\s*"userGuide"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <userGuide> field" return 1 fi if ! grep -P '^\s*"copyRight"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <copyRight> field" return 1 fi if [[ $(grep -cP '^\s*"zh"\s*:\s*"[a-zA-Z0-9()x{4e00}-\x{9fa5}() ]{0,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}") -ne "4" ]]; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, missing <zh> field, please check " return 1 fi if [[ $(grep -cP '^\s*"en"\s*:\s*"[a-zA-Z0-9()., ]{0,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}") -ne "4" ]]; then echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, missing <en> field, please check " return 1 fi return 0 } function check_assets() { if [[ ! -f "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device-en.png" ]]; then cp "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device.png" "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device-en.png" fi for (( i= 0; i < "${#IMG_LIST[@]}"; i++)); do if ! check_img "${VENDOR_CONFIG_PATH}/${IMG_LIST[i]}"; then echo "check config img failed, please check" return 1 fi done if ! check_config_json; then echo "check config json failed, please check" return 1 fi return 0 } function copy_config_and_assets() { # 拷贝json配置 if [[ ! -d "${WEB_MANAGER_PATH}/${JSON_DIR}" ]]; then mkdir -p "${WEB_MANAGER_PATH}/${JSON_DIR}" fi if ! cp -rf "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" "${WEB_MANAGER_PATH}/${CONFIG_JSON_PATH}"; then echo "cp ${CONFIG_JSON_PATH} failed, please check" return 1 fi # 拷贝图片配置 if [[ ! -d "${WEB_MANAGER_PATH}/${IMG_DIR}" ]]; then mkdir -p "${WEB_MANAGER_PATH}/${IMG_DIR}" fi for (( i= 0; i < "${#IMG_LIST[@]}"; i++)); do if ! cp -f "${VENDOR_CONFIG_PATH}/${IMG_LIST[i]}" "${WEB_MANAGER_PATH}/${IMG_LIST[i]}"; then echo "cp ${IMG_LIST[i]} failed, please check" return 1 fi done if [[ "${OS_NAME}" = "Ubuntu" ]]; then chown -R nobody:nogroup "${WEB_MANAGER_PATH}" else chown -R nobody:nobody "${WEB_MANAGER_PATH}" fi return 0 } function main() { # 校验 web manager 路径 WEB_MANAGER_PATH="$1/platform/omsdk/software/nginx/html/manager" VENDOR_CONFIG_PATH="$1/src/app/add_customized_web_assets" echo "WEB_MANAGER_PATH: ${WEB_MANAGER_PATH}" if [[ ! -d "${WEB_MANAGER_PATH}" ]]; then mkdir -p "${WEB_MANAGER_PATH}" fi # 检查静态文件 if ! check_assets; then echo "check asset files failed." return 1 fi echo "check environment and assets successfully, start copy assets to web project directory...." if ! copy_config_and_assets; then echo "cp asset files to web project directory failed, please check" return 1 fi echo "The customized configuration files has been copied." return 0 } echo -e "\n####################### begin to copy customized configuration files #####################################\n" main "$@" RESULT=$? exit "${RESULT}"
- 在“{project_dir}/build/build.sh”中,实现调用扩展_NeedCustomizedWebAssets开关的编译脚本。
# 配置自定义图片和厂商信息 # build_customized_web_assets.sh具体实现可参考对应章节实现 # TOP_DIR={project_dir} if [ "${_NeedCustomizedWebAssets}" == "yes" ]; then if ! bash "${TOP_DIR}/src/app/add_customized_web_assets/build_customized_web_assets.sh" "${TOP_DIR}";then return 1 fi fi
父主题: 自定义厂商信息