buildProject
构建 Android 项目,生成 APK 或 AAB 文件,支持多种构建变体和自定义配置。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.existsSync | FileSystem['existsSync'] | 检查文件/目录是否存在 |
deps.readdirSync | FileSystem['readdirSync'] | 读取目录内容 |
deps.statSync | FileSystem['statSync'] | 获取文件状态 |
deps.join | Path['join'] | 路径拼接 |
deps.platform | string | 进程平台信息 |
deps.exec | ChildProcess['exec'] | 执行子进程命令 |
deps.setTimeout | typeof 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.projectPath | string | 是 | - | Android 项目根目录路径 |
options.outputPath | string | 否 | - | 构建产物输出目录 |
options.clean | boolean | 否 | false | 是否执行清理构建 |
options.buildVariant | string | 否 | 'debug' | 构建变体(debug/release) |
deps | AndroidBuildDependencies | 是 | - | 依赖注入对象 |
返回值
| 类型 | 说明 |
|---|---|
Promise<AndroidBuildResult> | Promise,解析为构建结果对象 |
异常
| 错误类型 | 触发条件 | 说明 |
|---|---|---|
| 构建失败 | Gradle 执行失败 | success: false, error 包含错误信息 |
| 项目不存在 | 项目路径无效 | success: false, error 为 "项目路径不存在" |
| gradlew 不存在 | 缺少 Gradle Wrapper | success: false, error 为 "gradlew 不存在" |
工作原理
验证项目:
- 检查项目路径是否存在
- 检查 build.gradle 文件是否存在
- 检查 gradlew 脚本是否存在并有执行权限
准备构建命令:
- 根据平台选择 gradlew 或 gradlew.bat
- 如果 clean 为 true,添加 clean 任务
- 添加构建任务:
assemble${BuildVariant}(如 assembleDebug)
执行构建:
- 使用
exec执行 Gradle 命令 - 设置工作目录为项目路径
- 捕获标准输出和错误输出
- 使用
查找构建产物:
- 扫描
app/build/outputs/目录 - 查找 APK 或 AAB 文件
- 如果指定了 outputPath,复制到目标目录
- 扫描
返回结果:
- 成功:
success: true, 包含输出路径和日志 - 失败:
success: false, 包含错误信息和日志
- 成功: