鸿蒙中 不同环境 配置签名信息

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

在鸿蒙(HarmonyOS)开发中,为不同环境(如开发、测试、生产)配置独立的签名信息是保证应用安全的关键步骤。以下是分环境管理签名配置的方案,包含自动化和手动两种方式:

一、签名文件准备

1. 生成不同环境的签名证书
# 开发环境证书
openssl genrsa -out dev.pem 2048
openssl req -new -key dev.pem -out dev.csr
openssl x509 -req -in dev.csr -signkey dev.pem -out dev.cer

# 生产环境证书(使用更安全的密钥长度)
openssl genrsa -out prod.pem 4096
...

2. 文件目录结构建议

project/
├── signing/
│   ├── dev/                  # 开发环境
│   │   ├── dev.p12           # PKCS12格式证书
│   │   ├── dev.cer           # 证书文件
│   │   └── devKeyStore.txt   # 密钥库密码
│   └── prod/                 # 生产环境
│       ├── prod.p12
│       ├── prod.cer
│       └── prodKeyStore.txt

二、手动配置方案(基于build-profile.json5

1. 分环境配置签名
// build-profile.json5
{
  "appSigning": {
    "default": {
      "signature": {
        "dev": {  // 开发环境
          "certPath": "signing/dev/dev.cer",
          "keyPath": "signing/dev/dev.p12",
          "keyPassword": "dev123",
          "storePassword": "dev456",
          "profile": "signing/dev/devProfile.p7b",
          "profilePassword": "dev789"
        },
        "prod": {  // 生产环境
          "certPath": "signing/prod/prod.cer",
          "keyPath": "signing/prod/prod.p12",
          "keyPassword": "${PROD_KEY_PWD}", // 推荐用环境变量
          "storePassword": "${PROD_STORE_PWD}",
          "profile": "signing/prod/prodProfile.p7b"
        }
      }
    }
  }
}
2. 编译时指定环境
# 开发环境构建
npm run build -- --env=dev

# 生产环境构建
npm run build -- --env=prod

三、自动化配置方案(基于Gradle脚本)

1. 创建签名配置脚本
// build.gradle
android {
    signingConfigs {
        dev {
            storeFile file('../signing/dev/dev.p12')
            storePassword findProperty('devStorePwd') ?: ''
            keyAlias 'devKey'
            keyPassword findProperty('devKeyPwd') ?: ''
        }
        prod {
            storeFile file('../signing/prod/prod.p12')
            storePassword System.getenv("PROD_STORE_PWD")
            keyAlias 'prodKey'
            keyPassword System.getenv("PROD_KEY_PWD")
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.dev
        }
        release {
            signingConfig signingConfigs.prod
        }
    }
}
2. 通过环境变量注入密码
# Linux/macOS
export PROD_STORE_PWD=your_password
./gradlew assembleRelease

# Windows
set PROD_STORE_PWD=your_password
gradlew assembleRelease

四、建议

  1. 敏感信息保护

    • 将密码存储在local.properties(添加到.gitignore):
      devKeyPwd=dev123
      prodKeyPwd=prod456
    • 或使用密钥管理服务(如华为云KMS)。
  2. 环境隔离

    # 开发环境使用调试证书
    npm run dev -- --signingConfig=dev
    
    # 生产构建时强制校验
    if [ "$ENV" == "prod" ] && [ ! -f "signing/prod/prod.p12" ]; then
      echo "生产证书缺失!"
      exit 1
    fi
  3. 多设备证书

    // 为不同设备类型配置签名
    "targets": {
      "phone": {
        "signing": "signing/phone/..."
      },
      "watch": {
        "signing": "signing/watch/..."
      }
    }

五、常见问题解决

1. 证书指纹冲突
# 查看证书SHA256指纹
keytool -list -v -keystore dev.p12 -storetype pkcs12
2. 动态切换环境(代码中判断)
import { config } from '@kit.AbilityKit';

const isProd = config.env === 'release'; // 根据构建类型判断
const apiUrl = isProd ? 'https://api.prod.com' : 'https://api.dev.com';

通过以上方案,可以实现鸿蒙应用签名的环境隔离,兼顾开发便捷性与生产安全性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值