Skip to content

系统凭据与密钥使用规范

定义 CodeNote Android 端所有第三方凭据、密钥、端点的统一管理规范。 目标:消除硬编码、统一调用、可扩展。


1. 凭据清单

1.1 涉及的全部凭据

#凭据当前位置当前方式改后来源
1OSS EndpointOssConfiguration.kt常量硬编码credentials.properties
2OSS BucketOssConfiguration.kt常量硬编码credentials.properties
3OSS Base URLOssConfiguration.kt常量硬编码credentials.properties
4OSS FolderOssConfiguration.kt常量硬编码credentials.properties
5PNVS 方案 CodePnsManager.kt常量硬编码credentials.properties
6PNVS 方案密钥PnsManager.kt常量硬编码credentials.properties
7高德定位 API KeyAndroidManifest.xml硬编码字面量credentials.propertiesmanifestPlaceholders
8高德天气 API Key无(未接入)-credentials.properties

1.2 不改动的凭据

凭据原因
JKS storePassword / keyPassword构建配置,build.gradle.ktssigningConfigs 固有属性
OSS AccessKey ID / Secret运行时通过 STS 临时凭证获取,不硬编码在 App 内
deploy.sh 中 OSS AK/SKCI/CD 脚本凭据独立管理

2. 目录结构

codenote-android/
├── credentials.properties                  # 真实凭据(提交 git)
├── credentials.properties.example          # 模板(提交 git)

└── core/common/src/main/java/.../
    ├── OssConfiguration.kt                 # 委托到 Credentials
    └── Credentials.kt                      # 统一入口

凭据文件直接提交 git,不排除。凭据本身是项目配置的一部分,版本追踪有助于审计和回滚。


3. Build 集成

3.1 根 build.gradle.kts

kotlin
plugins {
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
}

3.2 app/build.gradle.kts

kotlin
plugins {
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

secrets {
    propertiesFileName = "credentials.properties"
    defaultPropertiesFileName = "credentials.properties.example"
}

android {
    defaultConfig {
        // 从 credentials.properties 读取 amap.key
        val credFile = file("../credentials.properties")
        if (credFile.exists()) {
            manifestPlaceholders["amapKey"] = credFile.readText()
                .lines()
                .find { it.startsWith("amap.key=") }
                ?.removePrefix("amap.key=")
                ?.trim() ?: ""
        }
    }
}

3.3 生成 BuildConfig 字段对照表

properties keyBuildConfig 字段使用位置
oss.endpointOSS_ENDPOINTCredentials.oss.endpoint
oss.bucketOSS_BUCKETCredentials.oss.bucket
oss.base_urlOSS_BASE_URLCredentials.oss.baseUrl
oss.folderOSS_FOLDERCredentials.oss.folder
pnvs.scheme_codePNVS_SCHEME_CODECredentials.pnvs.schemeCode
pnvs.auth_secretPNVS_AUTH_SECRETCredentials.pnvs.authSecret
amap.keyAMAP_KEYCredentials.amap.key / manifest
weather.keyWEATHER_KEYCredentials.weather.key

4. 新增凭据流程

1. credentials.properties 加一行       比如:new_service.api_key=xxx
2. Credentials.kt 加 object + val       object NewService { val apiKey get() = BuildConfig.NEW_SERVICE_API_KEY }
3. 使用处引用                           Credentials.newService.apiKey

5. 安全注意事项

注意说明
凭据提交 gitcredentials.properties 直接纳入版本管理,回滚可追溯
deploy.shCI 脚本凭据独立维护,不纳入此体系
签名证书密码仍写在 build.gradle.ktssigningConfigs 中(构建脚本固有属性)
OSS AK/SK服务端通过 STS 临时凭证下发,App 内不持久化 AK/SK