android - 有没有一种安全的方法来管理 API key ?

标签 android android-gradle-plugin

我正在使用 API在我的应用程序中。我目前从 java 接口(interface)管理 API key

public interface APIContract {
    //The API KEY MUST NOT BE PUBLISH. It is possible to generate a new one for free from www.themoviedb.org
    //Remove before commit !!!
    String API_KEY = "abcdefghijklmnopqrstuvwxyz";
    /...
}

这可以完成工作。我可以使用 APIContract.API_KEY 访问 key ,但正如您在评论中看到的那样,如果我使用 git 和公共(public)存储库(我不打算发布此 key ),这是不安全的。

所以这是我的问题:是否可以将此 key 移动到另一个我可以从我的应用程序轻松访问但不会提交的地方?

我找到了 thread它使用 gradle 来存储 key ,但我需要提交 build.gradle 文件,所以它不能完成这项工作。

有人知道如何解决这个问题吗?我在 stackoverflow 中没有发现类似的问题,但也许我错过了一些东西

编辑 我喜欢将 key 移到任何 Java 代码之外的想法,因为其他人(可能是非技术人员)可以轻松管理他们自己的 key 。我正在考虑使用像 settings.gradle 这样的 gradle 文件。

最佳答案

1。将 api key 存储在 xml 文件中

将xml文件“api_keys.xml”放到“res/values/”目录下。

api_keys.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="THE_MOVIE_DB_API_TOKEN">XXXXX</string>
</resources>

在 java 代码中使用 api 键

context.getString(R.string.THE_MOVIE_DB_API_TOKEN);

2。借助 Gradle 和 gradle.properties 文件存储 API key

Example_0 Example_1

将以下行添加到 [USER_HOME]/.gradle/gradle.properties

对于 Windows 操作系统,以 Denis 用户为例:

C:\Users\Denis\.gradle

gradle.properties

MyTheMovieDBApiToken="XXXXX"

将以下代码添加到 build.gradle 文件中

build.gradle

apply plugin: 'com.android.application'

android {
    ...

    defaultConfig {
        ...
    }
    buildTypes {
        release {
            ...
        }
    }
    buildTypes.each {
      it.buildConfigField 'String', 'THE_MOVIE_DB_API_TOKEN', MyTheMovieDBApiToken
    }
}

在 java 代码中使用 api 键

BuildConfig.THE_MOVIE_DB_API_TOKEN)

3。借助 gradle 和系统路径变量存储 API key

Example_0

添加新的系统路径变量THE_MOVIE_DB_API_TOKEN="XXXXX":

对于 Windows 操作系统:

  • 开放系统
  • 高级系统设置
  • 环境变量
  • 为用户变量添加新变量

将以下代码添加到 build.gradle 文件中

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 key

BuildConfig.THE_MOVIE_DB_API_TOKEN

Link to my gist on github

关于android - 有没有一种安全的方法来管理 API key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33134031/

相关文章:

android-studio - 如何检测具有较新版本的 Android Gradle 依赖项?

android - Gradle 同步失败 : Server returned HTTP response code: 522 for URL: https://services. gradle.org/distributions/gradle-2.4-all.zip

android - 支持设计库异常

Android gridview 和自定义标题

android - 如何在 android Activity 中使用 gradle.properties 中的属性?

android - 单击Cast Mini Controller时android应用崩溃

android - 在哪里可以查看约束布局的最新版本 NUMBER?

android - toast : Difference between "this" and "getApplicationContext()"?

android - 只能在不持有的情况下执行 ImageView 的旋转

java - 无法在android中将websocket与wss连接