打包生成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输入你自己的密码和别名
下图是我的工程目录
4
打包生成apk
在终端进入Flutter工程目录,运行以下命令会自动打包生成apk文件
flutter build apk
下面是我打包的过程:
至此,一个Flutter项目打包生成apk文件就完成了,然后就可以将生成的apk文件上传到应用商店供用户下载了。