flutter 上架国内应用市场

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

安卓

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

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

Java Development Kit (JDK) 安装

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

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

OpenSSL 安装

slproweb.com/products/Wi...

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

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

light版本适合用户使用;

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

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

安装就是一路下一步即可

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

第二步:创建签名密钥库

  1. 进入 flutter项目的 android/app 目录
  1. 在app目录打开PowerShell

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

vbnet 复制代码
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的值,改成你的存储路径和文件名、改成你想要的别名

填写信息示例

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

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

检查密钥信息和删除密钥

arduino 复制代码
// 检查密钥信息
keytool -list -v -keystore release-key.jks
// 删除密钥
del release-key.jks

获取公钥、签名等信息

先导出证书(PEM 格式)

vbnet 复制代码
keytool -exportcert -alias "release-key" -keystore release-key.jks -file cert.pem -rfc

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

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

获取 SHA1 签名/指纹

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

获取 SHA256 签名/指纹

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

获取公钥信息

Base64格式的

其他作用:

  • 检查证书内容是否正确导出
  • 检查是否包含完整的 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----
  • 确认文件编码是否被破坏
bash 复制代码
type cert.pem
  1. 获取公钥(十六进制)
javascript 复制代码
// 从证书中导出公钥
openssl x509 -in cert.pem -pubkey -noout > pubkey.pem
// 提取公钥 Modulus 并转为十六进制字符串
openssl rsa -pubin -in pubkey.pem -noout -modulus | ForEach-Object { $_ -replace 'Modulus=', '' }

更新项目配置

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

java 复制代码
android {
    ...
    signingConfigs {
        release {
            keyAlias 'release-key'  // 密钥别名
            keyPassword '123456'  // 密钥密码
            storeFile file('release-key.jks')  // 密钥库文件路径
            storePassword '123456'  // 密钥库密码
        }
    }
   
相关推荐
用户52709648744904 分钟前
快速过一遍 ts
前端
yrjw6 分钟前
最新发布的一款使用ReactNative新架构支持加载的Svga动画开源插件
前端
南方kenny10 分钟前
用HTML+CSS+JS复刻了水果忍者——Vibe Coding活动摸鱼实录
前端·aigc·vibecoding
&白帝&14 分钟前
vue中常用的api($set,$delete,$nextTick..)
前端·javascript·vue.js
要加油哦~19 分钟前
vue | async-validator 表单验证库 第三方库安装与使用
前端·javascript·vue.js
阿酷tony32 分钟前
视频点播web端AI智能大纲(自动生成视频内容大纲)的代码与演示
前端·人工智能·视频ai·视频智能大纲·ai智能大纲
小李小李不讲道理43 分钟前
「Ant Design 组件库探索」三:Select组件
前端·javascript·react.js
二闹43 分钟前
TypeScript核心玩法,顺便附赠面试通关秘籍!
前端·typescript
诗和远方14939562327341 小时前
KSCrash中僵尸对象监控原理与实现
前端
XXXFIRE1 小时前
前端必学:💻Mac + Nginx 部署 Vue3 静态项目
运维·前端