【问题标题】:How can I access generated value from child module to parent module?如何从子模块访问生成的值到父模块?
【发布时间】:2018-10-30 21:35:41
【问题描述】:

我正在按照this 教程将我的 android 应用程序转换为 instant 应用程序


目前,我已将我的应用模块拆分为两个:

  • base 包含代码的模块
  • 已安装模块,用于应用的非免安装版本

在拆分之前,在我唯一的模块(app)中,我使用了google-services 插件。拆分后,我已将插件移至 installed 模块,因为它似乎需要在该模块中,以便从 google-services.json 文件生成 strings.xml

问题是,在 base 模块中,我有一些代码试图访问由 google 服务插件生成的变量:R.string.default_web_client_id,它现在不可用,产生编译错误。


我需要以某种方式从 base 模块获得对该生成值的访问权限,而不引入循环依赖...

【问题讨论】:

  • 您可以从stackoverflow.com/questions/51035892/…获得一些关于免安装应用结构的帮助
  • 但简而言之,当您的项目构建为已安装应用程序时,基本模块将被编译为已安装模块的库。如果它是作为免安装应用构建的,则安装模块中的任何内容都将不适用于免安装应用。

标签: android android-instant-apps


【解决方案1】:

您只是无法从父模块访问子模块的类或值。

当我第一次将项目转换为模块以便将其作为即时应用程序运行时,我遇到了同样的问题。我成功应用的解决方案是在父模块的类中创建 set 方法,使用子模块中的值,并从子模块的类中调用它们。

例子:

在你的父模块中

class ParentModuleClass {
  private String defaultWebClientID = null;

  public void setDefaultWebClientID (String defaultWebClientID) {
    this.defaultWebClientID = defaultWebClientID;
  }

  private yourMethod () {
    ...
    if (defaultWebClientID != null) {
      //use defaultWebClientID
    }
    ...
  }

}

在子模块中你有这个构造函数

import com.app.parent.ParentModuleClass;
import com.app.child.R;

class ChildModuleClass {
  public ChildModuleClass (ParentModuleClass parentClassObj) {
    parentClassObj.setDefaultWebClientID(R.string.default_web_client_id);
  }

}

【讨论】:

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