如何从子模块到父模块访问生成的值?

时间:2018-10-30 21:35:42

标签: android android-instant-apps

我正在按照this教程将自己的android应用转换为即时应用


现在,我将我的应用程序模块分为两个:

  • 基本模块,其中包含代码
  • 已安装模块,用于该应用的非即时应用版本

在拆分之前,在我唯一的模块( app )中,我正在使用google-services插件。拆分之后,我将插件移至已安装模块,因为这似乎是必需的,以便它可以从strings.xml文件生成google-services.json。 / p>

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


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

1 个答案:

答案 0 :(得分:0)

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

当我第一次将项目转换为模块以将其作为即时应用程序运行时,我遇到了同样的问题。我成功解决该问题的解决方案是在父模块的类中创建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);
  }

}