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'  // 密钥库密码
        }
    }
   
相关推荐
用户938515635075 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep6 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端6 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
浮生望6 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
90后的晨仔7 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔7 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端
kyriewen8 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
谢小飞8 小时前
大文件上传很难?学会这招,GB文件秒传不是梦
前端·node.js
程序员黑豆8 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
To_OC9 小时前
别只拿 useRef 绑 DOM 了,搭配 Web Worker 解决页面卡顿才是真的香
前端·react.js·dom