java - 在 Android Studio 中隐藏私人信息的最佳方法是什么?
问题描述
我想在上传项目时隐藏 API 密钥等私人信息。所以我想知道是否有办法像在命令提示符下那样在某处设置环境变量。
例如,我想将我的 API 密钥隐藏在google_maps_api.xml
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">API_KEY_HERE</string>
我怎样才能在 Android Studio 中做到这一点?
解决方案
根据最佳实践,建议将所有凭据保存在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 。
推荐阅读
- c++ - C++ 将字符数组转换为字符串数组
- javascript - 如何更改拖放项目的本地存储位置?
- networking - 网络 X:考虑网络指标中节点的权重,例如中介中心性
- python - 如何使用 Python 对 JSON 或文本进行排序
- sql - 如何在 Oracle SQL 中查找与字符串条件的一部分匹配但不匹配另一个条件的所有条目
- reactjs - 如何使用带有react-hook-form的yup验证模式跳过对fieldArray表单中最后一个对象的验证?
- python - 用 Python 写一个与 399、543 和 12345 相关的方程
- swashbuckle - 是否可以从 swashbuckle 文档中隐藏枚举值或名称描述?
- go - 在开发过程中解决(尚未)远程依赖项
- python - 为什么 urllib.request.urlopen() 有时会起作用?