You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Android Gradle脚本实现构建后自动将APK放入Assets目录

当然可以!手动复制APK到Assets文件夹确实挺折腾的,用Android Gradle脚本完全能把这个流程自动化,我给你一步步讲清楚怎么实现:

实现步骤

1. 定义复制APK到Assets的Gradle任务

在你的app模块的构建脚本里(build.gradle 用Groovy DSL,build.gradle.kts 用Kotlin DSL)添加自定义复制任务:

Groovy DSL 版本

task copyApkToAssets(type: Copy) {
    // 配置源APK路径:这里以当前模块构建的debug包为例
    from "${buildDir}/outputs/apk/debug/app-debug.apk"
    // 如果是外部APK,直接写相对/绝对路径,比如:
    // from "${project.rootDir}/external-apks/my-dynamic-lib.apk"
    
    // 配置目标Assets目录
    into "${projectDir}/src/main/assets"
    
    // 可选:给复制后的APK重命名,避免文件名混乱
    rename { String fileName ->
        "dynamic-load-target.apk"
    }
}

Kotlin DSL 版本

tasks.register<Copy>("copyApkToAssets") {
    // 源APK路径示例
    from("${buildDir}/outputs/apk/debug/app-debug.apk")
    // 外部APK路径示例:from("${project.rootDir}/external-apks/my-dynamic-lib.apk")
    
    // 目标Assets目录
    into("${projectDir}/src/main/assets")
    
    // 可选重命名
    rename { fileName ->
        "dynamic-load-target.apk"
    }
}

2. 绑定任务到构建生命周期

为了让复制任务自动触发,我们把它关联到Android构建的前置任务(比如preBuild),这样每次构建都会先执行复制操作:

Groovy DSL 版本

// 让preBuild任务依赖我们的复制任务
preBuild.dependsOn copyApkToAssets

Kotlin DSL 版本

tasks.preBuild.configure {
    dependsOn("copyApkToAssets")
}

现在你点击Android Studio的Run按钮,或者执行./gradlew assembleDebug这类构建命令时,指定的APK会自动被复制到src/main/assets目录下,再也不用手动操作了。

3. 进阶优化:适配多构建变体

如果你的项目有多个构建变体(比如debug/release、不同产品风味),可以动态为每个变体创建对应的复制任务,避免文件名冲突:

Groovy DSL 版本

android.applicationVariants.all { variant ->
    // 为每个变体创建专属的复制任务
    def copyTask = task "copy${variant.name.capitalize()}ApkToAssets"(type: Copy) {
        from variant.outputs.first().outputFile
        into "${projectDir}/src/main/assets"
        rename { "dynamic-load-${variant.name}.apk" }
    }
    // 让变体的preBuild任务依赖这个专属复制任务
    variant.preBuild.dependsOn copyTask
}

这样构建不同变体时,对应的APK会以dynamic-load-debug.apk、dynamic-load-release.apk这样的名字被复制到Assets,完美适配多场景。

注意事项

  • 路径校验:一定要确保from配置的源APK路径是正确的,建议先手动确认路径存在,避免构建报错。
  • 增量构建:Gradle的Copy任务默认支持增量构建,只有当源APK或目标目录有变化时才会重新复制,不会浪费构建时间。
  • Assets目录权限:如果是第一次创建src/main/assets目录,Gradle会自动识别,不需要手动创建。

内容的提问来源于stack exchange,提问作者woosuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:41