Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-从github中排除api密钥,在代码中将api密钥存储在何处?_Android_Android Gradle Plugin - Fatal编程技术网

Android-从github中排除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密

我想知道在android studio中存储api密钥的最佳方式是什么。我想使用gitignore将此文件从github中排除

我见过一些人在主目录中使用gradle.properties,但是api是针对我的应用程序的

我还注意到在一个新的android studio项目中有一个gradle.properties,但它可能包含我不想排除的其他内容

有人知道最好的方法吗

因此,该文件将在本地可用,我的项目将在运行时读取它,但我“可能”会忽略该文件,这样我就不会提交它,这样我就不会公开我的api密钥

我见过一些人在主目录中使用gradle.properties,但是api是针对我的应用程序的

我认为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密钥 添加新的系统路径变量\u MOVIE\u DB\u API\u TOKEN=“XXXXX”:

对于Windows操作系统:
  • 开放系统
  • 高级系统设置
  • 环境变量
  • 向用户变量添加新变量
将以下代码添加到build.gradle文件

像这样在Java代码中使用API键


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\""
}