【问题标题】:Referencing resources in module引用模块中的资源
【发布时间】:2014-08-21 08:25:04
【问题描述】:

我在 Android Studio 中创建了一个模块。在模块代码中,我想显示一个使用模块中定义的布局的对话框。当我引用 net.gwtr.module.R.layout.my_dialog_layout 之类的布局时,我得到了这个异常;

java.lang.ClassNotFoundException: Didn't find class "net.gwtr.module.R$layout" on path: DexPathList[[zip file "/data/app/net.gwtr.moduletest-1.apk"],nativeLibraryDirectories=[/data/app-lib/net.gwtr.moduletest-1, /vendor/lib, /system/lib]]

我认为原因是当您将模块添加到项目时会合并资源。它没有为模块包名称创建不同的资源 ID。所以我无法从模块包中获取资源。

如何在模块代码中引用模块的资源?

编辑1: 我这样引用资源;

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.my_dialog_layout);
dialog.show();

编辑2: 我找到了一种方法,但我不想每次引用资源时都使用它。

当我通过这个获得资源 ID 时,我可以访问资源;

context.getResources().getIdentifier("my_dialog_layout", "layout", context.getPackageName())

【问题讨论】:

  • 你是如何引用 R 的?请出示您的代码。
  • 我编辑了我的问题
  • 重现你的问题:buildToolsVersion '20.0.0' Gradle 0.12.2 Android Studio 0.8.6。还使用其他资源对其进行了测试 - 未找到 R 类。
  • @ferar1988 感谢您分享您的解决方案,您是否找到了另一种更方便的方法?
  • 这里对这些问题的处理很长:stackoverflow.com/questions/62694206/…

标签: android module android-studio


【解决方案1】:

在您模块的 gradle 文件中。

你把编译你的其他模块了吗?

compile project(':othermodule')

【讨论】:

  • 是的,我可以访问任何模块类。但是模块无法访问自己的资源。
  • 你编译成apklib了吗?
  • 不,我只是在项目中创建一个新模块。
【解决方案2】:

是的,来自库的资源被合并到你的应用程序中(所以基本上在 R 下有一个全局命名空间;这就是为什么你必须小心选择模块中的资源名称,例如使用前缀,以防止意外混淆来自其他模块的资源)。

在定义库模块和您的应用程序模块中,通过资源合并,您应该能够参考R.layout.my_dialog_layout(android studio 应该自动完成)。我的项目中也有类似的情况(@jimpanzer:我在与您相同的版本下尝试过,compileSdkVersion = 16 和 20)。

一些建议:

  • 确保任何地方都没有 R 的导入语句。据我所知,如果您从应用程序模块或同一个库模块中寻址库资源,则您不需要任何资源。

  • 清理您的项目并重建,甚至可能是 android studio 缓存。在过去,有时 R.java 会搞砸。

【讨论】:

    【解决方案3】:

    我正在将一个遗留项目转换为 android studio,并设法在模块中混淆了包名称。尽管生成了 R 文件,但它位于错误的包中。

    在模块中检查资源到id的映射文件

    build->generated/source->debug->(app package)->R

    build->generated/source->release->(app package)->R

    此文件的包应与 R 的导入相匹配,例如在你的活动中

    【讨论】:

      【解决方案4】:

      导入net.gwtr.module.R.* 并像以前一样通过getResources() 访问布局

      【讨论】:

        【解决方案5】:

        我必须为资源添加包名,例如而不是R.drawable.icon,我需要com.example.brand.module_name.R.drawable.icon

        【讨论】:

          猜你喜欢
          • 2020-07-09
          • 1970-01-01
          • 2022-08-14
          • 2021-09-12
          • 2019-03-19
          • 1970-01-01
          • 2019-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多