flutter每天清空,flutter自动更新

flutter项目使用jenkins自动部署

操作系统:macOS Big Sur

为昭通等地区用户提供了全套网页设计制作服务,及昭通网站建设行业解决方案。主营业务为网站建设、网站制作、昭通网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

前置需求:

ok,开始搞jenkins

1、使用homebrew安装jenkins

Terminal运行命令brew install Jenkins

2、运行jenkins

Terminal运行命令jenkins,最终出现 Jenkins is fully up and running代表运行成功

3、初始化jenkins

在浏览器地址栏输入

然后首次安装启动就会出现新手引导,根据引导操作

自定义jenkins那里选择安装推荐的插件

PS:这里我很多插件都安装失败了,这个没关系,可以进去再自己安装或者不再安装貌似也没啥影响,继续向下操作即可

最后的实例配置那,默认即可,也可以设置一个地址

PS:如果要设置的话,就是自己的电脑ip地址+8080端口就行,配置完之后系统管理里报了一个反向代理设置有误,目前没发现这个报错有什么不好的影响,这个地址也可以以后在jenkins系统管理-系统配置里改的,这个主要是用来让别的同事来访问时要用的,自己用的话就不用设置,额外说一个,如果同事电脑挂了vpn,大概率是访问不了你设置的这个地址的,退掉vpn即可

4、安装插件

进来第一步就是安装插件了,这里要用到哪些我也是根据别人的博客找的,但是由于我主要是用shell命令,所以好像很多都没用上,但是安装了也不亏。。。

gitLab Plugin、gitLab Hook Plugin、Xcode integration、keychains and provisioning profiles Management,DingTalk等

PS:说下这个Upload Keychain or Provisioning Profile File插件,这个是用来管理iOS证书和配置文件的,但是吐血的是,无论如何都传不上去,搞到头秃,最后没办法,放弃治疗,好在还有别的办法,往下看

然后DingTalk这个是在构建成功后自动通知到钉钉群的插件,我这边用到了,下面也有介绍

5、iOS相关设置

系统管理-Manage Credentials

点击 Stores scoped to Jenkins下面的域-全局,然后就可以添加全局凭据了,这里要添加的是:

Upload Keychain or Provisioning Profile File插件用不了,配置文件在这里添加也是一样的

6、Android相关设置

系统管理-系统配置-全局属性-环境变量

Android SDK设置

系统管理-全局工具配置

JDK设置

Gradle设置

7、钉钉插件通知配置

在钉钉群的设置-智能群助手-添加自定义机器人

要复制一下webhook链接,下面要用,还有关键字设置,要钉钉和jenkins一致

在jenkins系统管理-系统配置中,设置钉钉,点击测试如果群聊能收到通知就可以

8、新建任务

这里是Android和iOS各建一个,选择freestyle即可,两边别的都一样,就是shell命令不一样,下面会贴

点开新建的任务,点击配置

①描述和钉钉

②git信息

git这里是自己项目的git地址和之前全局配置的git账号密码,也可以再这里添加新的账号密码

③构建触发器和构建环境都不用选

④构建

选择执行shell,然后填写shell命令(iOS和Android我都贴上了,可以自己参考和修改)

里面的一些关键密码和文件名等,我改成了文字描述或者***,都填自己的

此shell支持的一些功能:清空指定文件夹,替换指定文件,替换指定文件的指定内容,导出安装包,上传蒲公英,安装包重命名(version+build+时间),安装包上传svn

Android apk打包shell

⑤构建后操作也不用做,保存

9、点击立即构建

如果构建失败可以点击当次构建,然后点击查看控制台输出,查看具体报错进行修改,一般来说只要androidStudio和xcode能够编译成功的话,这边问题都不大,一般都是一些小问题要改,如果构建成功,就会通知到钉钉群了

Flutter的setState(状态刷新)

Flutter有两个常用的状态类:

标记为dirty,执行的markNeedsBuild,定义在Element类中:

当前Element节点被标记为dirty,同时调用owner的scheduleBuildFor方法:

将element元素添加到全局的“脏”链表里。

BuildOwner用来管理哪些需要更新的Widget。这个owner最开始被初始化的地方在WidgetsBinding的initInstances方法中,随后初始化了onBuildScheduled方法,对应执行的是_handleBuildScheduled,定义在WidgetsBinding类中:

ensureVisualUpdate 方法定义在SchedulerBinding类中:

在提交下一帧绘制的时候会调用到scheduleFrame方法,提交给引擎绘制,看看scheduleFrame方法,也定义在SchedulerBinding类中:

提交给引擎绘制之后,会收到onDrawFrame的回调,最终执行到_handleDrawFrame方法中,对应的是handleDrawFrame方法,定义在SchedulerBinding类中:

在RendererBinding的initInstances方法中添加了一个回调到这个List中,对应的是RenderBinding的drawFrame方法,对应的节点进行绘制渲染操作。

WidgetsBinding中的drawFrame方法:

看看这里的buildScope方法,定义在BuildOwner方法中。在上面 scheduleBuildFor 方法介绍中有提到:"scheduleBuildFor 是把一个 element 添加到 _dirtyElements 链表,以便当[WidgetsBinding.drawFrame]中调用 buildScope 的时候能够重构 element。onBuildScheduled()是一个 BuildOwner 的回调"。在 drawFrame 中调用 buildOwner.buildScope(renderViewElement)更新 elements。

_dirtyElements列表在遍历的过程中执行rebuild方法,此时将所有标记为dirty的Element节点依次执行rebuild,preformRebuild,build,updateChild,update方法,执行界面更新。完成build,update操作完成之后,后续会将需要绘制的RenderObject添加到需要layout的列表中,等待绘制渲染。所有绘制完成之后将_dirtyElments列表清空,_inDirtyList标记位置为false。

提交给引擎绘制渲染

看看super.drawFrame(),这里就执行到了RendererBinding类中,定义如下:

这里就是将最终需要绘制渲染的画面提交给引擎的地方了,绘制完成之后就在界面显示更新后的视图了。

Flutter 文件路径

path_provider是flutter提供的一个获取应用存储路径的插件,它封装了统一的api来获取Android和ios两个平台的应用存储路径,提供的api如下:

getTemporaryDirectory():获取应用临时文件夹,该文件夹用来保存应用的缓存,可以随时删除用于清缓存,对应于Android的getCacheDir()和ios的NSTemporaryDirectory();

getApplicationDocumentsDirectory():获取应用安装路径,在应用被卸载的时候删除,对应Android的AppDate目录和iOS的NSDocumentDirectory目录;

getExternalStorageDirectory():获取存储卡目录,仅支持Android;

我们通过File和Directory来创建文件和文件夹时首先要获取到应用的相关路径,不然会报错;

File对象和Directory对象封装在dart:io中,使用时需要先引入该库:

Directory对象提供listSync()方法获取文件夹里的内容,该方法返回一个数组;

文件和文件夹都通过delete删除,delete异步,deleteSync同步;如果一个文件夹是非空的删除会报错,删除非空文件夹需要先清空该文件夹:

flutter对json序列化需要引入 dart:convert 库:

通过jsonEncode/jsonDecode来转换json对象:

// 将test目录下的info.json复制到test2目录下的info2.json中

引入包archive包:

压缩:

压缩前使用ZipFileEncoder先声明处理压缩的对象,调用该对象的zipDirectory方法压缩文件,该方法接受两个参数,第一个是要压缩文件/文件夹的路径,第二个是压缩包的保存路径;

解压:

Android Studio Emulator依然显示删除的device

如下,

当你添加完所有环境变量,或者多次卸掉重装android studio后,再次插入手机,或者是开启模拟器的时候,vscode或android studio都显示no devices的时候,以下简单的解决方法或许能帮到你。

1、先检查自己以往是否有安装adb。在cmd中查看adb的版本。输入:adb version。

2、如果有安装的话,建议在C:WindowsSystem和C:WindowsSystem32删除adb.exe, AdbWinApi.dll和AdbWinUsbApi.dll三个文件即可。

3、你在android studio经过了一顿操作,例如安装了一系列的sdk文件,还有创建了模拟器之后,也执行了第二步,环境变量也设置好了,在cmd中输入adb version。

这就代表了你已经彻底清除了旧版本的adb,用的是目前最新版本的adb。这个也会随着flutter upgrade的更新而更新。我今天更新了flutter版本,adb应该是最新的。

4、在管理员模式下打开cmd,输入adb devices,会看见当前已经打开了的安卓设备。

5、输入adb connect 你安卓设备的名字 。我的安卓设备名字是4ad32643。所以我就输入adb connect 4ad32543。

failed那一行不用管,这时候看回vscode或者是android studio,即会出现设备,可进行flutter的正常调试。


新闻标题:flutter每天清空,flutter自动更新
网页路径:http://ybzwz.com/article/hoicgg.html