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

Android Gradle如何将文件打包进aar的META-INF目录?

问题根因

原有配置不生效是两个核心问题导致的:

  • packagingOptions 的作用是处理打包过程中重复依赖文件的合并、排除、优先选择规则,不会主动将本地自定义文件加入AAR,你写的规则没有对应待打包的输入文件,自然不会产生效果。
  • Android Library模块打包AAR时,默认不会将src/main/resources路径下的META-INF内容打包到AAR根目录的META-INF结构中,该目录下的内容属于Java编译期类路径资源,不会进入AAR的公开文件结构。
可行配置方案

方案1:自定义打包任务注入文件(全AGP版本兼容,最稳定)

直接在模块build.gradle的android配置块外添加如下逻辑,会在AAR打包执行前自动将指定目录下的文件写入AAR的META-INF路径:

android.libraryVariants.all { variant ->
    def packageAarTask = tasks.named("package${variant.name.capitalize()}Aar")
    packageAarTask.configure {
        // 这里可以自定义你的待打包文件存放路径,示例为模块根目录下的release-files文件夹
        from("${projectDir}/release-files") {
            into "META-INF"
        }
    }
}

使用步骤:

  • 在当前Library模块根目录新建release-files文件夹(可自定义路径,和上述代码中from后的路径保持一致即可)
  • 将需要打包的第三方许可证、pom文件、测试用test.txt等目标文件放入该文件夹
  • 删除之前在packagingOptions中添加的test.txt相关无效配置,执行assembleRelease任务重新打包即可。

方案2:放置到对应源集目录(零代码配置,适合简单场景)

如果不想编写自定义Gradle任务,可以直接将待打包的META-INF文件放到如下路径:

模块根目录/src/main/META-INF/

注意不要放在resources目录下,直接在main源集根目录新建META-INF文件夹放入目标文件即可,AGP打包AAR时会自动将该目录下的内容打入AAR根目录的META-INF路径。

如果打包时提示文件重复冲突,再按需在packagingOptions中添加对应文件的pickFirst或merge规则即可,无冲突不需要额外配置。

验证方法

打包完成后,到模块路径build/outputs/aar/下找到生成的aar文件,将后缀改为.zip后解压,查看根目录下META-INF文件夹内是否存在你放入的目标文件即可确认结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:06:26