将API密钥保存在gradle.properties中

arq*_*qam 19 api android

我是android的新手,正在开发一个项目,我看到我得到的API密钥保存gradle.properties为:

MyOpenWeatherMapApiKey="1c3ae96f93a0094e8a7chsjdgfid04aed3f10"

然后在build.gradle(module:app)我添加以下行:

buildTypes.each {
            it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey
      }
Run Code Online (Sandbox Code Playgroud)

所以,在我的主程序中,我使用这个api访问数据,其URL由这段代码获得:

final String FORECAST_BASE_URL = "http://api.openweathermap.org/data/2.5/forecast/daily?";
            final String QUERY_PARAM = "q";
            final String FORMAT_PARAM = "mode";
            final String UNITS_PARAM = "units";
            final String DAYS_PARAM = "cnt";
            final String APPID_PARAM = "APPID";
            Uri builtUri = Uri.parse(FORECAST_BASE_URL).buildUpon()
                    .appendQueryParameter(QUERY_PARAM, params[0])
                    .appendQueryParameter(FORMAT_PARAM, format)
                    .appendQueryParameter(UNITS_PARAM, units)
                    .appendQueryParameter(DAYS_PARAM, Integer.toString(numDays))
                    .appendQueryParameter(APPID_PARAM, BuildConfig.OPEN_WEATHER_MAP_API_KEY)
                    .build();
            URL url = new URL(builtUri.toString());
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是为什么要采取所有变化的紧张来将appid存储在gradle部分.我们不能直接在主程序中访问吗?

我的问题的第二部分是在gradle部分实际发生了什么,尤其是buildTypes.each{}块?

Ego*_*gor 23

  1. 这种间接的想法是允许您将API密钥存储在未上载到版本控制的gradle.properties文件中:是本地文件,不应存储在版本控制下,并且BuildConfig是生成的类,因此只会创建它在建设时.将API密钥作为普通String存储在某处肯定更容易,但是你必须将它提交给repo.
  2. 在构建期间,Gradle将生成BuildConfig文件以存储一些与构建相关的常量.您可以使用buildConfigField命令指示Gradle添加自定义字段BuildConfig.在构建项目之后,您可以在源代码中引用这些常量.


Abh*_*mal 16

将 API 密钥保存在 gradle.properties 中可能不是一个好主意。使用 local.properties 文件会更有说服力。由于 local.properties 文件默认会添加到 gitignore 文件中,因此我相信这将是添加 API 密钥的好地方。

要在本地属性中添加 API_key,您可以按照以下两个简单步骤操作。

步骤1

编辑 local.properties 文件并添加以下代码

sdk.dir=/Users/Library/Android/sdk
API_KEY=**Your Key**
Run Code Online (Sandbox Code Playgroud)

第2步

编辑应用程序级 build.gradle 文件并在其中添加“buildConfigField”,defaultConfig如下所示。

Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())

buildConfigField "String", "API_KEY", "\"${properties.getProperty('API_KEY')}\""
Run Code Online (Sandbox Code Playgroud)

请注意,根据这篇文章,您需要为字符串类型添加引号

步骤3

将您的项目与 Gradle 更改同步。

步骤4

从“构建”->“重建项目”重建您的项目。

全做完了!!现在您可以通过调用来访问密钥BuildConfig.API_KEY


小智 8

请参阅-用于在gradle属性中存储API_KEY的完整实现,以避免上载到Github。

https://richardroseblog.wordpress.com/2016/05/29/hiding-secret-api-keys-from-git/


  1. 将/gradle.properties添加到gitignore文件中。
  2. 在Gradle.properties文件中添加行 API_KEY = "CopyYourAPI_KEYhere"
  3. 在app:build.gradle中添加以下行

    buildConfigField("String", "API_KEY", API_KEY)

  4. 使用以下语句使用Key

    String API_KEY = BuildConfig.API_KEY;

将此复制到需要的地方API_KEY

这将节省您在Github中提交代码时添加和删除API_KEY的工作。

  • 这个答案比其他人更容易理解,谢谢:) (3认同)