Flutter蓝盾构建指南
众所周知,flutter是比较流行的跨平台方案,目前可以构建出Android,iOS,macOS,Windows,web等产物,这里只想介绍一下Android和iOS的构建产物方式,理解了这两种产物的构建,自动动手实现其他产物,应该并不是什么难事。
首先,要构建出release包,也就是用户可以安装的包,无论是在Android,还是iOS上,都是需要”证书“来签名的。两个平台对比了解如下:
平台 | 证书 | 最直接的生成方式 |
---|---|---|
Android | .jks | keytool,免费的,谁都可以任意申请 |
iOS | .p12 & .mobileprovision | 只能去苹果开发者官网申请,or公司有提供的话,比如keystore 申请,本质上都是苹果开发者中心申请,一句话,要钱的 |
说个题外话,为啥要签名,一句话,证明这个产物是你生成的。
为了不花多少代价,这里,iOS我们在keystore上申请证书,申请的过程比较简单,其步骤不懂可以找keystore助手,但我们最终需要拿到下图这些证书,尤其是发布环境。因为flutter 构建需要。
iOS配置篇
在证书申请成功的前提下,我们需要对iOS工程进行一定的配置,首先,需要下载发布环境的签名证书和描述文件,然后双击添加到系统keychain里面,相信我过程很简单。然后接下来就是需要对iOS工程进行一定的配置了,使用xcode打开iOS目录。按照红框从左到右的顺序,就可以进入描述文件配置的界面,记住,因为我们是使用公司的证书,而不是自己登录的accont来获取描述文件,因此,我们一定要记住把Automatically mange signing 给反勾选掉。
很简单,配置其实就已经OK了,但别急着打包,还要补一个文件到ios工程下面,随便命名都可以,这里为了规范,取名为ExportOptions.plist
1 |
|
在里面补充内容
1 |
|
别忘记把里面的xxx调换为你自己的BundleID,这个很重要,搞错肯定是打不出包的。好了,接下来验证一下。
在flutter工程根目录下执行:
1 |
|
不出意外,应该是可以看到
本地的准备工作也就基本上告一段落了,接下来就是去蓝盾上整流水线了。
流水线步骤比较清晰,第一个是选macOS环境,我这里选择的最新的系统,xcode14.0.1
git拉取就不必多说,原理就是把项目git clone 到工作空间下;
打包产物这里就有必要详细聊一下了
1、需要准备flutter环境,这里直接在公司的镜像上托下来,思路是直接装到工作空间下,用这个flutter来跑,避免构建机上版本冲突。脚本内容如下:
1 |
|
可以看到我们大部分工作在准备和本地一致的环境,就是为了执行 flutter build ipa --export-options-plist ./ios/ExportOptions.plist
。
2、然后就是开始构建 ipa了。
3、ipa构建好之后,将产物归档,是为了扫二维码可以安装,但我们不安装这个。
4、使用企业微信重新签名。
保存!执行起来,不出意外,可以看到构建产物中有两个ipa了,一个是使用企业证书签名过的,是可以直接在蓝盾上安装了。
Android配置篇
Android的实现过程其实比较类似,深圳还更加简单些,直接使用keystore上蓝盾的证书,思路是flutter构建出一个不签名的包。
然后使用蓝盾插件签名。
因此,我们对android下面的app目录下的build.gradle进行更改,直接把buildTypes配置成这样
1 |
|
本地执行 ,默认注意需要jdk8
1 |
|
可以看到apk可以构建成功,只不过是一个未签名的,然后由蓝盾上的签名流程的处理就好了,简单的办法是,直接在构建产物环节增加一下 Android产物的构建,过程复用,免得重新搞一个shell,又得安装一下flutter环境等。
至此,整个蓝盾构建flutter工程的Android和ios包均完毕。如果比较幸运,是可以看到产物的。
graph LR
A[输入数组] --> B[选择基准元素]
B --> C[划分数组]
C --> D[左侧子数组]
C --> E[右侧子数组]
D --> F[选择基准元素]
E --> F
F --> G[划分数组]
G --> H[左侧子数组]
G --> I[右侧子数组]
H --> J[选择基准元素]
I --> J
J --> K[划分数组]
K --> L[左侧子数组]
K --> M[右侧子数组]
L --> N[选择基准元素]
M --> N
N --> O[划分数组]
O --> P[左侧子数组]
O --> Q[右侧子数组]
P --> R[选择基准元素]
Q --> R
R --> S[划分数组]
S --> T[左侧子数组]
S --> U[右侧子数组]
T --> V[选择基准元素]
U --> V
V --> W[划分数组]
W --> X[左侧子数组]
W --> Y[右侧子数组]
X --> Z[选择基准元素]
Y --> Z
Z --> AA[划分数组]
AA --> AB[左侧子数组]
AA --> AC[右侧子数组]
AB --> B
AC --> B