1

我想知道是否可以使用 gradle 为每个构建提供不同的 API 主机。理想情况下,我想通过我的代码访问常量,所以当我进行 gradle 构建时,它构建 release.apk 指向http://example.com和 debug.apk 指向http://debug .example.com

我使用以下方法实现了这一点:

buildTypes {
    debug {
        buildConfig "public final static String API_HOST = \"http://debug.example.com\";"
    }

    release {
        buildConfig "public final static String API_HOST = \"https://example.com\";"
    }
}

然而,这似乎很脏

干杯

4

3 回答 3

4

我认为今天的 Gradle 功能更好的选择是同时指定productFlavorsbuildTypes(下面的示例)。

buildTypes 控制我用什么证书签名,以及是否运行 Proguard。

productFlavors 控制预期的环境,其中包括自定义资源以及不同的包名称,因此我可以并排安装它们。

然后我在 strings.xml 中为每个变体配置我的服务器地址,并在运行时加载它。

src/dev/res/values/strings.xml
src/staging/res/values/strings.xml

“dev”变体中的 strings.xml 示例:

<string name="config_url">http://com.example.debug</string>

build.gradle 片段:

productFlavors {
    dev {
        packageName "com.example.dev"
    }

    staging {
        packageName "com.example.staging"
    }
}

buildTypes {
    debug {
        versionNameSuffix " debug"
        signingConfig signingConfigs.debug
    }

    release {
        // A release build runs Proguard, and signs with a release certificate
        zipAlign true
        runProguard true
        proguardFile 'proguard-project.txt'
        proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        signingConfig signingConfigs.release
    }
}
于 2014-01-10T03:05:29.777 回答
2

另一种方法是使用buildConfigField

buildTypes {
  debug {
    buildConfigField 'String', 'API_HOST', '"https://debug.example.com"'
  }

  release {
    buildConfigField 'String', 'API_HOST', '"https://example.com"'
  }
}

然后,您将通过在您的代码中引用它BuildConfig.API_HOST

于 2016-11-04T10:42:06.693 回答
0

因此,我最终与一位 gradleware 工程师就此进行了交谈……我最初的解决方案是正确的方法。Google/Gradle 将来会对此进行改进。

要添加多个值,请使用逗号分隔字符串。

于 2013-08-29T04:15:06.107 回答