如何模拟Gradle的buildConfigField以进行Travis CI构建?

4

我想将我的Android应用程序与Travis CI集成。我的应用程序需要一个API密钥,这不应该被发布在仓库中。因此,我将我的API密钥放在全局Gradle属性文件~/.gradle/gradle.properties中:

MY_SECRET_API_KEY="aaaabbbcccdddeeefff"

然后我在 app/build.gradle 文件中读取这个值(该文件位于公共存储库中),并将其设置为 buildconfig 字段:

apply plugin: 'com.android.application'

android {

    // ...

    buildTypes.each {
        it.buildConfigField "String", "API_KEY", MY_SECRET_API_KEY
    }

    // ...
}

在应用程序代码中,通过访问 BuildConfig.API_KEY 使用此 API 密钥。

我从 Travis CI 收到以下错误消息: 在 com.android.build.gradle.AppExtension_Decorated 上找不到属性 'MY_SECRET_API_KEY'。


那么 gradle.properties 文件在你的本地机器上吗? - RaGe
@RaGe,是的。gradle.properties 只存在于我的本地机器上。 - Max
Travis 在远程服务器上,对吧?它看不到你的 gradle.properties 吗? - RaGe
是的,Travis CI位于远程服务器上,因此没有gradle.properties文件。我的问题是,是否有一种方法可以配置Gradle(或Travis CI)在不发布gradle.properties到存储库的情况下构建我的项目。 - Max
1
@MichaelVescovo,是的,我使用了这个脚本的修改版本。 - Max
显示剩余3条评论
1个回答

1

使用Travis的环境变量,更具体地使用加密变量,以便安全变量的值始终在构建输出中掩盖。虽然您可以在Gradle脚本中读取Tavis env变量为System.getenv('key'),但在本地端也使用环境变量更加清晰。如果您仍想使用gradle.properties,可以这样做:

hasProperty('secret_api_key') ? secret_api_key: System.getenv('secret_api_key')

要设置Travis环境变量,请参见这里: 输入图像描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接