我在Android有一个项目,里面有几个模块。
app
模块。用apply plugin: 'com.android.application'
。androidLibrary
模块。用apply plugin: 'com.android.library'
。javaLibrary
模块。用apply plugin: 'java'
。我希望在项目gradle.properties
文件中声明一些变量,并能够从javaLibrary
模块中读取它们。
根据这文档,我已经以下列方式声明了这些属性.
mysuperhost=superhost
systemProp.mysuperhost=superhost
ORG_GRADLE_PROJECT_mysuperhost=superhost
org.gradle.project.mysuperhost=superhost
..。试着用这种方式阅读,但没有成功:
System.getenv("mysuperhost");
System.getProperty("mysuperhost");
我知道如何从BuildConfig
类读取属性,但这是应用程序模块中的一个生成类(与apply plugin: 'com.android.application'
一起使用),因此对于这种特殊情况,这是行不通的。
发布于 2016-02-18 01:32:24
您关于不能使用BuildConfig的声明并不完全准确,因为只要您知道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);
发布于 2016-02-18 15:25:34
如果在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使用您的价值。
https://stackoverflow.com/questions/35470941
复制相似问题