|
| 1 | +# Chimera Flutter Code Push 开门见山(一) |
| 2 | +## 热更新原理 |
| 3 | + |
| 4 | + 将Dart层代码分为两层,一层JIT执行,另一层AOT执行。当然Flutter默认执行的方式是AOT执行,如果我们想要热更新并且又不会丢失很大的性能,那么 JIT + AOT 混合执行会是我们最好的方案之一。 |
| 5 | + |
| 6 | +## 接入流程 |
| 7 | + |
| 8 | +### 1. 检查环境变量 |
| 9 | + |
| 10 | + ```shell |
| 11 | +export FLUTTER_ROOT=/Volumes/data/flutter_sdk |
| 12 | + |
| 13 | +export PUB_HOSTED_URL=https://pub.flutter-io.cn |
| 14 | +export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn |
| 15 | +export PATH=${FLUTTER_ROOT}/bin:${PATH} |
| 16 | +export PATH=${FLUTTER_ROOT}/bin/cache/dart-sdk/bin:${PATH} |
| 17 | +export PUB_CACHE=${FLUTTER_ROOT}/.pub-cache |
| 18 | + ``` |
| 19 | + |
| 20 | +需要强调的是`PUB_CACHE`是在SDK目录下,是必须要设置的。 |
| 21 | + |
| 22 | +### 2. 检查版本号 |
| 23 | + |
| 24 | +```shell |
| 25 | +fangnan@iMac-Pro ~ % flutter --version |
| 26 | +Flutter 2.2.3 • channel stable • https://github.com/flutter/flutter.git |
| 27 | +Framework • revision f4abaa0735 (2 weeks ago) • 2021-07-01 12:46:11 -0700 |
| 28 | +Engine • revision 241c87ad80 |
| 29 | +Tools • Dart 2.13.4 |
| 30 | +``` |
| 31 | + |
| 32 | +Dart 版本必须 大于等于 2.13.4 |
| 33 | + |
| 34 | +### 3. 运行系统 |
| 35 | + |
| 36 | +暂时只支持Mac系统,支持M1芯片。 |
| 37 | + |
| 38 | +### 4. 开始接入 |
| 39 | + |
| 40 | +详情请看视频链接: |
| 41 | + |
| 42 | +1:创建项目 |
| 43 | + |
| 44 | +```shell |
| 45 | +flutter create hello |
| 46 | +``` |
| 47 | + |
| 48 | +2:引入仓库 |
| 49 | + |
| 50 | +```shell |
| 51 | +flutter_code_push_next: |
| 52 | + git: |
| 53 | + url: https://github.com/Waytoon/chimera_flutter_code_push.git |
| 54 | + path: flutter_code_push_next |
| 55 | +``` |
| 56 | + |
| 57 | +也可以使用本地的,具体随意。 |
| 58 | + |
| 59 | +3: 整理代码 |
| 60 | + |
| 61 | +包含main函数的代码视为入口函数,不进行JIT执行,所以需要进行代码拆分。具体代码改为类似如下: |
| 62 | + |
| 63 | +```dart |
| 64 | +import 'package:hello/myapp.dart'; |
| 65 | +import 'package:wtbase/wtbase.dart'; |
| 66 | +
|
| 67 | +Future main() async { |
| 68 | + bool isNative = false; |
| 69 | + if (isNative) { |
| 70 | + run(); |
| 71 | + } else { |
| 72 | + String downloadUrl = "http://192.168.80.144:8080/hello.bin"; |
| 73 | + readCode = WTAnalysisReadCode(); |
| 74 | + await readCode.initDownloadFilePath(); |
| 75 | + await readCode.downloadPathAndReadFile(downloadUrl); |
| 76 | + readCode.executeMethod('package:hello/myapp.dart', 'run'); |
| 77 | + } |
| 78 | +} |
| 79 | +``` |
| 80 | + |
| 81 | +4: 运行编译器执行 |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +关于国内下载Github慢,大家可以用镜像来解决。 |
| 86 | + |
| 87 | +[Github 镜像](https://blog.csdn.net/hajungong007/article/details/109790370?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161465918516780262599127%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161465918516780262599127&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-109790370.first_rank_v2_pc_rank_v29&utm_term=%E5%9B%BD%E5%86%85+GitHub) |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | +HTTP Server 快速搭建 |
| 92 | + |
| 93 | +```shell |
| 94 | + brew install http-server |
| 95 | + http-server -c -1 |
| 96 | +``` |
| 97 | + |
| 98 | + |
| 99 | + |
| 100 | +## 已知问题 |
| 101 | + |
| 102 | +- 热更新下,IOS模拟器调试会出现断开链接,不过可以发布运行。实在想要调试暂时用Android模拟器。 |
| 103 | + |
| 104 | +- 一直停留在,Start downloading the patch package! |
| 105 | + |
| 106 | + 说明无法加载补丁包,main文件补丁包地址是否配置正确,主要检测手机或模拟器是否能正确加载,如果不能加载自行判断,如是否开了Wifi、飞行模式、流量上网等等。 |
| 107 | + |
| 108 | + |
| 109 | +## 发布之前需要有以下设置 |
| 110 | +iOS: |
| 111 | +1. `Runner` -> `Build Settings` -> `Architectures` 设置为 arm64、x86_64 |
| 112 | +2. `Runner` -> `Build Settings` -> `Deployment` -> `Strip Style` 设置为 Non-global Symbols |
| 113 | + |
| 114 | +Android: |
| 115 | +```xml |
| 116 | +<uses-permission android:name="android.permission.INTERNET"> |
| 117 | +</uses-permission> |
| 118 | + |
| 119 | +<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> |
| 120 | +</uses-permission> |
| 121 | +``` |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +## 开发必看 |
| 126 | + |
| 127 | + 在很多开发者的对接过程中,我逐渐发现有很多各种各样的问题,有是我们的问题,也有Flutter的问题。我想了以下对策,我将收集和整理大量的问题帖,让开发者快速能解决问题。我们团队内部也寻找各种各样的开源App进行接入测试并发布,这样也可以使大家放心。对于已经接入非开源的App不方便透露,因为别人不愿意公开。到目前为止,我们自己接入的开源App大概也有6个App以上了,望大家对我们保持信心。 |
| 128 | + |
| 129 | + 近期会有很多新功能开放出来,将会以文字+视频的方式呈现给大家。 |
| 130 | + |
| 131 | + 非常需要更多更多的小伙伴联系我,加入我们帮助我们运营此项目,有兴趣的 +v:457636876 |
| 132 | + |
0 commit comments