java - 如何在 Android Studio 中存储敏感数据

标签 java android android-studio environment-variables

我的应用有一些密码和 API key 需要使用。

对于我使用过的其他开发环境,我们会制作一个 .env 文件,将我们所有的敏感数据放在那里,将该 .env 文件保存到密码管理器,然后让开发人员知道将其下拉以开始一个项目,并让项目将.env文件读入应用程序以供使用。 .env 文件永远不会提交到存储库,并设置为让 git 忽略它。

在使用 Java 的 Android 开发中执行此操作的最佳方法是什么?

最佳答案

你可以创建一个属性文件,放在你应用程序的文件夹下并将它添加到 .gitignore:

名为 passwords.properties 的属性文件的内容示例:

password1=123456
password2=qwerty

在 build.gradle 文件中的插件声明下,导入属性文件并将其加载到 Properties 对象中。

def passwordsPropertiesFile = rootProject.file("app/passwords.properties")
def passwordsProperties = new Properties()
passwordsProperties.load(new FileInputStream(passwordsPropertiesFile))

为了获得一个值,请在您的 gradle 文件中使用它:

passwordsProperties['password1']

如果您需要应用程序代码中的值,您可以将这些值添加到 defaultConfig 下的 BuildConfig:

defaultConfig {
    applicationId "some.app.id"
    minSdkVersion 21
    targetSdkVersion 30
    ...

    buildConfigField "String", "PASSWORD1", passwordsProperties['password1']

}

或者通过在 buildTypes 部分下设置 BuildConfig 变量来为特定的构建类型添加它:

buildTypes {
    debug {
        buildConfigField "String", "PASSWORD1", passwordsProperties['debug_password1']
    }
    
    prod {
        buildConfigField "String", "PASSWORD1", passwordsProperties['prod_password1']
    }
}

要在您的应用程序代码中使用该值,请使用:

BuildConfig.PASSWORD1

关于java - 如何在 Android Studio 中存储敏感数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69263361/

相关文章:

java - android studio中滚动条下按钮的文本调整

java - 如何使用适用于 Java 的 Google API 客户端库检索 youtube 缩略图

Android Studio - android :id 处的多个实现问题

android - 使用Android Studio和gradle时是否可以在项目之间共享库项目?

java - 从另一台机器通过java连接MySQL数据库

java - JBoss AS 7 数据源配置 - 事务未激活

java - 为什么 Hazelcast Map 违反了 Map 的一般契约,该契约要求在比较对象时使用 equals 方法

android - getActiveNetworkInfo() 在 API 29 中已弃用

android - 错误膨胀类 - CircularImageView

java - Play 2.1.1 构建依赖