如何在build.gradle.kts中编写构建完成后移动.aar文件的代码?
如何在build.gradle.kts中编写构建完成后移动.aar文件的代码?
刚接触Android插件开发确实容易被各种过时的Gradle写法搞懵,我太懂这种找不到最新教程的憋屈了!给你说个适配Kotlin DSL(也就是你用的build.gradle.kts)的靠谱办法,亲测在AS 2023.x版本完全能用。
你之前试的doLast思路是对的,但可能是任务依赖或者路径写法不对导致没生效。直接给你贴可复用的代码,再一步步解释:
首先打开你生成插件的那个模块的build.gradle.kts,在文件末尾添加这段代码:
// 注册一个移动AAR到Unity的任务 tasks.register("moveAarToUnity") { // 依赖assemble任务,确保所有构建AAR的操作完成后再执行移动 dependsOn("assemble") doLast { // 自动获取AAR的生成目录(Gradle推荐的写法,比硬编码build/更可靠) val aarSourceDir = project.layout.buildDirectory.dir("outputs/aar") // 替换成你自己的Unity项目插件目录,支持绝对路径或相对路径(如果两个项目同目录) val unityTargetDir = file("../YourUnityProject/Assets/Plugins/Android") // 先确保目标目录存在,不存在就创建 if (!unityTargetDir.exists()) { unityTargetDir.mkdirs() } // 复制所有AAR文件到Unity目录(要移动的话把copy换成move即可) copy { from(aarSourceDir) include("*.aar") // 只处理.aar文件 into(unityTargetDir) duplicatesStrategy = DuplicatesStrategy.REPLACE // 已有同名文件就覆盖 } println("✅ AAR文件已成功同步到Unity插件目录!") } } // 可选配置:让构建完成后自动触发移动任务,不用手动调用 tasks.named("assemble") { finalizedBy("moveAarToUnity") }
给你划几个重点:
- 任务依赖:
dependsOn("assemble")保证这个移动任务只会在所有构建AAR的操作都完成后才跑,避免还没生成AAR就去移动的问题 - 路径写法:用
project.layout.buildDirectory获取构建目录是Gradle 7+的推荐写法,适配不同的项目结构;Unity的路径如果和Android项目在同一个父文件夹下,用相对路径../xxx比绝对路径更灵活,换电脑也不用改 - 复制/移动选择:我这里用的
copy,建议保留原AAR作为备份;如果确实要删除原文件,把copy块改成move块就行 - 自动触发:最后那段
finalizedBy是让你点AS里的构建按钮,或者执行./gradlew assemble时,自动帮你跑移动任务,不用每次手动执行moveAarToUnity任务
还有几个小提醒:
- 如果只需要同步release版本的AAR,把所有的
assemble换成assembleRelease就行,debug版本就不会触发移动了 - 要是遇到找不到文件的问题,可以在
doLast里加一行println(aarSourceDir.get().asFile.listFiles()),打印源目录的文件,排查是不是路径写错了 - 执行任务时如果报权限错误,先关掉Unity再构建,避免Unity锁定了插件目录的文件
备注:内容来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

