You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全存储API密钥避免公开仓库泄露?合规方案咨询

符合Android官方规范的API密钥安全存储方案

1. 创建独立的密钥属性文件

  • 在项目根目录新建secrets.properties文件,写入你的API密钥:
    API_KEY=你的真实API密钥
    
  • 立刻把这个文件加入.gitignore,防止提交到公共仓库:
    # 忽略密钥配置文件
    secrets.properties
    

2. 在Kotlin DSL版build.gradle中加载属性并生成BuildConfig

在app模块的build.gradle.kts里添加以下代码,手动加载自定义属性文件并注入到BuildConfig:

// 加载自定义密钥配置文件
val secretsProps = Properties().apply {
    val secretsFile = rootProject.file("secrets.properties")
    if (secretsFile.exists()) {
        load(FileInputStream(secretsFile))
    }
}

android {
    // 其他原有配置...
    buildTypes {
        debug {
            buildConfigField(
                "String",
                "API_KEY",
                "\"${secretsProps.getProperty("API_KEY", "")}\""
            )
        }
        release {
            buildConfigField(
                "String",
                "API_KEY",
                "\"${secretsProps.getProperty("API_KEY", "")}\""
            )
            // 发布版开启混淆加固
            minifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}

注意:字符串类型的buildConfigField需要包裹双引号,所以用\"转义;如果配置文件不存在,会默认传入空字符串,避免编译报错。

3. 解决此前buildConfigField空值的问题

之前用local.properties出现空值,核心原因是官方不允许在该文件添加自定义属性,AGP可能会忽略或覆盖这类自定义配置。改用手动加载独立属性文件的方式,能完全掌控配置读取流程,不会出现空值问题。

4. 额外安全加固建议

  • 发布版混淆保护:在proguard-rules.pro中添加规则,防止API_KEY被反编译提取:
    -keep class 你的包名.BuildConfig {
        public static String API_KEY;
    }
    
    也可以让混淆器重命名BuildConfig字段,进一步提升逆向难度。
  • CI/CD适配:如果用持续集成环境,可以用系统环境变量替代本地属性文件,比如:
    val apiKey = System.getenv("API_KEY") ?: secretsProps.getProperty("API_KEY", "")
    
    这样本地开发用属性文件,CI环境直接读取环境变量,更安全灵活。
  • 绝对禁止硬编码:任何情况下都不要把API密钥直接写在代码、注释或Gradle配置里,避免泄露风险。

内容的提问来源于stack exchange,提问作者Tonnie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:21