|
你们不会真没用过flutter或者没拆过flutter的包吧...
虽然我不做ios开发,但是我对flutter在android上的表现还是熟悉的
flutter打包为apk时,代码是直接通过ndk编译成本地库的(libflutter.so),也就是说,flutter执行是AOT执行,而不是JIT,性能上完全没问题,在实际表现中也优于android原生下JIT状态时的效率(当然,android自己还有dex2oat,这时候效率优于flutter),本地库的特性也导致flutter自身不具备热更新能力(但是热更新是可以做的,最后讲)
而JSPatch这东西,就和android这边的tinker之类的一样,是影响效率的,尤其对启动速度影响比较大,出于用户体验本来就该禁掉,这方面谷歌play也是一样不允许上架的
最后聊聊flutter的热更新实现吧.虽然谷歌play肯定是不给热更新的(都上play了用play的增量更新它不香吗),但是自己小范围使用的项目还是能用的.
flutter在加载时会执行loadLibrary,加载libflutter.so.android内加载本地库有两种方法,一种就是loadLibrary,传入库名,例如这里传入flutter就行了,前面的lib和后面的.so不用管.第二种就是直接load,传入路径,很多加固方案就喜欢这么做.
那么我们为了热更新,用第二种方案.先通过差分更新,拼接一个新的libflutter.so在data目录下,并设置好权限,然后在加载库时,送入这个新so的路径,而不是默认路径,就能实现flutter的热更新了.但是这个办法不支持对资源的热更新,资源热更新还是需要自己hook自己的assetsManager |
|