【问题标题】:What is the preferable way to hide private information in Android Studio?在 Android Studio 中隐藏私人信息的最佳方法是什么?
【发布时间】:2019-03-09 14:43:21
【问题描述】:

我想在上传项目时隐藏 API 密钥等私人信息。所以我想知道是否有一种方法可以像在命令提示符下那样在某处设置环境变量。

例如,我想在google_maps_api.xml中隐藏我的API密钥

<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">API_KEY_HERE</string>

我如何在 Android Studio 中做到这一点?

【问题讨论】:

  • 在什么上上传项目?
  • 我的意思是我要在 GitHub 上上传我的项目。
  • 只需删除您的 api 密钥,任何需要使用您的项目的人都应该使用他们的帐户凭据从 google 获取 API 密钥
  • 你的意思是我每次将我的项目推送到 GitHub 时都应该删除我的 API 密钥部分?
  • 或者我应该将google_maps_api.xml 添加到gitignore

标签: java android google-maps environment-variables google-maps-android-api-2


【解决方案1】:

首先,您应该在 src 文件夹之外创建 .env 文件。

然后,添加

REACT_APP_WEATHER_API_KEY=123456

将 123456 替换为您的 API_KEY

在提交之前,您应该排除这个 .env 文件,以便找到.gitignore 文件并添加 .env。

你可以像这样使用这些环境变量..

 const API_KEY = process.env.REACT_APP_WEATHER_API_KEY;

现在你可以走了。

不要忘记在 .gitignore 文件中添加 .env。

更多信息see this

【讨论】:

    【解决方案2】:

    根据最佳实践,建议将所有凭据保存在 gradle.properties 中,如下所示:

    KEYSTORE_PASSWORD=password123
    KEY_PASSWORD=password789
    GOOGLE_MAP_KEY=API_KEY_HERE
    

    这个文件是 Gradle 自动导入的,所以你可以像这样使用它:

    signingConfigs {
        release {
            try {
                storeFile file("myapp.keystore")
                storePassword KEYSTORE_PASSWORD
                keyAlias "thekey"
                keyPassword KEY_PASSWORD
            }
            catch (ex) {
                throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")
            }
        }
    }
    

    要在类中使用gradle.properties,您可以参考:

    android {
        ...
        defaultConfig {
            ...
            // defining the google map key
            buildConfigField "String", "GOOGLE_MAP_KEY", MAP_KEY
        }
    }
    

    这将在&lt;package_name&gt;.BuildConfig.java 中生成并包含以下字段:

    public class BuildConfig {
        // ... other generated fields ...
        public static final String GOOGLE_MAP_KEY = "API_KEY";
    }
    

    您现在可以通过在任何类中调用 BuildConfig.GOOGLE_MAP_KEY 来直接使用 GOOGLE_MAP_KEY。

    为了保证您所有凭据的安全,请勿在您的版本控制存储库(如 Github 等)中提交 gradle.properties

    【讨论】:

    • 所以就我而言,我应该在gradle.properties 中写下我的API 密钥,然后用google_maps_api.xml 中的变量替换我的密钥?
    • 如果你想在 XML 中使用密钥,那么首先你需要像我在build.gradle 中显示的 GOOGLE_MAP_KEY 一样进行设置,然后在 BuildConfig 中生成同步之后,然后你可以像@string/GOOGLE_MAP_KEY这样的其他资源访问它
    • 更多详情请阅读本文link
    • 我最终只是将google_maps_api.xml 添加到gitignore,因为Android Studio 给我的密钥在ANdroidMaifest.xml 中被称为@string/google_maps_api_key。但感谢这个提示。很有帮助。
    • 很高兴,它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2011-07-16
    • 1970-01-01
    • 2011-11-18
    • 2015-05-10
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多