打包发布

调试

Flutter主要有三种运行模式

  • debug : 主要用于调试代码,可以在真机和模拟器上同时运行。我们开发时运行的正是此模式。该模式下代码执行性能较差,特别是在模拟器下。
  • profile:只能在真机上运行,不能在模拟器上运行。基本和Release模式一致,不同之处在于可以获取一些性能数据,用于性能测试。
  • release:只能在真机上运行。对性能进行了优化,减小了安装包体积大小。发布给用户使用时正式此模式,以达到最佳的性能体验。

在发布之前,可以执行以下命令测试应用的启动时间(需真机)

flutter run --trace-startup --profile

将在Flutter工程目录在build目录下生成start_up_info.json文件,输出列出了从应用程序启动到这些跟踪事件(单位:微秒)所用的时间:

  • 进入Flutter引擎时
  • 展示应用第一帧时
  • 初始化Flutter框架时
  • 完成Flutter框架初始化时

另外,在开发中遇到一些BUG,我们可以使用Android Studio的断点调试功能,通过打断点来调试应用

更多调试工具和技巧,参见 调试文档

当我们需要发布App时,检查MaterialApp中的debugShowCheckedModeBanner是否设置为false,发布时需要去除屏幕上的debug横幅

Android

在生成正式的安卓安装包前,首先需要检查权限配置

打开项目下的\android\app\src\main\AndroidManifest.xml文件,检查是否已经配置相关权限。例如,通常debug模式默认配置网络权限,而发布模式则没有,当我们的app有网络访问需求时,需要添加如下内容

<uses-permission android:name="android.permission.INTERNET"/>

除此之外,从Android9.0开始,必须强制使用HTTPS协议,否则无法访问网络。如果我们app中使用明文的HTTP协议,则还需要配置一个属性,开启HTTP支持。在application标签中配置如下属性

android:usesCleartextTraffic="true"

release模式生成APK文件

flutter build apk --release
# 也可省略release参数
flutter build apk

需要注意,直接使用以上命令,会生成包含32位和64位二进制文件的胖APK

为了减小安装包体积大小,可以使用如下命令打包。这将生成一个仅支持arm芯片的64位版本安装包。

flutter build apk --target-platform=android-arm64

该命令其他可选的参数android-arm、android-x64,分别代表仅生成支持arm 32位和Intel 64位芯片的安装包。

另外,也可以使用分包命令一次生成两个安装包。生成的两个包分别为arm 32 和 arm 64

flutter build apk --split-per-abi

关于签名

  1. 打开原生工程,选择【build】=》【generate signed bundle or apk】,可通过图形化程序生成一个签名文件
  2. 配置签名文件。打开【File】=》【Project Stucture】通过图形化方式配置签名文件

生成签名文件后,可以使用keytool -list -v -keystore app.jks来查看签名文件的信息(替换app.jks为自己的签名文件)

iOS

发布iOS应用到应用商店较为麻烦,需要花费99美元,注册Apple开发者计划,具体步骤可参见Flutter 官方文档

配置真机调试环境

环境安装参见Flutter 环境准备篇

配置Apple ID和证书

打开【Xcode】 -> 【Preferences】 -> 【Account】。添加 AppleId

手机连上电脑,确定手机的AppleID和电脑一致。选择【window】->【Devices and simulator】

在真机上启动调试。【设置】-【通用】-【设备管理】选择开发者并点击信任。

需注意,连接手机后,请全程保持手机为解锁状态。

这里编译使用flutter build ios命令生成iOS的包,但是内部测试时不建议使用该命令。因为生成的是未经优化的安装包,体积非常大,需要上传到Apple的App Store进行安全审查,通过之后会再次优化,此时产生的才是最终发布给用户的版本,安装包体积会大幅度减小。

那么我们想在内部测试时进行打包,则可以使用flutter build ios --profile命令,相比之下,该命令生成的包体积大小,最接近最终发布的安装包体积大小。

需要注意,以上命令生成的都是一个.app的包,而不是iOS的.ipa安装包,这里我们还需要一些步骤进行处理

  1. 创建一个名为Payload的文件夹
  2. 拷贝生成的.app包到Payload文件夹中
  3. .zip格式压缩Payload文件夹,生成一个压缩文件包Payload.zip
  4. 修改文件后缀名,例如Product.ipa

经过以上步骤,我们就得到了一个iOS的安装包

Web

想要发布Web版本,首先检查项目对Web的兼容情况,然后执行以下命令,发布版将生成在工程目录下的/build/web

flutter build web

服务器线上部署时,我们将生成的web目录拷贝出来,然后使用静态文件服务器进行配置,这里推荐使用Nginx。当然,我们也可以使用Aqueduct快速实现一个静态文件服务器,可参见 Aqueduct 文件服务 的文档

创建一个静态文件服务器项目

pub global run aqueduct create file_service

添加代码

  @override
  Controller get entryPoint {
    final router = Router();
    // 将路由映射到指定的文件夹
    router.route("/*").link(() => FileController("web/"));
    return router;
  }

运行服务

pub global run aqueduct serve

访问 http://localhost:8888/


公众号“编程之路从0到1”

20190301102949549

Copyright © Arcticfox 2020 all right reserved,powered by Gitbook文档修订于: 2022-05-01 12:00:54

results matching ""

    No results matching ""