1

我有一个带有几个 gradle 模块的 android 项目。模块之间的依赖关系如下所示:
app <-- coremodule <-- featuremodule

coremodule 中有一个资源(字符串和颜色)。

当我在功能模块的布局中使用它们时,一切正常,它们可用并且按预期工作。但是,当我尝试从功能模块中以编程方式在 Activity 中获取它们时,出现异常:未解决的参考:R

所以android:text="@string/res_from_core_module" 工作myTextView.setText(R.string.res_from_core_module) 不工作

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

4

4 回答 4

1

这种行为的原因是使用compileOnly添加 'coremodule' 依赖项。

app 模块的 build.gradle 看起来像:

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

如果使用实现(或 api)更改compileOnly一切正常

dependencies {
    ...
    implementation project(path: ':coremodule')
    ...
}
于 2019-01-19T17:10:51.510 回答
0

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

您应该在方法中显式指向 Resource 文件夹,如下所示:

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

于 2018-04-11T17:59:30.177 回答
0

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

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

    ...
}
于 2020-12-21T10:53:02.443 回答
-1

请像这样使用:

myTextView.setText(getString(R.string.res_from_core_module));
于 2018-04-11T18:53:37.697 回答