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

如何通过Gradle将Library中的Assets文件复制到jniLibs目录?

解决方案:将Android Library的Assets文件复制到应用的jniLibs目录

针对com.android.library类型的SDK,确实无法像应用模块那样自动处理jniLibs的复制,但可以通过自定义Gradle任务或者调整sourceSets配置实现需求,以下是两种可行方案:

方案一:直接复制到应用模块的jniLibs目录(适合本地开发调试)

在Library模块的build.gradle(Groovy语法)中添加以下配置:

android {
    // 保留原有配置...

    libraryVariants.all { variant ->
        def variantName = variant.name.capitalize()
        // 创建对应变体的复制任务
        task "copyAssetsToJniLibs${variantName}"(type: Copy) {
            // 替换为你Library中目标assets文件的实际路径
            from "${project.rootDir}/your-library-module/src/main/assets"
            // 替换为应用模块的jniLibs目录路径
            into "${project.rootDir}/your-app-module/src/main/jniLibs"
            
            // 按需添加文件过滤规则,比如只复制.so文件
            // include "**/*.so"
        }

        // 绑定任务到Library的构建流程,确保构建时自动执行复制
        variant.assembleProvider.get().dependsOn "copyAssetsToJniLibs${variantName}"
    }
}

如果使用Kotlin DSL(build.gradle.kts),配置如下:

android {
    // 保留原有配置...

    libraryVariants.all {
        val variantName = name.replaceFirstChar { it.uppercase() }
        val copyTask = tasks.register("copyAssetsToJniLibs$variantName", Copy::class) {
            from("${project.rootDir}/your-library-module/src/main/assets")
            into("${project.rootDir}/your-app-module/src/main/jniLibs")
            // include("**/*.so") // 按需启用过滤
        }
        assembleProvider.get().dependsOn(copyTask)
    }
}

注意事项:

  • 替换your-library-module和your-app-module为你项目中实际的模块名称
  • 如果assets内的文件已经按CPU架构(如arm64-v8a、armeabi-v7a)分目录,可以调整into路径为${project.rootDir}/your-app-module/src/main/jniLibs/${架构目录},实现对应架构的文件复制

方案二:将Assets文件打包到AAR的jniLibs目录(适合SDK分发)

如果你的SDK需要打包成AAR供其他应用依赖,更推荐这种方式——直接将Assets中的文件映射为Library的jniLibs源目录,这样打包后的AAR会包含这些文件,应用依赖时会自动合并到自身的jniLibs目录。

在Library模块的build.gradle(Groovy)中添加:

android {
    sourceSets {
        main {
            // 替换为你Assets中存放目标文件的子目录路径
            jniLibs.srcDirs += "${project.rootDir}/your-library-module/src/main/assets/so-files"
        }
    }
}

Kotlin DSL版本:

android {
    sourceSets {
        main {
            jniLibs.srcDirs("${project.rootDir}/your-library-module/src/main/assets/so-files")
        }
    }
}

这种方式无需操作应用模块的目录,更符合SDK的分发规范,避免依赖外部模块的路径配置。

内容的提问来源于stack exchange,提问作者Víctor Martín

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:30:46