首页 > 解决方案 > 在 Android Studio 中隐藏私人信息的最佳方法是什么?

问题描述

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

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

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

我怎样才能在 Android Studio 中做到这一点?

标签: javaandroidgoogle-mapsenvironment-variablesgoogle-maps-android-api-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
    }
}

这将生成<package_name>.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 。


推荐阅读