gradlew是gradle wrapper的可执行脚本,用于自动下载并运行项目指定版本的gradle,避免依赖本地全局安装,确保构建环境一致。

用 ./gradlew 而不是 gradle
Android 项目默认不依赖系统全局的 Gradle,而是靠 gradlew(Linux/macOS)或 gradlew.bat(Windows)来驱动指定版本的构建工具。直接敲 gradle build 很可能报错:Command 'gradle' not found,或者版本不匹配导致 AGP version mismatch。
正确做法永远是:在项目根目录下运行带 w 的 wrapper 命令:
-
./gradlew build—— 构建所有模块(含测试、APK、AAR),适合本地验证 -
./gradlew assembleDebug—— 只生成 debug APK,快且常用 -
./gradlew assembleRelease—— 生成 release APK,但不会自动签名(需提前配好signingConfigs) -
./gradlew clean—— 清理build/目录,解决缓存污染导致的编译异常
build.gradle 里没配 signingConfigs,assembleRelease 会失败
执行 ./gradlew assembleRelease 时如果没配置签名,会卡在 packageRelease 阶段,并抛出错误:Execution failed for task ':app:packageRelease',根本原因是 AAPT2 打包后找不到有效签名配置。
必须确保 app/build.gradle 的 android 块中至少有:
android {
signingConfigs {
release {
storeFile file("my-release-key.jks")
storePassword "password"
keyAlias "key-alias"
keyPassword "password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
// 其他配置...
}
}
}
注意:storeFile 路径是相对于 app/ 目录的;密钥文件别提交到 Git,建议用 gradle.properties 抽离密码字段。
构建慢?先关掉不必要的任务
默认 ./gradlew build 会跑单元测试、Lint、Jacoco 等,对日常调试毫无必要,拖慢构建 2–5 倍。用以下参数精准控制:
-
--no-daemon—— 临时禁用 daemon(仅当怀疑 daemon 状态异常时用) -
-x test—— 跳过所有测试任务(testDebugUnitTest、testReleaseUnitTest) -
-x lint—— 跳过 Lint 检查(CI 环境才需要) -
--parallel—— 启用多模块并行构建(多 module 项目明显提速) -
--configuration-cache—— AGP 7.0+ 支持,首次构建略慢,后续快很多(但部分插件不兼容)
组合示例:./gradlew assembleDebug -x test -x lint --parallel。
找不到 task 名?用 tasks 列出来
Android 插件注册的 task 名不是直觉命名,比如“生成 APK”对应的是 assembleDebug 而不是 buildApk。运行 ./gradlew tasks 可列出全部可用 task,加 --group 过滤更清晰:
-
./gradlew tasks --group build—— 查构建类 task(assemble、compile、package) -
./gradlew tasks --group verification—— 查测试和检查类 task -
./gradlew :app:tasks—— 只看 app 模块的 task(多模块项目必备)
常见缩写陷阱:build 是通用生命周期 task,它依赖 assemble + check,但你通常不需要它全量执行。
真正卡住的地方往往不是语法,而是 wrapper 版本锁死、签名配置缺失、或误信了某个网上教程里的过期 task 名——这些细节不报错,但就是不产出 APK。











