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

如何在Android模块中访问coreModule内的共享资源文件?

问题解决:Android模块加载核心模块共享资源及多资源目录配置

一、修复当前多资源目录配置的问题

你之前的配置错误在于混淆了Android Gradle中的resources和assets源集:

  • sourceSets["main"].resources对应的是Android项目res目录下的编译型资源(如布局、字符串、Drawable等),这类资源会被系统编译索引,无法通过assets.open()加载。
  • assets.open()读取的是assets目录下的原始文件,需要配置sourceSets["main"].assets指向目标目录。

同时要注意路径是相对于androidModule目录的,正确配置如下:

android {
    sourceSets["main"].assets {
        // 指向coreModule下的目标资源目录,注意相对路径前缀../
        srcDirs("../coreModule/example/targeted/folder")
        // 如有其他路径,继续添加即可
        // srcDirs("../coreModule/another-resource-folder")
    }
}

修改后重新同步Gradle,就能通过assets.open("file-from-the-custom-folder")加载目标文件了。

二、核心模块存放共享资源的最佳方案

直接配置sourceSets虽然能解决问题,但更优雅且可维护的方案是将coreModule改造为Android库模块,利用Android官方的依赖机制自动共享资源:

1. 将coreModule转为Android库

修改coreModule下的build.gradle.kts,替换为Android库的配置:

plugins {
    id("com.android.library")
    kotlin("android") // 若使用Kotlin,否则可移除
}

android {
    namespace = "com.yourcompany.core" // 替换为你的包名
    compileSdk = 34 // 匹配你的项目编译SDK版本

    defaultConfig {
        minSdk = 21 // 根据需求设置最低兼容版本
    }

    buildTypes {
        release {
            isMinifyEnabled = false
        }
    }
}

dependencies {
    // 添加你的依赖,例如Kotlin标准库
    implementation(kotlin("stdlib"))
}

然后在coreModule中创建src/main/assets目录,将共享的字体、二进制文件放入该目录。

2. 在androidModule中依赖coreModule

在androidModule的build.gradle.kts中添加对coreModule的依赖:

dependencies {
    implementation(project(":coreModule"))
    // 其他原有依赖保留
}

这样配置后,Android构建系统会自动合并coreModule和androidModule的assets目录,你无需手动配置路径,直接通过assets.open("filename")就能加载coreModule中的共享资源。同时desktopModule也可以通过自身的资源读取方式(如ClassLoader.getResourceAsStream())读取coreModule中的文件,完全符合你"核心模块集中存放共享资源"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:25