Android Native:密钥、接口地址等敏感信息应存于何处?
两种配置存储方式的选择建议
方案1:local.properties
这种方式依托项目根目录的local.properties文件存储配置,特性与适用场景如下:
- 默认会被Android项目的
.gitignore忽略,不会提交到代码仓库,适合存储本地环境专属的路径配置(比如SDK、NDK目录)。 - 仅能在Gradle脚本中直接读取,若要在App代码中使用,需额外通过Gradle将值传递到App层(比如生成BuildConfig或资源文件)。
项目结构:
. ├── app │ ├── build.gradle │ └── src ├── build.gradle ├── gradle ├── gradlew ├── gradlew.bat ├── settings.gradle └── local.properties
Gradle读取示例:
Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def sdkDir = properties.getProperty('sdk.dir') def ndkDir = properties.getProperty('ndk.dir')
方案2:buildConfigField + 环境变量
这种方式通过Gradle的buildConfigField将环境变量的值注入自动生成的BuildConfig类中,特性与适用场景如下:
- 配置的变量可直接在App代码中调用,无需额外处理,适合存储运行时需要使用的敏感信息(如API密钥、第三方服务Token)。
- 依赖系统环境变量管理敏感值,避免将敏感信息写入代码文件,同时支持为不同构建变体(debug/release)配置不同值。
Gradle配置示例:
defaultConfig { ... buildConfigField "String", "API_KEY", "\"${System.env.API_KEY}\"" }
App代码调用示例:
println(BuildConfig.API_KEY)
选择建议
- 若存储本地环境专属的路径(如SDK/NDK目录),优先选
local.properties,这是它的原生设计用途。 - 若存储需要在App代码中直接使用的敏感配置,选
buildConfigField + 环境变量的方式,更适配App运行时的调用需求,也更符合多构建变体的配置逻辑。
内容的提问来源于stack exchange,提问作者Jakkins
相关产品推荐
相关产品推荐

