我在Android Studio中有一个带有几个模块的项目。
app
模块。使用apply plugin: 'com.android.application'
。androidLibrary
模块。使用apply plugin: 'com.android.library'
。javaLibrary
模块。使用apply plugin: 'java'
。我想在项目gradle.properties
文件中声明一些变量,并能够从javaLibrary
模块中读取它们。
我已根据this文档......
以下列方式声明属性mysuperhost=superhost
systemProp.mysuperhost=superhost
ORG_GRADLE_PROJECT_mysuperhost=superhost
org.gradle.project.mysuperhost=superhost
...并尝试以这种方式阅读它们但没有成功:
System.getenv("mysuperhost");
System.getProperty("mysuperhost");
我知道如何从BuildConfig
类中读取属性,但这是app模块中的生成类(带apply plugin: 'com.android.application'
),因此这不适用于此特定情况。
答案 0 :(得分:4)
如果您的 gradle.properties 文件中有一些值,例如 的 mysuperhost = superhost 强> 然后在 build.gradle 文件中写下以下行(从 gradle.properties 文件中获取属性并将其添加到 BuildConfig.java 类中):
// ...
// ...
android {
// Just for example
compileSdkVersion 23
// Just for example
buildToolsVersion "23.0.2"
// ...
// ...
defaultConfig {
// Just for example
minSdkVersion 14
// Just for example
targetSdkVersion 23
// This is the main idea
buildConfigField('String', 'MY_SUPER_HOST', "\"${mysuperhost}\"")
// ...
// ...
}
// ...
// ...
}
// ...
// ...
在构建项目之后,您可以通过 BuildConfig.MY_SUPER_HOST
来使用您的价值答案 1 :(得分:1)
关于无法使用BuildConfig的声明并不完全准确,因为只要您知道其完全限定的包,就可以使用Java反射来查找BuildConfig的公共静态成员。
假设生成的BuildConfig的完整包名是com.company.app.BuildConfig。您可以使用以下命令获取其Class对象:
Class<?> klass = Class.forName("com.company.app.BuildConfig");
然后您可以使用该Class对象按名称选择它的字段:
Field field = klass.getDeclaredField("BUILD_TYPE");
然后你可以得到它的价值:
String value = field.get(null);