【问题标题】:Android instance app feature module fails to find a layout resource in the same moduleAndroid 实例应用功能模块无法在同一模块中找到布局资源
【发布时间】:2017-07-05 14:41:28
【问题描述】:

我有以下项目结构,我想将其转换为即时应用程序。安装的项目工作正常,但是当我想运行即时应用程序版本时,基本功能模块可以完美加载,但是当涉及到功能模块时,它无法从其模块中找到资源。当我将资源从功能模块移动到基本模块时,它会使用基本功能模块的完整包名来识别它们。

项目结构如下: - 应用模块 - 即时应用模块
- 基本功能模块 - com.app.base.feature - 功能模块 - com.app.feature.

在功能模块中,当资源位于功能模块本身时,找不到资源,但是当我将资源移动到基本功能模块中并按以下 com.app.base.feature.R 引用它们时找到它们。 layout.sample_layout.

编辑:获取资源编号 0x80060009 的值时没有已知包。

任何形式的帮助将不胜感激:)

【问题讨论】:

    标签: android android-resources android-instant-apps


    【解决方案1】:

    当您模块化您的应用程序时,基本功能模块无法访问该功能模块中存在的任何类或资源。然而,反之亦然。

    当您创建片段时,R 类可能会指向基本模块。尝试在访问布局时指定功能模块 R 类的完整路径,并检查它是否解决了您的问题。只需浏览所有 R 类引用,并在必要时指定基本 R 类和特性 R 类的完整路径。

    【讨论】:

      【解决方案2】:

      其实是canary版本的bug。 我们已经在这里讨论过了:stackoverflow question

      我们在官方 Android Studio 跟踪器上打开了一个错误,我在其中提供了更多信息:bug tracker

      请不要犹豫,为它加注星标,让 Google 优先考虑修复(目前为 P2)。

      通过进一步的实验,我注意到: 因此,如果我们有一个包含 4 个模块的项目:

      base
      f1
      f2
      f3
      

      f3 即时模块(按字母顺序排列的最后一个)将正常工作,并将正确链接它自己的所有资源。 另一方面,f1f2 将使用 f3 模块中的资源而不是它们自己的资源,因此它们要么崩溃,要么它们的布局/图像/字符串真的搞砸了。

      最后,问题只发生在通过 XML 引用资源的资源(即从布局中引用可绘制对象或在布局的两个元素之间建立约束)。 因此:

      • <ImageView android:src="@drawable/icon"/> --> 将显示 问题
      • 但是在java中image.setDrawable(R.drawable.icon)-->会工作 正确

      另外,关于您的编辑 1: 我还在第二个跟踪器中报告了第二个错误:bug tracker。在这种情况下,如果您在布局中添加 XML 标记或在其布局中使用 XML 标记的片段。即时应用程序将崩溃。如果您发现这也是您的原因,请为该错误加注星标。

      【讨论】:

        【解决方案3】:

        最新的构建工具已修复此问题。

        • 请将您的 Android SDK Build-Tools 更新到 27.0.2 版本。
        • 确保您使用的是 Android Studio 3.0.1 或更高版本。

        关于 Android Instant Application 错误崩溃的Google issue tracker post 也已更新。


        注意:错误链接:issuetracker.google.com/issues/62935326 也可能在最新的 Android Build-Tools 27.0.2 推出中得到解决,因为它也与丢失/错误引用的资源有关。

        【讨论】:

          【解决方案4】:

          当我在没有支持库的情况下创建具有 Instant App 和 Kotlin 支持的项目时,我发现了类似的问题。 Android Studio 智能感知没有为资源添加正确的导入。所以,我改变了那个导入:

          import com.company.awesomeapp.feature.R
          

          为此:

          import com.company.awesomeapp.R
          

          一切正常。我的想法是:对于模块化应用程序,智能感知不知道什么是正确的引用,所以,项目在编译时就坏了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-28
            • 1970-01-01
            相关资源
            最近更新 更多