2016-03-01 93 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密鑰使用此項? –