gradle中构建类型的自定义字段

dlu*_*cci 9 android gradle

我试图在我的build.gradle文件中嵌入一些服务器地址,但我不确定如何执行此操作.我知道在maven,你可以写

      <content.host>http://test.mysite.com</content.host>
Run Code Online (Sandbox Code Playgroud)

我可以在我的Android应用程序中使用content.host.在gradle中,我知道你可以创建一个构建类型

      buildTypes {
        testBuild.initWith(buildTypes.debug)
        testBuild{ /*test server info goes here*/ }
      }
Run Code Online (Sandbox Code Playgroud)

但我不确定如何使用相同的方法在gradle中定义content.host.是否有另一种方法可以在gradle中定义content.host,或者有没有办法向buildTypes添加自定义属性?

干杯,

Derril

Com*_*are 32

Gradle for Android提供buildConfigField,允许您将任意数据成员添加到代码生成的BuildConfig类:

  buildTypes {
    debug {
      buildConfigField "String", "SERVER_URL", '"http://test.this-is-so-fake.com"'
    }

    release {
      buildConfigField "String", "SERVER_URL", '"http://prod.this-is-so-fake.com"'
    }

    mezzanine.initWith(buildTypes.release)

    mezzanine {
        buildConfigField "String", "SERVER_URL", '"http://stage.this-is-so-fake.com"'
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的Java代码中,您可以参考BuildConfig.SERVER_URL,它将根据您在编译时选择的构建类型填充字符串.

  • 这些扩展的基本思想是,为您在构建过程中使用的口味提供额外的属性,如 versionName 等,但自定义。我尝试使用您发布的代码,然后在 gradle 构建中使用它们,而不是在我的应用程序代码中使用它们,但是当将它们作为 buildTypes.SERVER_URL 访问时,像 SERVER_URL 这样的属性在 gradle 构建文件中无法识别,所以我猜这不是内置属性的选项? (2认同)

Mar*_*ius 5

要仅使用与构建类型和产品类型无关的字段,可以按以下方式将其添加到您的字段中defaultConfig

defaultConfig {
    ...
    buildConfigField "String", "OS", '"android"'
}
Run Code Online (Sandbox Code Playgroud)

然后BuildConfig看起来像这样:

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.example.app";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "";
    public static final int VERSION_CODE = 1;
    public static final String VERSION_NAME = "1.0";
    // Fields from default config.
    public static final String OS = "android";
Run Code Online (Sandbox Code Playgroud)

}