首页
学习
活动
专区
圈层
工具
发布

Flutter包大小治理上的探索与实践

动态下发 对于静态资源,理论上是Android和iOS都可以做到动态下发。而对于代码逻辑部分的编译产物,在Android平台支持可执行产物的动态加载,iOS平台则不允许执行动态下发的机器指令。...三、基于动态下发的Flutter包大小优化方案 我们在Android和iOS上实现的包大小优化方案有所不同,区别在于Android侧可以做到so和Flutter资源的全部动态下发,而iOS侧由于系统限制无法动态下发可执行产物...当将产物动态下发后,还需要对引擎的初始化流程做修改,这样才能保证产物的正常加载。由于两端技术栈的不同,在很多具体实现上都采用了不同的方式,下面就分别来介绍下两端的方案。...3.1 iOS侧方案 在iOS平台上,由于系统的限制无法实现在运行时加载并运行可执行文件,而在上文产物介绍中可以看到,占比较高的App及Flutter这两个均是可执行文件,理论上是不能进行动态下发的,实际上对于...图7 Flutter产物拆分流程示意图 3.1.2 工程化方案 在完成了App数据段与代码段分离的工作后,我们就可以将数据段及资源文件通过动态下发、运行时加载的方式来实现包体积的缩减。

1.9K21

App Thinning Xcode9打包选择

On-Demand资源(适用于iOS系统) On-Demand资源指的是你可以通过关键词和命令的方式进行分组归类的资源,比如图像和音频,App Store会把这些资源放在苹果服务器上并且为你管理下载。...OS X和iOS也使用了这样方式管理本地化资源,根据用户的偏好语言加载需要的资源文件。 本文件提供有关OS X和iOS系统支持的资源类型信息以及你如何在写代码的时候使用这些资源的指导。...在阅读本文档之前,你需要熟悉应用包体的组织结构,理解这个结构可以让管理变得更容易,并且寻找你的应用所需要使用的资源也更为便捷。 应用可以包含很多类型的资源,但有些资源是由iOS和OS X直接支持的。...在iOS和Mac应用中,图像、音频和影响资源的重要性很高,图像可以用来创造独特的视觉风格,音频和影像文件同样可以强化整体的用户应用体验,同时可以简化代码。...可以使用on-demand资源获得优势的应用包扩: 1.初始化资源延迟加载的应用,这些应用的一些资源属于应用的主要功能,但在初次登录的时候却用不到,资源会被标记为需要初始化,当应用运行的时候,操作系统会自动下载这些资源

68820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter 多引擎渲染,在稿定 App 的实践(三):躺坑篇

    Flutter 为什么需要升级到 2.5.3 2.10.5 3.0.5 先是在“稿定设计 APP”中接入 FlutterEngineGroup 发现,编译没有问题,但就是死活无法正常显示 FlutterView...第二步,想到另一个页面也是同时布局多个 FlutterView,但在未先单独加载一个 FlutterView 也可以正常使用,对比代码发现: 是因为布局时机上不同: - (void)init ... {...FlutterView 透明部分无法传递事件的问题 在 iOS 上,FlutterView 透明部分想要让底层接收到事件 控制 userInteractionEnabled=NO 可以暂时解决 但并不是一个最佳的实现方案吧...S. sqlite 使用需谨慎 背景是上线前测试发现,部分 Android 设备在第一次安装后出现图片展示失败的问题,但重开后就又正常的。排查上,也并没触发图片加载失败的日志。...也思考下 iOS 为什么不会出现这个问题,因为 iOS FlutterEngineGroup 设计上,一个 Group 中多个引擎都只使用同一个 iO 线程、raster 线程,所以对 sqlite 来说没有产生并发问题

    2.5K20

    小红书鸿蒙 OS 下的性能优化探索与实践

    内容亮点: 详细了解小红书在鸿蒙 OS 上的性能优化实践案例; 对比 Android/iOS 端的类同性能优化场景,以前端视角展示鸿蒙 OS 上特有的能力上有何不同。...并行化能力 在并行化能力方面,鸿蒙 OS 提供了两套基础实现方式。开发者可以通过 RTS(运行时系统)实现并行化,也可以通过底层库(如 C++ 标准库中的)实现。...此外,TaskGroup 不支持 SDK 初始化包的加载。某些同学习惯在异步线程中触发 SDK 的行为,在鸿蒙 OS 上可能会因 TaskPool 生命周期结束而导致变量被释放。...进一步分析这些.so 文件与 RTS(运行时系统)的关联,以及它们所引入的 Napi 的 TS 文件。我们进行了懒加载潜在对象的分析,发现许多 RTS 实际上并不需要的类文件已经被加载。...这引发了一个问题:为什么华为不默认采用全懒加载方式,即只有在使用时才加载类文件呢?

    43210

    APP生成与运行(二)

    二、main函数启动之前 Mach-O可执行文件 Mach-O文件格式是 OS X 与 iOS 系统上的可执行文件格式,像我们编译过程产生的.O文件,以及程序的可执行文件,动态库等都是Mach-O文件。...Framework 库:动态库和对应的头文件和资源文件的集合 Mach-O的结构如下: Header 头部,包含可以执行的CPU架构,比如x86,arm64 Load commands 加载命令,包含文件的组织架构和在虚拟内存中的布局方式...更多Mach-O可查看《Mac OS X ABI Mach-O File Format Reference》 有两种方式可以查看一个APP动态调用的系统可执行文件 1、通过machoview,选择APP...iOS Framework 除了上面提到的 .a 和 .dylib/.tbd 之外,Mac OS/iOS 平台还可以使用 Framework。...为什么 iOS 8 要添加动态库的支持?唯一的理由大概就是 Extension 的出现。

    1.4K10

    小红书APP的全新鸿蒙NEXT端性能优化技术实践

    4、并行化能力在并行化能力方面,鸿蒙 OS 提供了两套基础实现方式。开发者可以通过 RTS(运行时系统)实现并行化,也可以通过底层库(如 C++ 标准库中的)实现。...此外,TaskGroup 不支持 SDK 初始化包的加载。某些同学习惯在异步线程中触发 SDK 的行为,在鸿蒙 OS 上可能会因 TaskPool 生命周期结束而导致变量被释放。...进一步分析这些.so 文件与 RTS(运行时系统)的关联,以及它们所引入的 Napi 的 TS 文件。我们进行了懒加载潜在对象的分析,发现许多 RTS 实际上并不需要的类文件已经被加载。...通过减少需要加载的类文件数量,我们可以显著提高应用的启动速度。华为还提供了一种懒加载的导入方式,只有在真正需要使用某个类时,它才会被加载。这种懒加载机制有助于减少应用启动时的资源消耗。...这引发了一个问题:为什么华为不默认采用全懒加载方式,即只有在使用时才加载类文件呢?

    43110

    当creator遇上protobufjs—叛逆成长

    上图是在Safari浏览器的调试界面,可以非常方便地在命令控制台上查看jsb上的对象、属性和方法,充分利用命令控制台的交互能力,它是学习js和cocos隐藏API的绝佳手段,特别是jsb函数。 2....通过这个nameMap我明白了为什么在Creator中可以直接require('文件名'),而不需要完整路径,同时也明白了为什么js文件不能同名的原因。...二、一波三折 模拟的fs\path模块目前不能正常工作在Creator1.7模拟器,但在浏览器、自编译的MacApp、iOS、Android上都能正常运行。...protobufjs库不能通过伪装的方式在creator1.7模拟器上工作,同时要考虑到pbkiller用户的同步加载习惯,不能单纯地使用cc.loader.loadRes的异步加载方案。...应对办法 已经实验过在js语言中,为已经存在的函数赋值,可以在运行时修改函数的表现,它是实现继承、多态或勾子常见的做法,这是一个实用的技术。

    74630

    黑神话上线了,想起来学Lua了?

    带着这样的疑问,我们发现,在以前那个没技术可选、机器性能受限的年代,受制于开发成本、社区资源、霸道的 iOS 平台,我们的选择颇为有限。...脚本类与AOT类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。无需额外写特殊代码、无代码生成,几乎没有限制。...我们的方案中为了达到简洁少依赖的目的,采用 Asset Bundle 打包热更新资源与代码,包括场景资源以及代码 dll,并动态加载并动态绑定给物体(这里后续需要做一些安全校验保证文件在传输中不被篡改)...正确拉取服务端的 Asset Bundle 包,加载其中资源与代码,并执行其中的业务入口方法。在指定路径缓存上次更新好的 Asset Bundle 包,快速加载。...资源热更新: 实现了了从 AB 包资源中加载图中物体 Cube(Clone)。

    44010

    iOS开发笔记(九)— 数据库、Crash、内存问题分析

    寄存器和模块加载地址 问题定位:在本例中,查看上图知道,lr寄存器的地址是在第一个模块的加载区间内,以此作为线索。...后记: 该问题只出现在iOS 8。在iOS 11的机型上,通过调试我们可以获取到self.data=...这一行在执行时,关于self的内存引用情况: ?...场景1 下面这段代码是否能够正常运行? 如果可以,结果是什么? 如果不可以,是为什么?...如果可以,结果是什么? 如果不可以,是为什么?...而在加入新公司的第二个年头,我慢慢已经在iOS上的收获越来越少。 从笔记的新增情况来看,就可以发现:每天大多数是重复性劳动! 尝试看过一些iOS相关的书籍,但总感觉收获不大。

    1K20

    黑神话上线了,想起来学Lua了?

    带着这样的疑问,我们发现,在以前那个没技术可选、机器性能受限的年代,受制于开发成本、社区资源、霸道的 iOS 平台,我们的选择颇为有限。...脚本类与AOT类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。无需额外写特殊代码、无代码生成,几乎没有限制。...我们的方案中为了达到简洁少依赖的目的,采用 Asset Bundle 打包热更新资源与代码,包括场景资源以及代码 dll,并动态加载并动态绑定给物体(这里后续需要做一些安全校验保证文件在传输中不被篡改)...正确拉取服务端的 Asset Bundle 包,加载其中资源与代码,并执行其中的业务入口方法。 在指定路径缓存上次更新好的 Asset Bundle 包,快速加载。...资源热更新: 实现了了从 AB 包资源中加载图中物体 Cube(Clone)。

    1.1K42

    黑神话上线了,想起来学Lua了?

    带着这样的疑问,我们发现,在以前那个没技术可选、机器性能受限的年代,受制于开发成本、社区资源、霸道的 iOS 平台,我们的选择颇为有限。...脚本类与AOT类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。无需额外写特殊代码、无代码生成,几乎没有限制。...我们的方案中为了达到简洁少依赖的目的,采用 Asset Bundle 打包热更新资源与代码,包括场景资源以及代码 dll,并动态加载并动态绑定给物体(这里后续需要做一些安全校验保证文件在传输中不被篡改)...正确拉取服务端的 Asset Bundle 包,加载其中资源与代码,并执行其中的业务入口方法。在指定路径缓存上次更新好的 Asset Bundle 包,快速加载。...资源热更新: 实现了了从 AB 包资源中加载图中物体 Cube(Clone)。

    38810

    Unity 热更新技术 | (一) 热更新的基本概念原理及主流热更新方案介绍

    (2)热更新允许在不重新下载游戏客户端的情况下,更新游戏内容。 热更新分为 资源热更新 和 代码热更新 两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新。...资源热更新 主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包。...游戏运行时通过反射机制加载这些DLL就实现了热更新。 lua热更原理:逻辑代码转化为脚本,脚本转化为文本资源,以更新资源的形式更新程序。 3.1 为什么实现热更新一般都是用Lua,而不是C#?   ...在安卓上可以通过C#的语言特性-反射机制实现动态代码加载从而实现热更新。...个人觉得HyBridCLR最大的优点就是对Unity开发者们非常友好,在使用前搭建好各种配置之后,热更新方面的操作就不需要我们下功夫了,按照之前的开发正常进行就好,只要更换对应的dll文件就可以自动实现热更新功能

    15K76

    iOS引入JavaScriptCore引擎框架(二)

    解决 WebFrameLoadDelegate     在OS X中,WebFrameLoadDelegate负责WebKit与NSWebView的通信,由于NSWebView内部仍然使用WebKit渲染引擎...,若要侦听渲染过程中的一系列事件,则必须使用WebFrameLoadDelegate对象:         1、加载过程: 在一个访问一个网页的的整个过程,包括开始加载,加载标题,加载结束等。...Nick的发现     在iOS中,尽管没有暴露WebFrameLoadDelegate,但是在具体实现上仍会判断WebKit的implement有没有实现这个协议的某些方法,如果实现则仍会执行,而且在...由于所有的OC对象都继承自NSObject对象,因此我们可以在NSObject对象上实现该方法,这样可以保证该段代码可以在webkit框架中执行。     ...完善     我们通过上节的阐述,大致明白了Nick的思路,因此可以通过协议和类别来完成这种通信机制,当然采用oc运行时也是可以的。

    1.6K40

    依赖管理(一):图片、字符串文件和字体在Flutter中怎么用?

    资源管理 在移动开发中,常见的资源类型包括:JSON文件、配置文件、图标、图片以及字体文件等。他们都会被打包到APP安装包中,而App中的代码可以在运行时访问这些资源。...对于图片类本地资源的访问,我们可以使用Image.asset构造方法完成图片资源的加载及显示,在文本、图片和按钮在Flutter中怎么用和Flutter的图片组件这两篇文章中,我已经做了详细介绍,这里不再赘述...开发类似,Flutter也遵循了基于像素密度的管理方式,如1.0x、2.0x、3.0x或其他任意倍数,Flutter可以根据当前设备分辨率加载最接近设备像素比例的图片资源。...手机操作系统一般只有默认的几种字体,在大多数情况下可以满足我们的正常需求。但是在一些特殊情况下,我们可能需要使用自定义字体来提升视觉体验。...原生平台的资源设置 在文章Flutter的目录结构以及基本架构中,我们了解到,Flutter应用实际上最终会以原生工程的方式打包运行在Android和iOS平台上,因此Flutter启动时依赖的是原生Android

    3.3K30

    iOS学习——iOS项目Project 和 Targets配置详解

    这里有一个简单的使用教程,大家有需要可以戳这里: IOS的Automatically Sign功能,直接在设备上打包。...,在需要的时候才加载资源,属性设置界面如下图所示。...这样做的好处就是可以实现如下几种资源加载形式: 初始资源的延迟加载:app有一些资源是主要功能要用到的,但在启动时并不需要。将这些资源标记为“初始需要”。操作系统在app启动时会自动下载这些资源。...app资源的延迟加载:app有一些只在特定情景下使用的资源,当应用可能要进入这些场景时,会请求这些资源。例如,在一个有很多关卡的游戏中,用户只需要当前关卡和下一关卡的资源。...关于Resource Tag和按需加载的详情内容和步骤参见下面两篇文章: On-Demand Resources Guide中文版(按需加载资源--上) On-Demand Resources

    3.2K71

    UITableView性能提升和优化(第

    再次运行测试 在重用cell之后,你可以再一次测试滚动性能。从表格3-3可以看出,在你正确重用cell之后,性能提升了一倍。 ?...这就是你为什么要重用cell的原因。对于OS来说,创建和加载一个新的cell到内存中,都是要花费时间和内存资源的。...重用图片 显示图片的主要问题在于加载的时间,要么通过文件系统IO,要么通过网络IO,都是非常耗时的。这个加载过程同样会影响到滚动性能,当iOS不能返回cell来渲染UI时。...这就是为什么用户看到在某个地方滚动停止的原因。 为了使这个过程尽可能的快,你可以去除一些逻辑,延迟计算,通过重用来缓存数据和图片。另外一个方法是通过首先使用默认的图片和数据来重用cell。...从表格3-5和3-6可以看出,使用自定义绘制代码能够显著的提升渲染性能。在使用复杂的subview这点上,这个性能已经足够好了,你不必需要其他的优化了。

    81420

    APP常用跨端技术栈深入分析

    随着技术的发展,产生了越来越多的端,如Android、iOS、Mac、Windows、Web、Fuchsia OS、鸿蒙等,而随着公司业务的发展,出现了越来越多的业务场景;作为APP开发人员,在日常工作中难免会碰到以下问题...除了支持移动端外,还支持Mac OS、Windows等PC端和Web端,在新的Funchsia OS也支持Dart,使用Flutter作为UI框架。...为什么H5页加载慢?主要因为连接和加载比较耗时,这里占大部分时间,连接和加载完以后基本就是WebView或浏览器本地可以完成的工作,后期优化也可以以此为切入点。...耗时环节的主要有两点,一是WebView初始化,可以通过提前初始化WebView优化此问题;二是资源(html、js、css\图片等)的请求连接和加载,可以用H5离线包方案解决此问题,通过资源的预加载,...解决html、js、css和资源图片的加载问题,从而大大降低资源的加载时间,提升页面加载性能,甚至达到秒开的效果。

    2.7K10

    Safari URL重定向漏洞(CVE-2016-4585)利用分析

    受影响的组件 Safari iOS < v9.3.3、tvOS <v9.2.2 0x01 漏洞详情 1.操纵Host头 在服务端返回302或者307状态码的情况下,我们可以构造如下请求...在Github上能找到很多类似的代码,我在本地也进行了一系列验证。 ?...2.域混淆XSS 根据原文作者的例子,他在使用:非数字的方法测试目标链接的时候,像http://www.mbsd.jp:xyz/在加载外部资源的时候会出现以下情况。 ?...明显采用相对路径的URL资源没有正确加载。 我们可以在浏览器console下面可以进行验证: ? 此页面的域是损坏的,这便是为什么采用相对路径加载资源会失败了。cookie也因此无法获取。...造成的影响 加载的JS是在加载损坏内容的情况下进行的,因此不能通过XHR的方式获取同站点的cookie。但是依然可以对自身的document内容进行操作,这意味着攻击者可以修改页面内容。

    1.5K70

    iOS开发之App间账号共享与SDK封装

    1.Bundle工程的创建 首先我们像创建Framework工程一样创建一个Bundle工程,因为iOS工程下方没有Bundle类型的工程,所以我们需要在OS X -> Framework & Library...因为我们是选择OS X创建的Bundle,默认的Bundle是不能在iOS中使用的,所以我们得将Base SDK进行设置,选择相应的iOS版本即可,如下所示。...4.Bundle资源的加载 生成完Bundle资源文件后,我们在SDK的源代码中,要从Bundle资源文件中进行资源的加载。下方代码就是加载相应Bundle的代码。...而-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。根据上面介绍的,下方即使不添加-Objc这个选项,下方的工程也是可以正常运行的。 ?...五、Keychain共享 关于Keychain共享的东西,我们可以看一下上一篇博客的介绍《iOS逆向工程之KeyChain与Snoop-it》。

    1.8K90
    领券