Android-从github中排除api密钥,在代码中将api密钥存储在何处?
我想知道在android studio中存储api密钥的最佳方式是什么。我想使用gitignore将此文件从github中排除 我见过一些人在主目录中使用gradle.properties,但是api是针对我的应用程序的 我还注意到在一个新的android studio项目中有一个gradle.properties,但它可能包含我不想排除的其他内容 有人知道最好的方法吗 因此,该文件将在本地可用,我的项目将在运行时读取它,但我“可能”会忽略该文件,这样我就不会提交它,这样我就不会公开我的api密钥 我见过一些人在主目录中使用gradle.properties,但是api是针对我的应用程序的 我认为API特定于您的应用程序没有问题。我们有时也会遇到类似的情况,所以我们只是对Android-从github中排除api密钥,在代码中将api密钥存储在何处?,android,android-gradle-plugin,Android,Android Gradle Plugin,我想知道在android studio中存储api密钥的最佳方式是什么。我想使用gitignore将此文件从github中排除 我见过一些人在主目录中使用gradle.properties,但是api是针对我的应用程序的 我还注意到在一个新的android studio项目中有一个gradle.properties,但它可能包含我不想排除的其他内容 有人知道最好的方法吗 因此,该文件将在本地可用,我的项目将在运行时读取它,但我“可能”会忽略该文件,这样我就不会提交它,这样我就不会公开我的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
- 开放系统
- 高级系统设置
- 环境变量
- 向用户变量添加新变量
BuildConfig.MacOS上的{u MOVIE\u DB\u API\u令牌)
将其放入~/.gradle/gradle.properties
THE_MOVIE_DATABASE_API_KEY=***********
Android Studio Gradle int 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\u KEY
我还注意到一个local.properties文件,但不确定它是如何工作的,它特别说“不要修改此文件”,所以我认为这不是一个好的候选项共享首选项呢?共享首选项?不,我的意思是,我使用api密钥来联系需要在代码中出现的服务,但我不能将此文件提交给github,否则其他人可以看到该文件,从而看到我的api。共享首选项是在运行时存储用户设置..Ok my bad。我想我不明白你在说什么。谢谢,是的,这似乎是一个解决方案,但文件可能会增长。我看到android studio项目本身也有一个gradle.properties,但似乎它可能用于需要检查源代码管理的东西,所以它不是排除的理想候选?@Martin这只是一种方法。您还可以在构建时显式地将参数传递给gradle。您可以在build.gradle
中使用apply
命令,并包含一些定义了变量的.gradle
文件。嘿,现在听起来很酷,使用apply包含一些“other.gradle”文件。谢谢,这很好,只是出于兴趣,您有一个示例说明我如何从“new”中的代码访问这些变量吗gradle file?@Martin您可以声明项目的全局变量。这不危险吗?每个应用程序都可以在你的计算机上看到你的API令牌,如果你把它放进去的话there@DusanPlavak更好的解决方法是使用gradle.propertes
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\""
}