Skip to content

buildProject

构建 Android 项目,生成 APK 或 AAB 文件,支持多种构建变体和自定义配置。

前置依赖

依赖参数

参数名类型说明
deps.existsSyncFileSystem['existsSync']检查文件/目录是否存在
deps.readdirSyncFileSystem['readdirSync']读取目录内容
deps.statSyncFileSystem['statSync']获取文件状态
deps.joinPath['join']路径拼接
deps.platformstring进程平台信息
deps.execChildProcess['exec']执行子进程命令
deps.setTimeouttypeof setTimeout超时设置函数

环境要求

  • fs: Node.js 文件系统模块
  • path: 路径处理模块
  • child_process: 子进程模块,用于执行 Gradle 命令
typescript
import fs from 'fs'
import path from 'path'
import { exec } from 'child_process'

函数签名

typescript
function buildProject(
  options: AndroidBuildOptions,
  deps: AndroidBuildDependencies
): Promise<AndroidBuildResult>

interface AndroidBuildOptions {
  projectPath: string        // Android 项目根目录
  outputPath?: string         // 输出目录(可选)
  clean?: boolean            // 是否执行清理构建,默认 false
  buildVariant?: string      // 构建变体,默认 'debug'
}

interface AndroidBuildDependencies {
  existsSync: FileSystem['existsSync']
  readdirSync: FileSystem['readdirSync']
  statSync: FileSystem['statSync']
  join: Path['join']
  platform: string
  exec: ChildProcess['exec']
  setTimeout: typeof setTimeout
}

interface AndroidBuildResult {
  success: boolean
  outputPath?: string
  error?: string
  logs: string[]
}

参数

参数名类型必填默认值说明
options.projectPathstring-Android 项目根目录路径
options.outputPathstring-构建产物输出目录
options.cleanbooleanfalse是否执行清理构建
options.buildVariantstring'debug'构建变体(debug/release)
depsAndroidBuildDependencies-依赖注入对象

返回值

类型说明
Promise<AndroidBuildResult>Promise,解析为构建结果对象

异常

错误类型触发条件说明
构建失败Gradle 执行失败success: false, error 包含错误信息
项目不存在项目路径无效success: false, error 为 "项目路径不存在"
gradlew 不存在缺少 Gradle Wrappersuccess: false, error 为 "gradlew 不存在"

工作原理

  1. 验证项目

    • 检查项目路径是否存在
    • 检查 build.gradle 文件是否存在
    • 检查 gradlew 脚本是否存在并有执行权限
  2. 准备构建命令

    • 根据平台选择 gradlew 或 gradlew.bat
    • 如果 clean 为 true,添加 clean 任务
    • 添加构建任务:assemble${BuildVariant}(如 assembleDebug)
  3. 执行构建

    • 使用 exec 执行 Gradle 命令
    • 设置工作目录为项目路径
    • 捕获标准输出和错误输出
  4. 查找构建产物

    • 扫描 app/build/outputs/ 目录
    • 查找 APK 或 AAB 文件
    • 如果指定了 outputPath,复制到目标目录
  5. 返回结果

    • 成功:success: true, 包含输出路径和日志
    • 失败:success: false, 包含错误信息和日志