保存在gradle.properties API密钥
问题描述:
我是新来的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{}
块?
答
- 这种间接的想法是让你存储在未上传到版本控制文件API密钥:
gradle.properties
是本地文件和版本控制下不宜存放,并生成BuildConfig
类,所以它只会在构建时创建。将API密钥作为普通字符串存储在某个地方肯定比较容易,但是您必须将其提交到回购站。 - 在构建期间,Gradle将生成
BuildConfig
文件以存储一些与构建相关的常量。您可以使用buildConfigField
命令指示Gradle将自定义字段添加到BuildConfig
。项目建成后,您可以在源代码中引用这些常量。
+0
如何在manifest.xml文件中为其他API密钥使用此项? –
谢谢。你的问题帮助我配置我的项目。 –