You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级Android Gradle Plugin 3.0.0后AAR发布时Jar内资源丢失求助

Android AAR丢失本地Jar中assets资源(AGP 3.0.0+)

我之前碰到过一模一样的问题,AGP 3.0+对本地依赖的资源处理逻辑做了重大调整,这正是导致你Jar包内assets资源丢失的核心原因。

问题根源

在AGP 2.2.2及更早版本中,构建系统会自动扫描libs/目录下的本地Jar包,将其中assets/目录的内容合并到最终生成的AAR中。但从AGP 3.0.0开始,为了优化构建性能、减少潜在的资源冲突,默认行为改为不自动包含本地Jar中的资源文件,这就直接导致你Jar里的assets/目录被完全剥离。

解决方案

你可以通过配置Android源码集(sourceSets),手动指定要纳入构建的Jar包assets资源。在你的模块build.gradle中添加以下配置:

android {
    sourceSets {
        main {
            // 遍历libs下所有Jar包,将每个Jar内的assets目录添加为构建源目录
            assets.srcDirs += fileTree(dir: 'libs', include: '*.jar').collect { zipTree(it) }
        }
    }
}

这段代码会自动解压libs/下的所有Jar包,把每个Jar内的assets/目录作为构建时的assets源目录,这样Gradle在打包AAR时就会把Jar里的图片资源一并包含进去。

额外优化:迁移到新版Maven发布插件

你当前使用的mavenuploadArchives是旧版Gradle发布插件,AGP 3.0+更推荐使用maven-publish插件来适配新的构建体系,如果你想长期兼容新版本Gradle,可以参考以下配置替换原有发布逻辑:

apply plugin: 'maven-publish'
apply plugin: 'signing'

android {
    // 把上面的sourceSets配置放在这里
    ...
}

// 配置发布构件
publishing {
    publications {
        release(MavenPublication) {
            from components.android

            artifact androidSourcesJar
            artifact androidJavadocsJar

            // 复用你原有的POM配置逻辑
            pom {
                configurePOM(project, delegate)
            }
        }
    }

    repositories {
        maven {
            // 根据版本号自动切换正式/快照仓库
            url = version.endsWith('SNAPSHOT') ? "http://private-ip" : "http://private-ip"
            credentials {
                username = 'abc'
                password = 'abc'
            }
        }
    }
}

// 签名配置(按需保留)
signing {
    sign publishing.publications.release
}

// 保留你原有的androidJavadocs、androidJavadocsJar、androidSourcesJar任务
...
// 保留你原有的configurePOM方法
...

验证方法

构建完成后,用解压工具打开生成的AAR文件,检查assets/目录是否包含Jar包中的图片资源,即可确认问题是否解决。

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

火山引擎 最新活动