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'  // 密钥库密码
        }
    }
   
相关推荐
程序视点3 小时前
IObit Uninstaller Pro专业卸载,免激活版本,卸载清理注册表,彻底告别软件残留
前端·windows·后端
前端程序媛-Tian4 小时前
【dropdown组件填坑指南】—怎么实现下拉框的位置计算
前端·javascript·vue
嘉琪0014 小时前
实现视频实时马赛克
linux·前端·javascript
烛阴4 小时前
Smoothstep
前端·webgl
若梦plus4 小时前
Eslint中微内核&插件化思想的应用
前端·eslint
爱分享的程序员4 小时前
前端面试专栏-前沿技术:30.跨端开发技术(React Native、Flutter)
前端·javascript·面试
超级土豆粉4 小时前
Taro 位置相关 API 介绍
前端·javascript·react.js·taro
若梦plus5 小时前
Webpack中微内核&插件化思想的应用
前端·webpack
若梦plus5 小时前
微内核&插件化设计思想
前端
柯北(jvxiao)5 小时前
搞前端还有出路吗?如果有,在哪里?
前端·程序人生