只需浏览器!在线完成Flutter从编程到打包全过程

news2024/11/22 22:12:58

img

本文作者:林梓泓

引言

云端 IDE 是基于云的集成开发环境,开发人员可以远程编写运行和调试代码,无需本地安装,仅通过浏览器即可开发软件。

与传统本地开发相比,云端开发环境主要有以下的优势:

  • 快速启动项目进入开发状态,无需进行繁琐的环境配置
  • 可根据项目需求灵活调节硬件成本
  • 提供在线预览与协同编程,更好的共享和协作
  • 可方便地集成更多 devops 能力

产品简介

  • Cloud Studio 是腾讯云下的一款基于浏览器的集成式开发环境(IDE),开发者根据其提供的编码模版和预设好的开发环境可以很方便地进行项目开发页面预览
  • CODING 提供一站式研发管理平台及云原生开发工具,包括代码仓库、CI/CD、制品库、自动化测试等

本文将介绍这一个完整流程:

Cloud Studio 实现 Flutter 项目的云端编程。

再利用 CODING 的代码仓库托管代码、CI 流水线实现自动打包 APK文件 并存储在制品库

img

项目准备

我们以 Flutter 团队提供的一个教程项目为例子,演示仅通过浏览器实现一个 Flutter 项目开发的全过程。

创建项目

首先,在 CODING 中新建一个项目,命名并填写项目相关信息。如没有 CODING 团队,需要先进行免费注册。

img

代码拉取

创建完项目之后,即可在左边栏中进入代码仓库创建仓库拉取项目代码,这里我们选择点击导入

img

填写仓库地址并进行命名,点击完成创建,等待仓库导入成功后,即可看到项目代码,第一步项目准备完成。

img

img

在线编码

在上一步中,我们完成了项目准备,现在,我们可以在 Cloud Studio 中导入这个项目,进行代码编写调试预览

创建工作空间

由于 CODING 和 Cloud Studio 实现了账号互通,我们可以用 CODING 账号登录,完成账号授权。

img

登录完成后,在左下角点击创建工作空间,导入 CODING 内的代码仓库,并且选择预设好 Flutter 环境的开发环境,点击创建,等待几秒,一个崭新的工作空间即创建完成。

img

img

安装插件与依赖

Cloud Studio 与 VS Code 一样,集成了许多开发插件

我们可以通过在线安装插件来增强使用体验。

在左边栏选择扩展,安装 Flutter 和 Dart 插件,下载完成中点击重新加载即可完成插件安装。

img

打开终端,我们还需要初始化项目的依赖:

# 加载项目依赖flutter pub get

img

提示 Dart 版本太低,我们需要先更新 Flutter。

# 更新 flutter 版本,先后执行以下命令flutter channel stableflutter upgrade

img

再次执行 flutter pub get 完成依赖加载。

项目启动/调试

执行完上一步的前置步骤后,现在,我们可以启动项目****。

Cloud Studio 可以快速生成预览链接,方便分享他人展示项目在线调试

首先执行 run 命令,将项目以 web 方式启动到 9000 端口。

# 启动flutter run -d web-server --web-port 9000 --web-hostname 0.0.0.0

点击内置浏览器,即可看到预览效果 ,我们可以将这个链接分享给他人,他们可以远程打开该链接。

img

img

接下来,我们将演示如何修改代码,并通过项目热加载快速看到修改结果。

我们将会添加左边导航栏的图标,以便用户快速浏览前置图标以找到所需标签页。

找到 lib/src/shared/router.dart,替换 icon 代码,为每个导航目的地(首页、播放列表和用户)添加不同的前置图标。

const List<NavigationDestination> destinations = [ NavigationDestination(   label: 'Home',   icon: Icon(Icons.home), // Modify this line   route: '/',), NavigationDestination(   label: 'Playlists',   icon: Icon(Icons.playlist_add_check), // Modify this line   route: '/playlists',), NavigationDestination(   label: 'Artists',   icon: Icon(Icons.people), // Modify this line   route: '/artists',),];

修改完成后,在终端中输入 q 进行热加载

等待片刻,刷新页面即可看到最新的效果。

img

提交代码

Cloud Studio 也提供了图形化的源代码管理界面,左侧点击源代码管理,暂存我们刚刚修改了的文件,填写 commit message,点击提交同步更改,即可提交代码到 CODING。

img

至此,我们已经在 Cloud Studio 完成了编写调试预览

通过重复迭代,我们开发了一个满意的代码版本。

接下来,我们一起看看如何通过 CODING 持续集成流水线实现自动化打包

CODING 打包 apk 制品

首先,介绍一下什么是持续集成,以下是来自 CODING 帮助文档的介绍。

什么是持续集成?

当提交了一部分修改完成的代码后,我们总是希望可以快速得到直观且有效的反馈,及早暴露问题。在开发过程中总有一部分工作是相对机械化,易出错的(例如打包、部署)。为何不将这部分工作交给机器来做呢?仅需要轻点鼠标,起身泡杯咖啡,将部署与发布的事宜交由持续集成,把时间花在更有价值的事物上。

CODING 持续集成便是专门为此工作流而设计的得力功能。通过对每次提交的代码进行自动化的代码检查、单元测试、编译构建、甚至自动部署与发布,能够大大降低开发人员的工作负担,减少许多不必要的重复劳动,持续提升代码质量与开发效率。毫无疑问,持续集成是开发者与研发团队的福音。

因此,像代码打包这种重复性的工作,我们可以交给持续集成来完成,以下是使用步骤。

首先我们在项目的制品管理中新建一个制品,用于存放生存的 apk 文件。

img

然后在左侧导航栏点击持续集成,新建一个构建计划。

img

在自定义构建过程中选择我们刚刚创建的仓库,点击确认进入流水线编辑。

img

本次 Flutter 的打包分为 4 个部分:

  • jdk 升级(由于 CODING 构建机默认是 jdk 1.8,我们需要升级成 jdk 11)
  • 代码检出
  • 打包 apk
  • 推送到制品仓库

img

pipeline {agent anystages {  stage('jdk upgrade') {    steps {       sh 'sudo add-apt-repository ppa:openjdk-r/ppa'       sh 'sudo apt-get update'       sh 'sudo apt-get install -y openjdk-11-jdk'       sh 'java -version'    }  }  stage('检出') {    steps {      checkout([         $class: 'GitSCM',        branches: [[name: GIT_BUILD_REF]],        userRemoteConfigs: [[          url: GIT_REPO_URL,          credentialsId: CREDENTIALS_ID        ]]])      }    }    stage('打包 apk') {      steps {         sh 'sudo apt-get install --only-upgrade bash'         sh 'wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.7.6-stable.tar.xz'         sh 'tar xf flutter_linux_3.7.6-stable.tar.xz'         sh 'export PATH="$PATH:`pwd`/flutter/bin" && cd ${PROJECT_PATH} && flutter build apk'      }    }    stage('推送到制品仓库') {      steps {        codingArtifactsGeneric(files: '${PROJECT_PATH}/build/app/outputs/flutter-apk/**.apk', repoName: 'apk')      }    }  }  environment {    JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64'  }}

完成流水线后,点击立即构建

如下图,流水线已经构建成功,进入制品仓库中可以看到构建后的 apk 制品。

img

img

总结


至此,我们通过 Cloud StudioCODING 配合使用,

只使用浏览器实现了一个 Flutter 项目在云端的创建开发管理打包的全过程。

另外 Cloud Studio 还给我们提供了许多编程语言的模版和开发环境,也集成了结合腾讯云 Serverless 技术,

把前端开发项目、静态建站项目开发的部署复杂度降到最低,一键即可完成线上部署

不仅如此, Cloud Studio 中还有一个 metawork 协同套件,可以支持多人线上协同编码,可以跟同学、同事共同线上开发,实现 coding anytime anyway!

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react类组件生命周期基础总结

组件的生命周期是指组件从被创建到挂载到页面中运行起来&#xff0c;再到组件不用时卸载的过程&#xff0c;只有类组件才有生命周期&#xff08;类组件 实例化 函数组件 不需要实例化&#xff09; 生命周期新版本和旧版本的对比图如下&#xff1a; 生命周期&#xff08;constr…

大数据|Spark介绍

前文回顾&#xff1a;Hive和数据仓库 目录 &#x1f4da;为什么会有Spark &#x1f4da;Spark的基本架构和组件 &#x1f407;主要体系结构和组件 &#x1f407;Spark集群的基本结构 &#x1f407;Spark系统的基本结构 &#x1f407;Spark应用程序的基本结构 &#x1f4…

Redis:主从复制_通过此功能实现对内存上的数据更好的保护

什么是主从复制&#xff1f; 简单的意义上来讲就是一个主人带着几个奴隶&#xff0c;奴隶的全部都是主人给他的&#xff0c;刚开始的时候奴隶是一无所有&#xff0c;是主人将自己的一部分给到奴隶了。因此奴隶翻身了&#xff0c;变得有钱了&#xff0c;也就是有一定价值了&…

SYSU程设c++(第十三周)虚函数、覆盖与隐藏

虚函数 形式&#xff1a;是一个类的成员函数&#xff0c;前面有关键字 virtual 作用&#xff1a;在公有继承的派生类中会对虚函数进行重定义。 当使用基类的指针&#xff08;或引用&#xff09;调用派生类的对象的虚函数时&#xff0c;将调用该对象的虚函数的重定义版本 性质&a…

STM32单片机厨房环境油烟温湿度调节系统加湿加热排风

实践制作DIY- GC0131-厨房环境油烟温湿度调节系统 一、功能说明&#xff1a; 基于STM32单片机设计-厨房环境油烟温湿度调节系统 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C系列最小系统DHT11温度湿度传感器1个5V直流风扇 5V风扇 USB加湿器1个5V直流风扇排烟1…

RestNet详解及在pytorh下基于CIFAR10数据集的实现

1 RestNet介绍 RestNet是2015年由微软团队提出的&#xff0c;在当时获得分类任务&#xff0c;目标检测&#xff0c;图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字&#xff0c;当时他们都是微软亚研的一员。实验结果显示&…

STM32单片机蓝牙APP自动伸缩遮阳棚雨伞雨滴角度温度光强控制

实践制作DIY- GC0130-蓝牙APP自动伸缩遮阳棚 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP自动伸缩遮阳棚 二、功能介绍&#xff1a; 基于STM32F103C系列&#xff0c;LCD1602显示器&#xff0c;光敏电阻采集光强&#xff0c;雨滴传感器&#xff0c;ULN2003控制步进…

MySQL:5.6同步到5.7 GTID报错

问题描述和处理 同步到的版本为5.7.35&#xff0c;按理说在5.7种还是一个比较新的版本了&#xff0c;报错大概如下&#xff1a; 2023-05-14T05:09:47.427031Z 12 [Note] Multi-threaded slave statistics for channel : seconds elapsed 163; events assigned 67585; worke…

GD32 系列FLASH锁死解决.

1.背景描述 使用keil开发工具JLINK调试过程中偶尔出现找不到目标版&#xff0c;或存在目标版但keil调试烧录出现如下界面&#xff1a; 2.问题查询步骤 2.1检查jlink连接线是否异常&#xff1b; 2.2确定boot0和boot1设置是否正确&#xff1b; 2.3确定是否是flash读写保护 2.3.1…

K8s进阶2——二进制搭建K8s高可用集群

文章目录 一、单master资源清单二、系统初始化三、部署etcd集群3.1 生成etcd证书3.2 部署流程3.2.1 准备二进制安装文件3.2.2 创建工作目录3.2.3 创建etcd配置文件3.2.4 设置成systemd服务3.2.5 添加etcd-2和etcd-3节点3.2.6 所有节点启动etcd并设置开机启动 四、安装容器引擎&…

webpack基础

1. 当面试官问Webpack的时候他想知道什么 前言 在前端工程化日趋复杂的今天&#xff0c;模块打包工具在我们的开发中起到了越来越重要的作用&#xff0c;其中webpack就是最热门的打包工具之一。 说到webpack&#xff0c;可能很多小伙伴会觉得既熟悉又陌生&#xff0c;熟悉是…

java汽车4S店管理系统myeclipse定制开发oracle数据库网页模式java编程jdbc

一、源码特点 java汽车4S店管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助 oracle数据库&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 java汽车4S店管理系统myeclipse定制开发orac 二、功能介绍 此次系统…

漏扫工具-xray 1.9.10(文末附下载)

一、工具介绍 一款功能强大的安全评估工具 二、使用说明 1.使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描 xray webscan --basic-crawler http://example.com --html-output vuln.html 2.使用 HTTP 代理进行被动扫描 xray webscan --listen 127.0.0.1:7777 --html-outp…

Fiddler如何抓取微信小程序的包

1.简介 有些小伙伴或者是童鞋们说小程序抓不到包&#xff0c;该怎么办了&#xff1f;&#xff1f;&#xff1f;其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了&#xff0c;应该可以轻松就抓到包了。那么安卓手机小程序就比较困难&#xff0c;不是那么友好了。所以…

FMC子卡设计资料原理图450-基于ADRV9009的双收双发射频FMC子卡 数字信号处理卡 射频收发卡 基站应用 便携测试设备

FMCJ450-基于ADRV9009的双收双发射频FMC子卡 一、板卡概述 ADRV9009是一款高集成度射频(RF)、捷变收发器&#xff0c;提供双通道发射器和接收器、集成式频率合成器以及数字信号处理功能。这款IC具备多样化的高性能和低功耗组合&#xff0c;FMC子卡为2路输入&#xff0c;…

MySQL高级_第08章_索引的创建与设计原则

MySQL高级_第08章_索引的创建与设计原则 1. 索引的声明与使用 1.1 索引的分类 MySQL 的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索…

新手如何重装Win10系统 新手重装Win10系统的方法

电脑系统是电脑运行的核心&#xff0c;如果出现问题就需要重装系统。对于新手来说&#xff0c;重装电脑系统可能会显得比较困难和陌生。本文将介绍新手如何重装电脑系统Win10&#xff0c;让电脑新手也能轻松搞定。 新手重装Win10系统的方法 一、准备工作 1、下载极客狗电脑重…

canvas、svg的基本使用【数据可视化】

什么是数据可视化&#xff1f; 基本概念&#xff1a;是关于数据视觉表现形式的科学技术研究 这个概念向我们传达了两个信息&#xff1a; &#xff08;1&#xff09;数据可视化是一门学科 &#xff08;2&#xff09;数据可视化与数据和视觉有关 数据可视化简单理解&#xff0c;…

veth网卡的多队列及RPS

背景&#xff1a; 3.10内核下容器使用的veth网卡&#xff0c;默认开启的是一个队列&#xff0c;导致在某些单线程多TCP链接的应用场景下&#xff0c;出现某个CPU软中断高的情况。之前处理的方案一直是开启这个veth网卡的RPS&#xff0c;让其在多流场景下可以去分散到其它CPU上…

DSSM - 双塔经典模型(微软)

《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》论文由微软发表于 CIKM-2013。DSSM被广泛用于工业界的 召回/粗排 阶段。 模型结构 模型结构一目了然&#xff0c;非常简单&#xff0c;双塔结构&#xff1a;user侧一个塔&#xff0c;ite…