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

如何在Android库AAR中引入第三方JAR且不嵌入其代码

解决第三方JAR不合并进AAR的classes.jar,保留在libs目录的方案

我来帮你搞定这个问题!要避免第三方JAR代码被打包进AAR的classes.jar,而是保留在AAR的libs/myjar.jar位置,你可以按以下步骤操作:

  • 第一步:放置JAR文件
    把你的第三方JAR文件放到Library模块根目录下的libs/文件夹里(如果没有libs目录就新建一个)。

  • 第二步:调整依赖配置
    修改Library模块的build.gradle(或build.gradle.kts),把原来的依赖声明从implementation改成compileOnly,这样编译时能正常使用JAR的API,但不会把JAR的代码合并到classes.jar中:

    // Groovy版本
    compileOnly files('libs/myjar.jar')
    
    // Kotlin DSL版本
    compileOnly(files("libs/myjar.jar"))
    
  • 第三步:添加Gradle复制任务
    我们需要添加一个自定义Gradle任务,把JAR文件复制到构建生成的AAR包的libs目录里。在build.gradle(或build.gradle.kts)中添加以下代码:

    Groovy版本:

    task copyJarToAar(type: Copy) {
        // 源文件:libs下的目标JAR
        from 'libs/myjar.jar'
        // 目标目录:构建输出的AAR包内的libs文件夹
        into "$buildDir/outputs/aar/${project.name}-release/libs"
        into "$buildDir/outputs/aar/${project.name}-debug/libs"
    }
    
    // 让复制任务在构建Release和Debug版本的AAR前执行
    afterEvaluate {
        tasks.findByName('assembleRelease').dependsOn(copyJarToAar)
        tasks.findByName('assembleDebug').dependsOn(copyJarToAar)
    }
    

    Kotlin DSL版本:

    val copyJarToAar by tasks.registering(Copy::class) {
        from("libs/myjar.jar")
        into("${buildDir}/outputs/aar/${project.name}-release/libs")
        into("${buildDir}/outputs/aar/${project.name}-debug/libs")
    }
    
    afterEvaluate {
        tasks.named("assembleRelease").configure {
            dependsOn(copyJarToAar)
        }
        tasks.named("assembleDebug").configure {
            dependsOn(copyJarToAar)
        }
    }
    
  • 第四步:告知依赖方处理JAR
    当其他应用引用你的AAR时,他们需要手动将AAR包内libs目录下的myjar.jar添加到自己的项目依赖中;如果你的AAR发布到Maven仓库,也可以在Library的POM配置中声明该JAR的依赖,让依赖方自动引入。

这样操作后,你的AAR构建完成时,第三方JAR就会保存在AAR的libs/目录下,不会和其他应用的同版本JAR产生代码冲突导致崩溃啦。

内容的提问来源于stack exchange,提问作者i like cat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:56:37