首页 > 解决方案 > 如何从子模块访问生成的值到父模块?

问题描述

按照教程,我正在将我的 android 应用程序转换为即时应用程序。


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

在拆分之前,在我唯一的模块(app)中,我使用的是google-services插件。拆分后,我已将插件移动到已安装的模块中,因为它似乎需要在此处才能strings.xmlgoogle-services.json文件生成。

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


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

标签: androidandroid-instant-apps

解决方案


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

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

}

推荐阅读