我正在按照this教程将自己的android应用转换为即时应用。
现在,我将我的应用程序模块分为两个:
在拆分之前,在我唯一的模块( app )中,我正在使用google-services
插件。拆分之后,我将插件移至已安装模块,因为这似乎是必需的,以便它可以从strings.xml
文件生成google-services.json
。 / p>
问题是,在 base 模块中,我有一些代码试图访问由google services插件生成的变量:R.string.default_web_client_id
,该变量现在不可用,产生了编译错误。
我需要以某种方式从 base 模块访问该生成的值,而又不引入循环依赖性...
答案 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);
}
}