如何从 java 模块中的 gradle.properties 中读取值?

How to read value from gradle.properties in java module?

我在 Android Studio 中有一个项目有几个模块。

我想在项目 gradle.properties 文件中声明一些变量,并能够从 javaLibrary 模块中读取它们。

我已根据 this 文档以下列方式声明属性...

...并尝试以这种方式阅读它们但没有成功:

我知道如何从 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

使用您的值