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

3

我有一些密码和API密钥需要在我的应用程序中使用。

在我之前使用的其他开发环境中,我们会创建一个.env文件,将所有敏感数据放入其中,将该.env文件保存到密码管理器中,然后让开发人员下载它以启动项目,并让项目读取 .env文件以供使用。.env文件永远不会提交到存储库中,并设置为git忽略它。

在使用Java进行Android开发中,最好的方法是什么?


你看过这个吗:https://stackoverflow.com/search?q=%5Bandroid%5D+gitignore+api+key - Morrison Chang
build.gradle文件通常不应该提交到代码库中吗?它是自动生成的吗? - BOMEz
在我看来,build.gradle 是被检查的,因为它包含了正确的配置/库位置。也许你想到的是 gradle.properties?请参阅:https://developer.android.com/studio/build#properties-files - Morrison Chang
1个回答

4

你可以创建一个属性文件,将其放在应用程序的文件夹下并将其添加到.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']

如果您需要在应用程序代码中使用这些值,可以将这些值添加到BuildConfig中的defaultConfig部分:
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

这仅适用于单用户项目,而不适用于小企业内共享的内容。 - greysqrl
不是 .env 相同的吗? - gioravered
是的,我认为这也不是正确的方法。 - greysqrl
哦,好的。我认为对于Android项目来说这是可以的,而且这也是原帖所要求的。 - gioravered
这对我有用。只是要更正一下,它应该放在build.grade中,而不是gradle.build中,并且我需要在debug{}或release{}下的gradle文件的buildTypes段中设置它,然后通过BuildConfig.XXX在应用程序中访问它。 - BOMEz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接