我是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
gradle.properties文件中:是本地文件,不应存储在版本控制下,并且BuildConfig是生成的类,因此只会创建它在建设时.将API密钥作为普通String存储在某处肯定更容易,但是你必须将它提交给repo.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/
API_KEY = "CopyYourAPI_KEYhere"在app:build.gradle中添加以下行
buildConfigField("String", "API_KEY", API_KEY)
使用以下语句使用Key
String API_KEY = BuildConfig.API_KEY;
将此复制到需要的地方API_KEY
这将节省您在Github中提交代码时添加和删除API_KEY的工作。