Android - 从 github 中排除 api 键,在代码中将 api 键存储在哪里?
Android - excluding an api key from github, where to store the api key in code?
我想知道在 android studio 中存储 api 密钥的最佳方式是什么。我想使用 gitignore.
从 github 中排除这个文件
我看到有人在 HOME 目录中使用 gradle.properties,但 api 是我的应用程序特有的。
我还注意到在一个新的 android 工作室项目中有一个 gradle.properties,但这可能包含我不想排除的其他内容。
有人知道最好的方法吗?
所以该文件将在本地可用,我的项目将在运行时读取它,但我会 "maybe" gitignore 这个文件,所以我不会提交它,所以我不会公开我的 api 密钥.
I have seen some people use the gradle.properties in the HOME directory but the api is specific to my application.
我认为 API 特定于您的应用没有问题。我们有时会遇到类似的情况,所以我们只是为 gradle.properties
条目使用一些唯一的名称。像
(MY_APP_NAME)_(MY_API_NAME)_API_KEY
我们还以相同的方式将密码存储到我们的内部 Maven 存储库中,因此它们不会作为 build.gradle
文件的一部分推送到 GitHub。我可以说我们对这种方法非常满意。
我能想到的一些替代方案:
- 执行任务时显式传递参数给gradle。因此,您可以将这些参数存储在 Android Studio 配置中。
- 您可以使用
apply from: 'path-to-my-local-script.gradle'
将另一个 .gradle
文件应用到您的构建脚本(它将包含您的变量)。只是不要忘记将它添加到 .gitignore
.
您可以在 gradle 和系统路径变量的帮助下存储 api 密钥
添加新的系统 PATH 变量 THE_MOVIE_DB_API_TOKEN="XXXXX":
对于Windows OS:
- 打开系统
- 高级系统设置
- 环境变量
- 向用户变量添加新变量
将以下代码添加到build.gradle文件
apply plugin: 'com.android.application'
android {
...
defaultConfig {
...
}
buildTypes {
release {
...
}
buildTypes.each {
it.buildConfigField 'String', 'THE_MOVIE_DB_API_TOKEN', "$System.env.THE_MOVIE_DB_API_TOKEN"
}
}
}
像这样在 Java 代码中使用 API 键
BuildConfig.THE_MOVIE_DB_API_TOKEN)
在 MacOS 上将其放入 ~/.gradle/gradle.properties
THE_MOVIE_DATABASE_API_KEY=***********
Android工作室Gradle内部build.gradle
defaultConfig {
applicationId "com.sample"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildConfigField "String" , "API_KEY" , "\"$THE_MOVIE_DATABASE_API_KEY\""
}
然后在Java代码中你可以访问BuildConfig.API_KEY
我想知道在 android studio 中存储 api 密钥的最佳方式是什么。我想使用 gitignore.
从 github 中排除这个文件我看到有人在 HOME 目录中使用 gradle.properties,但 api 是我的应用程序特有的。
我还注意到在一个新的 android 工作室项目中有一个 gradle.properties,但这可能包含我不想排除的其他内容。
有人知道最好的方法吗?
所以该文件将在本地可用,我的项目将在运行时读取它,但我会 "maybe" gitignore 这个文件,所以我不会提交它,所以我不会公开我的 api 密钥.
I have seen some people use the gradle.properties in the HOME directory but the api is specific to my application.
我认为 API 特定于您的应用没有问题。我们有时会遇到类似的情况,所以我们只是为 gradle.properties
条目使用一些唯一的名称。像
(MY_APP_NAME)_(MY_API_NAME)_API_KEY
我们还以相同的方式将密码存储到我们的内部 Maven 存储库中,因此它们不会作为 build.gradle
文件的一部分推送到 GitHub。我可以说我们对这种方法非常满意。
我能想到的一些替代方案:
- 执行任务时显式传递参数给gradle。因此,您可以将这些参数存储在 Android Studio 配置中。
- 您可以使用
apply from: 'path-to-my-local-script.gradle'
将另一个.gradle
文件应用到您的构建脚本(它将包含您的变量)。只是不要忘记将它添加到.gitignore
.
您可以在 gradle 和系统路径变量的帮助下存储 api 密钥 添加新的系统 PATH 变量 THE_MOVIE_DB_API_TOKEN="XXXXX":
对于Windows OS:
- 打开系统
- 高级系统设置
- 环境变量
- 向用户变量添加新变量
将以下代码添加到build.gradle文件
apply plugin: 'com.android.application'
android {
...
defaultConfig {
...
}
buildTypes {
release {
...
}
buildTypes.each {
it.buildConfigField 'String', 'THE_MOVIE_DB_API_TOKEN', "$System.env.THE_MOVIE_DB_API_TOKEN"
}
}
}
像这样在 Java 代码中使用 API 键
BuildConfig.THE_MOVIE_DB_API_TOKEN)
在 MacOS 上将其放入 ~/.gradle/gradle.properties
THE_MOVIE_DATABASE_API_KEY=***********
Android工作室Gradle内部build.gradle
defaultConfig {
applicationId "com.sample"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildConfigField "String" , "API_KEY" , "\"$THE_MOVIE_DATABASE_API_KEY\""
}
然后在Java代码中你可以访问BuildConfig.API_KEY