打包生成apk文件其实没什么难度,网上教程一大堆,这也是一个App项目的最后步骤,将源程序打包生成apk文件,然后上传到应用商店发布,别人就可以用你开发的app了。

今天记录一下用Flutter打包生成apk的过程,使用的是java提供的keytool工具。

1

生成签名文件

我用的是AndroidStudio,所以就介绍AndroidStudio生成签名文件的过程。

AndroidStudio使用的是.jks后缀的签名。

我们打开命令行工具输入以下命令:

E:\flutter-projects\bottle_app>keytool -genkey -v -keystore E:\flutter-projects\sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign输入密钥库口令:再次输入新口令:您的名字与姓氏是什么?  [Unknown]:  吴您的组织单位名称是什么?  [Unknown]:  道无科技您的组织名称是什么?  [Unknown]:  道无您所在的城市或区域名称是什么?  [Unknown]:  杭州您所在的省/市/自治区名称是什么?  [Unknown]:  杭州该单位的双字母国家/地区代码是什么?  [Unknown]:  CNCN=吴, OU=道无科技, O=道无, L=杭州, ST=杭州, C=CN是否正确?  [否]:  Y正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):         CN=吴, OU=道无科技, O=道无, L=杭州, ST=杭州, C=CN输入  的密钥口令        (如果和密钥库口令相同, 按回车):[正在存储E:\flutter-projects\sign.jks]

参数说明:

-genkey:在用户主目录中创建一个默认文件".keystore"

-v:显示密钥库中的证书详细信息

-keystore:指定密钥库的名称(产生的各类信息将不在.keystore文件中)

E:\flutter-projects\sign.jks:生成签名文件存放的路径

-keysize:指定密钥长度

-validity:指定创建的证书有效期多少天

-alias:指定keystore的别名,不区分大小写

执行完上述命令就会自动生成签名证书

2

查看生成的签名文件

然后我们可以在命令行下输入以下命令查看生成的签名文件。

命令如下:

E:\flutter-projects\bottle_app>keytool -list -v -keystore E:\flutter-projects\sign.jks -alias sign -storepass bottle23.+ -keypass bottle23.+

参数说明:

-list:显示密钥库中的证书文件

-v:显示密钥库中的证书详细信息

E:\flutter-projects\sign.jks:证书存放的路径

-alias:keystore的别名,同上

-storepass:指定密钥库的密码(获取keystore信息所需的密码)

-keypass:指定别名条目的密码(私钥的密码)

成功执行后的结果:

别名: sign创建日期: 2020-6-26条目类型: PrivateKeyEntry证书链长度: 1证书[1]:所有者: CN=吴, OU=道无科技, O=道无, L=杭州, ST=杭州, C=CN发布者: CN=吴, OU=道无科技, O=道无, L=杭州, ST=杭州, C=CN序列号: 48939cd5有效期为 Fri Jun 26 15:33:36 CST 2020 至 Tue Nov 12 15:33:36 CST 2047证书指纹:         MD5:  72:77:CB:4B:8D:D6:E4:B8:52:F1:CE:28:47:DA:7D:53         SHA1: E7:C8:9B:05:6F:44:C8:97:34:62:F2:06:A2:B1:CE:DA:F9:24:D5:04         SHA256: EE:9E:98:1C:05:A3:CB:90:8F:E2:31:58:5D:51:DE:0C:1B:D9:75:97:8F:79:B8:9B:F6:37:C9:E6:94:83:48:A2签名算法名称: SHA256withRSA主体公共密钥算法: 2048 位 RSA 密钥版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: C1 DE 87 9D F4 E1 6B E9   F6 E7 82 53 9B 88 8B 00  ......k....S....0010: 17 A6 F1 B2                                        ....]]

3

配置Android Studio中的文件

在Flutter工程中的/android/app/key/sign.jks创建该目录,然后将第一步生成的签名文件拖进来。

在Flutter项目中创建/android/key.properties该文件,输入以下内容:

storePassword=you store passwordkeyPassword=you key passwordkeyAlias=you key aliasstoreFile=key/sign.jks

注意:上面的storePassword、keyPassword和keyAlias输入你自己的密码和别名。

配置Flutter项目中/android/app/build.gradle文件

里面添加以下内容:

def keystorePropertiesFile = rootProject.file("key.properties")def keystoreProperties = new Properties()keystoreProperties.load(new FileInputStream(keystorePropertiesFile))android {    signingConfigs {        release {            keyAlias 'you key alias'            keyPassword 'you key password'            storeFile file('key/sign.jks')            storePassword 'you store password'        }    }    buildTypes {        release {            // TODO: Add your own signing config for the release build.            // Signing with the debug keys for now, so `flutter run --release` works.            signingConfig signingConfigs.release        }    }}

注意:上面的storePassword、keyPassword和keyAlias输入你自己的密码和别名

下图是我的工程目录

app打包 ios App打包apk工具_apk打包工具

4

打包生成apk

在终端进入Flutter工程目录,运行以下命令会自动打包生成apk文件

flutter build apk

下面是我打包的过程:

app打包 ios App打包apk工具_app打包 ios_02

至此,一个Flutter项目打包生成apk文件就完成了,然后就可以将生成的apk文件上传到应用商店供用户下载了。