在 Android Studio 中隐藏私人信息的最佳方式是什么?

What is the preferable way to hide private information in Android Studio?

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

例如,我想在 google_maps_api.xml

中隐藏我的 API 键
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">API_KEY_HERE</string>

如何在 Android Studio 中完成?

首先,您应该在 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。

了解更多信息

根据最佳实践,建议将所有凭证保存在 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.")
        }
    }
}

要在 class 中使用 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";
}

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

In order to keep all your credentials safe do not commit gradle.properties in your version control repositories like Github etc.