如何从 java 模块中的 gradle.properties 中读取值?
How to read value from gradle.properties in java module?
我在 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
class 中读取属性,但这是在应用程序模块(带有 apply plugin: 'com.android.application'
)中生成的 class,所以这样做不适用于这种特殊情况。
您关于无法使用 BuildConfig 的说法并不完全准确,因为您可以使用 Java 反射来查找 BuildConfig 的 public 静态成员,只要您知道其完全限定包即可。
假设您生成的 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);
如果您的 gradle.properties 文件中有一些值,例如
mysuperhost=超级主机
然后在 build.gradle 文件中写入以下行(从 gradle.properties 文件中获取 属性 并将其添加到 BuildConfig.java class):
// ...
// ...
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
使用您的值
我在 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
class 中读取属性,但这是在应用程序模块(带有 apply plugin: 'com.android.application'
)中生成的 class,所以这样做不适用于这种特殊情况。
您关于无法使用 BuildConfig 的说法并不完全准确,因为您可以使用 Java 反射来查找 BuildConfig 的 public 静态成员,只要您知道其完全限定包即可。
假设您生成的 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);
如果您的 gradle.properties 文件中有一些值,例如 mysuperhost=超级主机 然后在 build.gradle 文件中写入以下行(从 gradle.properties 文件中获取 属性 并将其添加到 BuildConfig.java class):
// ...
// ...
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
使用您的值