我在App模块的BuildConfig中有一些配置值。我想将这些值传递给MyLib的BuildConfig,它是App模块的依赖项。可能吗?如何将BuildConfig值传递给依赖模块?
2
A
回答
1
不,我们不能这样做。相关模块无法访问App模块的BuildConfig文件。
您的问题的唯一替代解决方案是您需要添加相同的属性到您的依赖项BuildConfig文件。
1
最简单的方法是创建第三个模块(库),并将此模块添加到库模块和应用程序模块的依赖关系中。
然后把共享构建配置到共享的第三个模块。
app module <------------------ library module
^ ^
| |
| dependency |dependency
------------ third module -------
0
一般来说,BuildConfig
有静态成员。所以我会建议反思将您的BuildConfig作为模型列表保存字段/值
我们需要一个模型来包含所有类成员的字段和值。让我们把它叫做BuildConfigItem
(我建议把这个类目的地模块):
public class BuildConfigItem {
public final Field field;
public final Object object;
public BuildConfigItem(Field field, Object object) {
this.field = field;
this.object = object;
}
}
现在你可以得到BuildConfig的所有集体成员使用此方法。想法是将它们转换成可以独立于其他模块上进行检索便携式阶段,甚至不知道什么BuildConfig有:
public static ArrayList<BuildConfigItem> getBuildConfigField() {
ArrayList<BuildConfigItem> list = new ArrayList<>();
Field[] declaredFields = BuildConfig.class.getDeclaredFields();
BuildConfig buildConfig=new BuildConfig();
for (Field field : declaredFields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
try {
BuildConfigItem buildConfigItem = new BuildConfigItem(field, field.get(buildConfig));
list.add(buildConfigItem);
} catch (IllegalAccessException e) {
Log.e(TAG, "error during assigning fields: ", e);
}
}
}
return list;
}
让您的BuildConfigItem
列表:
ArrayList<BuildConfigItem> buildConfigItemArrayList = getBuildConfigField();
然后把它传递给你的模块。这里是简单的方法如何迭代该列表来获取值: for(BuildConfigItem buildConfigItem:buildConfigItemArrayList){ Log.d(TAG,buildConfigItem.field.getName()+“:”+ buildConfigItem.object); }
这里是如何列出的所有值和铸造常见类型:
for (BuildConfigItem buildConfigItem : buildConfigItemArrayList) {
if (buildConfigItem.field.getType() == String.class) {
String value = (String) buildConfigItem.object;
Log.d(TAG, "String:" + buildConfigItem.field.getName() + ":" + value);
} else if (buildConfigItem.field.getType() == int.class) {
Integer value = (Integer) buildConfigItem.object;
Log.d(TAG, "integer:" + buildConfigItem.field.getName() + ":" + value);
} else if (buildConfigItem.field.getType() == boolean.class) {
Boolean value = (Boolean) buildConfigItem.object;
Log.d(TAG, "boolean:" + buildConfigItem.field.getName() + ":" + value);
} else {
Log.d(TAG, "Other:" + buildConfigItem.field.getName() + ":" + buildConfigItem.object);
}
}
完蛋了
您需要,如果你定义BuildConfig场的自定义类型来调整这个代码。即日期或更复杂的类型。
另请注意,目标模块应该具有BuildConfig类型的所有依赖关系。 (如果你使用自己的对象来定义BuildConfig中的字段)
祝你好运。
相关问题
- 1. CPAN模块的递归依赖,如何?
- 2. 如何使用Django中的Factory Boy将值传递给依赖模型?
- 3. 如何将变量传递给模块?
- 4. 如何将库传递给节点中较低的依赖项?
- 5. 如何将依赖关系传递给Serilog Enricher?
- 6. 如何将属性传递给依赖项?
- 7. 如何将依赖关系传递给@ auth0-angular-jwt?
- 8. 传递依赖
- 9. 如何将值传递给
- 10. 与传递依赖
- 11. 将参数传递给Drupal模块
- 12. Mef,将参数传递给模块
- 13. Browserify模块依赖
- 14. 角模块依赖
- 15. 如何将一个块传递给have_selector?
- 16. 传递一个依赖对象到一个Javascript模块
- 17. 摇篮+ OSGi的Liferay7模块,包括传递依赖
- 18. 如何让maven解析本地依赖的传递依赖项
- 19. setuptools如何处理传递依赖?
- 20. 传递依赖如何排除。 - Maven的
- 21. 如何通过依赖注入将状态传递到依赖链中
- 22. 将块传递给方法
- 23. 如何捆绑循环依赖模块?
- 24. JSPM Builder:如何依赖其他模块?
- 25. 如何解决合并模块依赖
- 26. 将目标名称传递给makefile中的依赖项列表
- 27. 将jQuery依赖关系传递给角度js控制器
- 28. 将服务作为依赖项传递给服务
- 29. 将值传递给节点js模块以获得Express路由
- 30. 如何将maven模块类传递给maven插件
可能不是,你的库不依赖于应用程序模块 –