无法以编程方式从另一个模块获取资源

Can't programmatically get resource from another module

我有一个包含多个 gradle 模块的 android 项目。模块之间的依赖关系如下所示:
应用 <-- 核心模块 <-- 功能模块

核心模块中有一个资源(字符串和颜色)。

当我在功能模块的布局中使用它们时,一切正常,它们可用并按预期工作。 但是,当我尝试从 featuremodule 中以编程方式在 Activity 中获取它们时,我得到一个异常:Unresolved reference: R

所以 android:text="@string/res_from_core_module" 有效 myTextView.setText(R.string.res_from_core_module) 无效 .

有谁知道为什么会发生这种情况以及如何解决这个问题?

我认为 R 指向您应用的资源。检查文件开头的导入。

您应该像这样在方法中明确指向 Resource 文件夹:

myTextView.setText(com.coremodule.R.string.res_from_core_module)

请这样使用:

myTextView.setText(getString(R.string.res_from_core_module));

出现这种行为的原因是添加 'coremodule' 依赖 compileOnly

build.gradle 应用模块看起来像:

dependencies {
    ...
    compileOnly project(path: ':coremodule')
    ...
}

如果将 compileOnly 更改为 implementation(或 api)一切正常

dependencies {
    ...
    implementation project(path: ':coremodule')
    ...
}

将此添加到所有模块以共享资源、类、功能

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])

    ...
}

最新回答!!!它将使您的应用程序模块可以访问所有内容。

dependencies {
    ...
    api project(': coremodule')
    ...
}