添加微信群,试用软件
复制微信号
目前,free fish客户端已经实现了基于f l u t e r的商品详情页面的全面重构,在线效果良好。在从阿尔法出发的过程中,我们遇到了许多问题,这些问题已根据原则、通过社区或与政府合作逐一解决。现在是整理和总结的时候了。我们也希望能给其他开发者带来启发和帮助,尤其是在现有项目中引入f lutt er(混合场景),以实现渐进式重建。
鉴于存在多个问题,一个原因或解决方案,本系列的重点是解释各种问题的解决方案和想法,我们将不逐一列出问题。所有与调试/热过载相关的FL u t e r都是d e b u g模式下的FL u t e r,没有特别说明。
本系列包括三篇文章:简介、操作和在线。引言部分主要介绍了工程研发体系;操作部分介绍了混合场景下的堆栈管理和能力补充;在线部分介绍兼容性/稳定性保证和方法。
工程研发体系的关键点包括:
阿法。f z-准静态r和d结构下的混合防护林
混合动力工程的全球视角的研发结构是什么。
B工程结构
如何将f lut t e r引入现有的NAT i v e项目,如何组织项目结构,如何管理f lut t e r环境,如何编译和构建、集成和打包等。
C结构优化
在这里,我们主要介绍如何调试和优化f l u t e r(f l u t e r t o l s、i n t e l i j插件等)的工具链。
Dn a t v e启动下的f l u t e r调试
与f lut t e r启动下的集成调试不同,在此n a t v e启动下的f lut t e r调试(x c o d e/a n d r o i d s t u d i o启动,或单击图标打开应用程序)称为单独调试。单独调试可以简化f l u t e r u o l s带来的复杂性提高了调试的稳定性和灵活性。
En a t v e启动下的f l u t e r热过载
和d一样。
F联合调试
也就是说,同时调试FL u t e r和n d r o i/i o。
G持续整合
也就是说,在混合环境中构建和持续集成。
这一部分的核心逻辑是如何在对现有ios/a n d r o i d项目进行最小更改的情况下运行FL u t e r。我们可以将f l u t e r部分理解为一个单独的模块,c o a p o d s和g r a d e通过p o d library(ios)和a a r library(a n d r o id)的方式将其引入主项目。
有关具体原则和实践,请参见:
深入理解f l u t r的编译原理和优化
f l u t e r混合项目改造实践
d d f l t r t o e x i t i n g a p s
其中,我们将整套f l u t e r环境作为g i t s u b M d e进行管理,以确保团队内环境的一致性和个性化问题/需求的统一处理。
问题:当由f l u t e r启动时,n d r o i d构建缓慢。
原因:在f l u t e r工具链(f l u t e r t o l s)的逻辑中,当运行g r a d l e、g r a d l e b u i l d以执行多个编译配置的构造而不是g r a d l e a s e b l e g时,未找到n d r o i d/a p p/b u i d。
解决方案:重建一个n d r o i d项目,并使该项目应用与m o d u l e相对应的b u i d。r d l e位于一个n d r o i d/a p之下,这符合f l u t e r_ _ _ t o l s的逻辑。
原则:f l u t e r u t l s调试
A.修改f l u t e r_to l s。d a r t使其可打印
B删除f l u t e r/b i n/c a c h e/f l u t e r_ut o l s。s t a m p使f l u t r t o l s可以重建
C从f l u t e r运行构建以获取其入口参数
D使用i t e i j(或n d r o i d s t u d i o,下同)打开f l u t e r r t o l s项目,创建一个新的d a r t c o m a n d l i n e a p,并根据在步骤c中获得的输入参数配置“p r o g r a m a r g m a r u m e t s”
E开始你的f l u t r_to l调试之旅
问题:f l u t e r施工报告“o b s e r v a r y c o n e c t i n e v e r a m e d y.”,导致构建中断
原因:在重构之前,我们项目的完整编译时间很长(1000个文件的完整编译时间>10 m i n),而f l u t r i t e i j插件有一个超时逻辑,这会中断构建。
解决方案a(错误策略):定制FL u t e r i t e l i j插件(在下面的代码中修改超时),编译插件,并在一个n d r o i d s u i o中替换FL u t e r插件。一个更合理的解决方案是提到PR,但这种方法基本上是为了解决产品实现中的各种问题,所以。(此逻辑已在最新版本中删除)
原则:
转到查看FL u t e r i n t e l i j的源代码
事实上,当我们使用IDE开发FL u t e r时,我们有以下逻辑过程:
解决方案b(中间策略):ios项目的模块拆分和平台化。主体工程的施工依赖于编制的框架,这大大加快了施工时间。
原则:模块化预编译
解决方案c(最佳策略):从n a t i v e的角度进行f l u t e r调试
原理:在n a t v e启动下,f l u t e r的调试和热过载
事实上,当n a t i v e项目配置了f l u t e r支持时,在f l u t e r启动下要做的主要事情是:
A.检查f l u t e r是否需要重新生成。s n a p s h o t
B基于pu b s p e c y a ml获得依赖关系(pu b p a c k a g e s g e t),并生成插件描述文件f l u t t e r-p l u g in s和p u b s p e c l o c k
C基于f l u t e r配置(例如f r a m w r k路径、d e b u g/r e l e a s e模式、d a r t 2是否打开等)生成g e r a t dx c o n f i g(i o s)和l o c a l p r o p r t i e s(a n d r o i d)
D基于GRADLE和xCODEBUILD构建应用程序(有关FLUTER的相关构造,请参阅前一篇文章,以深入了解FLUTER的编译原理和优化)。
E基于ADB和LDB启动应用程序。
F等待应用程序中的FL u e r启动,找到o b s e r v a t o r y端口,并通过d a r t d b u g r连接以进行调试。
G找到端口后,同步h ot r e o a d所依赖的文件,并通过d a e m o n侦听命令(例如用户单击插件按钮)实现f u r e s t a r t或h ot r e o d。
从另一个角度来看,如果我们能够在n a t v e的启动下解决d a r t调试和h o t r e l o a d,那么由t o l s引起的编译速度慢等问题将不会成为问题,它还可以解决不稳定的调试环境(例如,在我们的场景中,在应用程序启动后,只有当用户单击进入详细信息页面时,才会启动FL u t t r。此时,FL u t e r t o l s可以找到o b s e r v a t o r y端口、调试和热过载,这通常不容易使用)。当从x c o d e启动包含De b u g mode f l u t e r内容的ios(与Nd r o i d类似,此处不再重复)应用程序(或单击桌面图标启动,且不会重复)时,我们需要注意b c f g。和b c,除非f l u t e r_to l s或p u b s p e c y a m l或f l u t e r配置发生更改,否则不需要重新执行。f g是r和d所依赖的调试和热过载。必须考虑如何在这种模式下支持它。
A.在IO设备上查找o b s e r v a t o r y端口
或者,可以通过IDEVICESYSLOG获取命令行。在这里,它涉及LIB i m o b i e v i c e库,其中包含i d e v i c s y s l o g、i p r o x y和其他命令。
您可以看到,ios设备上的o b s e r v a t o r y启动一个x x端口(端口号是随机的)。
B通过i p r o x y将ios设备上的端口x x映射到本地端口y
C你可以看到。此时,您可以按如下方式访问和打开o b s e r v a o r y:
o b s e r v a t o r y可用于检查与d a r t相关的许多内存和调试,此处不进行扩展。
您还可以通过ID e链接进行调试:
D配置d a r t r m o e b u g
这里需要注意的是,端口应该使用刚刚转发到计算机的端口y,搜索源路径是FL u t e r项目的根目录。
E配置完成后,单击DEBUG按钮连接到调试端口
F成功后,您可以看到d e b u g e r显示c o e c t e d(如果没有,请再次单击绿色调试按钮)
G在这之后,通常可以使用IDE设置断点并调试DART(FLUTER)代码
A.启动一个p p,进入f l u t e r页面,找到o b s e r v a t o r y端口x x x,并将其转发到计算机y(与上面的a b相同)
B在f l u t e r工程目录下,执行f l u t e r a t a c h–d e b u g-p o r t=y
C修改d a r t的源代码,然后在b中的t e r m i n a l中输入r(该输入位于上图中的't o q u i t,p r e s“q”之后)
在这里,我们用表扬取代了优秀的文案。
D您可以看到,t r m i n a l显示“i i t i a l z i n g h o t r e l o d…r e l o d…”。之后,设备上的更改生效(左下角的副本变为)
在n d r o i d下,n a t v e启动的f l u t e r调试/热过载与i o s类似,只是在获得端口时,它可以通过i d e o g c t或d b l o g c t | g r o s r v a r y,并且端口转发使用d b f o r w a r d。
上面已经描述了如何在任何时候(在FL UT r启动后)调试FL UT r。此外,我们还可以使用n d r o i d s t o的a t a c h d b u g e r o a n d r o i d p o c来调试n d r o i d,从而实现n d r o i d和f l u t r的联合调试。类似地,结合x c o d e的a t a c h t o p r o e,可以实现IO s和f l u t e r的联合调试。
目前,该团队包括n a t i v e学生和f l u t r学生,因此我们区分了f l u t e r模型和n a t i v e模型。公共设备(m ac m i n i)安装在f u t e r环境中,并负责f u t e r的建设。构建的产品以a r(a n d r o i d)或p o d库(i os)的形式集成到n a t i v e项目中(可以认为与f u t e r相关的代码是一个模块),用于构建最终产品a p k(a n d r o i d)或i p a(i o s)的c i平台也最终按产品进行集成和打包。
有关更多详细信息,请参阅:
持续整合闲置鱼类f l u t e r混合工程的最佳实践
本文主要研究混合场景下的工程研发系统。解决这个问题之后,下一步就是解决实际业务发展中遇到的问题。例如,在n a t v e和f u t e r之间相互跳跃的情况下,如何管理堆栈,如何完成功能(平台功能等)f-t-e-r无法实现的功能,以及f-t-e-p-l-g i/d a-r-t-p a c k a g e包管理的方式,请注意本系列的操作章节。
如果您对文本内容有任何疑问或更正,请告知我们。
idle fish技术团队是一支短小精悍的工程技术团队。我们不仅注重商业问题的有效解决,还推动在移动终端上突破技术堆栈分工限制(n d r o i d/i o s/h t m l 5/s e r v e r编程模型和语言的统一)和计算机视觉技术的前沿实践工作。作为休闲鱼科技团队的软件工程师,你有机会展示你的才华和勇气,并证明技术发展是改变你生活方式的动力,推动整个产品的发展和用户问题的解决。
没有供应的闲置鱼类的做法是什么?如何做到这一点?游手好闲的鱼没有货源。闲置市场规模超过万亿。二手电子商务迎来了循环经济的红利。“校园圈”真的能成为游鱼生长的第二个引擎吗?如果闲置的鱼被恶意退回怎么办?开店时如何提高闲置鱼的暴露率?