2016-03-01 143 views
15

我是新来的Android和上一个项目,我看到的是我得到了API密钥保存在gradle.properties作为工作:保存在gradle.properties API密钥

MyOpenWeatherMapApiKey="1c3ae96f93a0094e8a7chsjdgfid04aed3f10"

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

buildTypes.each { 
      it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey 
     } 

所以,在我的主程序,我使用这个API,其网址是由这段代码有访问数据:

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()); 

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

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

+1

谢谢。你的问题帮助我配置我的项目。 –

回答

19
  1. 这种间接的想法是让你存储在未上传到版本控制文件API密钥:gradle.properties是本地文件和版本控制下不宜存放,并生成BuildConfig类,所以它只会在构建时创建。将API密钥作为普通字符串存储在某个地方肯定比较容易,但是您必须将其提交到回购站。
  2. 在构建期间,Gradle将生成BuildConfig文件以存储一些与构建相关的常量。您可以使用buildConfigField命令指示Gradle将自定义字段添加到BuildConfig。项目建成后,您可以在源代码中引用这些常量。
+0

如何在manifest.xml文件中为其他API密钥使用此项? –