flutter 上架国内应用市场

572 阅读4分钟

国内App备案需要提供的公钥和签名:

image.png

安卓

第一步:下载Java Development Kit (JDK)和OpenSSL

  • Java Development Kit (JDK):用于使用keytool创建签名密钥库
  • OpenSSL:用于通过签名密钥库获取公钥和签名

Java Development Kit (JDK) 安装

www.oracle.com/cn/java/tec…

  1. 安装好Java JDk后 要配置系统环境变量
  2. 打开控制面板,选择“系统和安全”,然后选择“系统”。
  3. 点击“高级系统设置”。
  4. 在“系统属性”窗口中,点击“环境变量”。
  5. 在“系统变量”部分,找到并选择Path,然后点击“编辑”。
  6. 点击“新建”并添加JDK的bin目录路径,例如C:\Program Files\Java\jdk-11\bin。
  7. 点击“确定”保存更改。

OpenSSL 安装

slproweb.com/products/Wi…

image.png 注意:light、arm和默认版本的区别

默认版本适合开发人员使用;

light版本适合用户使用;

arm版本适合ARM 处理器上使用;

我们这里教程以win64默认版本的安装为例,使用exe安装

安装就是一路下一步即可

安装完成后需要配置环境变量:和Java JDk一样,将bin目录路径添加进系统变量的path中即可

第二步:创建签名密钥库

  1. 进入 flutter项目的 android/app 目录

image.png

  1. 在app目录打开PowerShell

  2. 使用命令创建密钥库文件

keytool -genkey -v -keystore release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release-key

keytool:这是一个 Java 工具,用于管理密钥和证书。它通常与 Java Development Kit (JDK) 一起分发。

-genkey:这个选项表示生成一个密钥对(一个公钥和一个私钥),并创建一个自签名证书。

-v:启用详细输出。执行命令时,会显示生成密钥对和证书的详细信息。

-keystore release-key.jks:指定密钥库文件的名称。

-keyalg RSA:指定密钥对的算法。在这个例子中,使用 RSA 算法生成密钥对。

-keysize 2048:指定密钥的大小(以位为单位)。在这个例子中,密钥的大小是 2048 位。这是一个常见的密钥大小,提供了良好的安全性。

-validity 10000:指定证书的有效期(以天为单位)。在这个例子中,证书的有效期是 10,000 天,大约是 27 年。

-alias release-key:指定密钥对的别名。别名是一个用于标识密钥对的字符串。在这个例子中,别名是 release-key。

所以一般来说你需要修改的地方就是keystorealias的值,改成你的存储路径和文件名、改成你想要的别名

填写信息示例

输入密钥库口令:  [设置密码,如 123456]
再次输入新口令: [重复密码]
您的名字与姓氏是什么?  [开发者姓名]
您的组织单位名称?  [公司/团队名]
您的组织名称?  [公司全称]
您所在的城市或区域名称?  [如 Beijing]
您所在的省/市/自治区名称?  [如 Beijing]
该单位的双字母国家/地区代码?  [CN]

将生成的 release-key.jks 文件保存在 android/app/ 目录下

检查密钥信息和删除密钥

// 检查密钥信息
keytool -list -v -keystore release-key.jks
// 删除密钥
del release-key.jks

获取公钥、签名等信息

先导出证书(PEM 格式)

keytool -exportcert -alias "release-key" -keystore release-key.jks -file cert.pem -rfc

查看证书信息(Base64格式)

作用:

  • 检查证书内容是否正确导出
  • 检查是否包含完整的 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----
  • 确认文件编码是否被破坏
type cert.pem

获取 MD5 签名/指纹(32位大写)

openssl x509 -in cert.pem -noout -fingerprint -md5 | powershell -Command { $input | ForEach-Object { $_ -replace 'MD5 Fingerprint=|:', '' } }

openssl x509 -in cert.pem -noout -modulus

获取 SHA1 签名/指纹

openssl x509 -in cert.pem -noout -fingerprint -sha1 | ForEach-Object { $_ -replace 'SHA1 Fingerprint=|:', '' }

获取 SHA256 签名/指纹

openssl x509 -in cert.pem -noout -fingerprint -sha256 | ForEach-Object { $_ -replace 'SHA256 Fingerprint=|:', '' }

获取公钥(十六进制)

openssl x509 -in cert.pem -noout -modulus | ForEach-Object { $_ -replace '^Modulus=', '' }

查看完整的公钥

// 从证书中提取公钥信息(base64格式)
openssl x509 -in cert.pem -pubkey -noout > pubkey.pem
// 查看公钥信息
type pubkey.pem

更新项目配置

找到你的flutter项目,找到android/app/build.gradle文件,更新配置

android {
    ...
    signingConfigs {
        release {
            keyAlias 'release-key'  // 密钥别名
            keyPassword '123456'  // 密钥密码
            storeFile file('release-key.jks')  // 密钥库文件路径
            storePassword '123456'  // 密钥库密码
        }
    }