build.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/bash
  2. # ================================================
  3. # HarmonyOS 项目编译脚本
  4. # ================================================
  5. # 设置颜色输出
  6. RED='\033[0;31m'
  7. GREEN='\033[0;32m'
  8. YELLOW='\033[1;33m'
  9. NC='\033[0m' # No Color
  10. echo -e "${GREEN}================================${NC}"
  11. echo -e "${GREEN} HarmonyOS 项目编译脚本${NC}"
  12. echo -e "${GREEN}================================${NC}"
  13. echo ""
  14. # 1. 检查 Node.js
  15. echo -e "${YELLOW}[1/6] 检查 Node.js...${NC}"
  16. if ! command -v node &> /dev/null; then
  17. echo -e "${RED}❌ 未找到 Node.js,请先安装 Node.js${NC}"
  18. exit 1
  19. fi
  20. NODE_VERSION=$(node --version)
  21. echo -e "${GREEN}✅ Node.js 版本: $NODE_VERSION${NC}"
  22. echo ""
  23. # 2. 检查 DevEco Studio
  24. echo -e "${YELLOW}[2/6] 检查 DevEco Studio...${NC}"
  25. DEVECO_APP="/Applications/DevEco-Studio.app"
  26. if [ ! -d "$DEVECO_APP" ]; then
  27. echo -e "${RED}❌ 未找到 DevEco Studio,请先安装${NC}"
  28. exit 1
  29. fi
  30. echo -e "${GREEN}✅ DevEco Studio 已安装${NC}"
  31. echo ""
  32. # 3. 设置环境变量
  33. echo -e "${YELLOW}[3/6] 设置环境变量...${NC}"
  34. # Node 和 hvigorw 路径
  35. NODE_BIN="$DEVECO_APP/Contents/tools/node/bin/node"
  36. HVIGORW_JS="$DEVECO_APP/Contents/tools/hvigor/bin/hvigorw.js"
  37. # SDK 路径(正确的路径)
  38. export DEVECO_SDK_HOME="$DEVECO_APP/Contents/sdk"
  39. export HOS_SDK_HOME="$DEVECO_APP/Contents/sdk"
  40. export OHOS_SDK_HOME="$DEVECO_APP/Contents/sdk"
  41. if [ ! -d "$DEVECO_SDK_HOME" ]; then
  42. echo -e "${RED}❌ 未找到 SDK: $DEVECO_SDK_HOME${NC}"
  43. echo -e "${YELLOW}提示:在 DevEco Studio 中打开项目,SDK 会自动下载${NC}"
  44. exit 1
  45. fi
  46. echo -e "${GREEN}✅ SDK 路径: $DEVECO_SDK_HOME${NC}"
  47. echo ""
  48. # 4. 清理之前的构建
  49. echo -e "${YELLOW}[4/6] 清理之前的构建...${NC}"
  50. if [ -d "build" ]; then
  51. rm -rf build
  52. echo -e "${GREEN}✅ 已清理 build 目录${NC}"
  53. fi
  54. echo ""
  55. # 5. 停止之前的 daemon
  56. echo -e "${YELLOW}[5/6] 停止之前的 hvigor daemon...${NC}"
  57. "$NODE_BIN" "$HVIGORW_JS" --stop-daemon 2>/dev/null || true
  58. echo ""
  59. # 6. 开始编译
  60. echo -e "${YELLOW}[6/6] 开始编译项目...${NC}"
  61. echo -e "${YELLOW}命令: node hvigorw.js --mode module -p module=entry@default -p product=default -p requiredDeviceType=tablet assembleHap --analyze=normal --parallel --incremental --daemon${NC}"
  62. echo ""
  63. "$NODE_BIN" "$HVIGORW_JS" \
  64. --mode module \
  65. -p module=entry@default \
  66. -p product=default \
  67. -p requiredDeviceType=tablet \
  68. assembleHap \
  69. --analyze=normal \
  70. --parallel \
  71. --incremental \
  72. --daemon
  73. EXIT_CODE=$?
  74. echo ""
  75. if [ $EXIT_CODE -eq 0 ]; then
  76. echo -e "${GREEN}================================${NC}"
  77. echo -e "${GREEN} ✅ 编译成功!${NC}"
  78. echo -e "${GREEN}================================${NC}"
  79. echo ""
  80. echo -e "${GREEN}输出文件位置:${NC}"
  81. find entry/build -name "*.hap" -type f 2>/dev/null | while read file; do
  82. size=$(du -h "$file" 2>/dev/null | cut -f1)
  83. echo -e "${GREEN} 📦 $file ($size)${NC}"
  84. done
  85. else
  86. echo -e "${RED}================================${NC}"
  87. echo -e "${RED} ❌ 编译失败!${NC}"
  88. echo -e "${RED}================================${NC}"
  89. echo ""
  90. echo -e "${YELLOW}故障排查建议:${NC}"
  91. echo -e "1. 在 DevEco Studio 中打开项目"
  92. echo -e "2. 等待 SDK 自动下载完成"
  93. echo -e "3. 在 DevEco Studio 中点击 Build > Build Hap(s)"
  94. echo -e "4. 确认可以在 IDE 中编译成功后,再使用脚本编译"
  95. fi
  96. exit $EXIT_CODE