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

如何将包含SO库的Android模块库引入另一Android模块库并打包进其AAR文件

解决Android Library模块依赖中Native库打包进AAR的问题

我之前也碰到过一模一样的问题——Android Gradle Plugin(AGP)默认情况下,只会把Library模块自身jniLibs目录下的SO库打包进AAR,依赖模块的SO库并不会自动被包含进去,哪怕类文件已经正确打包了。针对你的场景,这里有几种可靠的解决方案:

方案一:通过配置JniLibs源目录包含libB的SO输出

我们可以让libA把libB编译生成的SO库目录当作自己的JniLibs来源之一,这样AGP在打包libA的AAR时,就会把这些SO库一起打包进去。

在libA/build.gradle中添加以下配置:

apply plugin: 'com.android.library'

android {
    // 你的其他配置...

    // 遍历所有Library变体,动态添加libB的SO输出目录
    libraryVariants.all { variant ->
        // 获取当前变体的构建类型(debug/release)
        def buildType = variant.buildType.name
        // 指向libB编译生成SO的目录(AGP 4.x版本的默认路径)
        def libBSourceDir = "${project(':libB').buildDir}/intermediates/cmake/${buildType}/obj"
        // 将该目录添加到libA的JniLibs源目录集合中
        variant.sourceSets.main.jniLibs.srcDirs += libBSourceDir
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 保持对libB的依赖,用api或implementation都可以,这里类已经正常打包了
    implementation project(path: ':libB')
}

方案二:通过复制任务手动同步SO库

如果方案一的路径匹配有问题,你也可以创建一个Gradle任务,在构建libA之前,把libB的SO库复制到libA的jniLibs目录下:

apply plugin: 'com.android.library'

android {
    // 你的其他配置...
}

// 创建复制任务,将libB的SO复制到libA的jniLibs
task copyLibBSOToLibA(type: Copy) {
    // libB编译后的SO输出目录
    from "${project(':libB').buildDir}/intermediates/cmake/debug/obj"
    from "${project(':libB').buildDir}/intermediates/cmake/release/obj"
    // 复制到libA的jniLibs目录
    into "src/main/jniLibs"
    // 只复制SO文件
    include "**/*.so"
}

// 让libA的预构建任务依赖这个复制任务
preBuild.dependsOn copyLibBSOToLibA

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':libB')
}

验证方法

配置完成后,执行以下步骤验证:

  1. 执行./gradlew :libA:assembleRelease(或Debug)构建libA模块
  2. 找到libA/build/outputs/aar/libA-release.aar文件,解压它
  3. 查看解压后的jni目录,应该能看到各个架构目录下同时存在libA.so和libB.so

这样当app模块依赖libA时,就能自动获取到两个SO库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:42:29