5

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

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

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

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

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

4

4 回答 4

2

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

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

于 2017-07-06T07:05:04.507 回答
1

它实际上是金丝雀版本的一个错误。我们已经在这里讨论过:stackoverflow question

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

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

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

base
f1
f2
f3

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

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

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

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

于 2017-07-06T14:07:05.560 回答
1

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

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

有关 Android Instant Application 错误崩溃的Google 问题跟踪器帖子也已更新。


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

于 2017-12-08T06:57:53.537 回答
0

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

import com.company.awesomeapp.feature.R

为了这:

import com.company.awesomeapp.R

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

于 2018-12-04T12:49:40.363 回答