热更新是一种需求吧。

自然会想到flutter 是否支持热更新。

然后一些群里问了问普遍反映不可以热更新,还说咸鱼的文章写了不支持热更新。

然后我表示很怀疑。

我的结论可以做到热更新

1.你需要把flutter 编译出来的类容放到sdcard 根目录

2.点击”加载根目录”编译生成产物

3.点击”启动”

你便可以看到效果了 (不骗你的)

其实这个apk 只做了一件事,那就是把 flutter_assets 目录里的所有内容

拷贝到 data/data/包名/app_flutter/flutter_assets目录下

比较暴力,暴力,暴力

copyDir(

Environment.getExternalStorageDirectory().getAbsolutePath()+"/flutter_assets",

FlutterMain.findAppBundlePath(getApplicationContext())

);

我觉得你应该了解以下类容

flutter 命令

cmd 里 执行 flutter -h 如下,这些内容可以百度

Global options:

-h, --help Print this usage information.

-v, --verbose Noisy logging, including all shell commands executed.

-d, --device-id Target device id or name (prefixes allowed).

--version Reports the version of this tool.

--bug-report Captures a bug report file to submit to the Flutter team (contains local paths, device

identifiers, and log snippets).

--flutter-root The root directory of the Flutter repository (uses $FLUTTER_ROOT if set).

Available commands:

analyze Analyze the project's Dart code.//分析项目的Dart代码。

build Flutter build commands.

channel List or switch flutter channels.//列出或切换颤振通道。

clean Delete the build/ directory.

config Configure Flutter settings.

create Create a new Flutter project.

devices List all connected devices.//列出所有连接的设备。

doctor Show information about the installed tooling.//显示有关已安装工具的信息。

drive Runs Flutter Driver tests for the current project.//运行当前项目的Flutter Driver测试。

emulators List and launch available emulators.//列出并启动可用的模拟器。

format Format one or more dart files.//格式化一个或多个dart文件。

fuchsia_reload Hot reload on Fuchsia.//热重装。

help Display help information for flutter.

install Install a Flutter app on an attached device.

logs Show log output for running Flutter apps.

packages Commands for managing Flutter packages.

precache Populates the Flutter tool's cache of binary artifacts.//填充Flutter工具的二进制工件缓存。

run Run your Flutter app on an attached device.

screenshot Take a screenshot from a connected device.//从连接的设备截取屏幕截图。

stop Stop your Flutter app on an attached device.

test Run Flutter unit tests for the current project.

trace Start and stop tracing for a running Flutter app.//启动和停止正在运行的Flutter应用程序的跟踪。

upgrade Upgrade your copy of Flutter.//升级您的Flutter副本。

这些内容可以百度

其中 flutter build

aot Build an ahead-of-time compiled snapshot of your app's Dart code.//为应用的Dart代码构建一个提前编译的快照。

apk Build an Android APK file from your app.

bundle Build the Flutter assets directory from your app.//从您的应用程序构建Flutter资产目录。

flx Deprecated//弃用

ios Build an iOS application bundle (Mac OS X host only).

更多的参数你可以参照 flutter.gradle

这个文件可以在 flutter\packages\flutter_tools\gradle 中找到如:

if (buildMode != "debug") {

project.exec {

executable flutterExecutable.absolutePath

workingDir sourceDir

if (localEngine != null) {

args "--local-engine", localEngine

args "--local-engine-src-path", localEngineSrcPath

}

args "build", "aot"

args "--suppress-analytics"

args "--quiet"

args "--target", targetPath

args "--target-platform", "android-arm"

args "--output-dir", "${intermediateDir}"

if (previewDart2) {

args "--preview-dart-2"

} else {

args "--no-preview-dart-2"

}

if (trackWidgetCreation) {

args "--track-widget-creation"

}

if (extraFrontEndOptions != null) {

args "--extra-front-end-options", "${extraFrontEndOptions}"

}

if (extraGenSnapshotOptions != null) {

args "--extra-gen-snapshot-options", "${extraGenSnapshotOptions}"

}

if (preferSharedLibrary) {

args "--prefer-shared-library"

}

if (targetPlatform != null) {

args "--target-platform", "${targetPlatform}"

}

args "--${buildMode}"

}

}

你在flutter 工程目录下 执行 flutter build bundle 即可生成编译文件 在 build 中

这里提下配置项

看类 FlutterMain.java

private static void initConfig(Context applicationContext) {

try {

Bundle metadata = applicationContext.getPackageManager().getApplicationInfo(applicationContext.getPackageName(), 128).metaData;

if (metadata != null) {

sAotSharedLibraryPath = metadata.getString(PUBLIC_AOT_AOT_SHARED_LIBRARY_PATH, "app.so");

sAotVmSnapshotData = metadata.getString(PUBLIC_AOT_VM_SNAPSHOT_DATA_KEY, "vm_snapshot_data");

sAotVmSnapshotInstr = metadata.getString(PUBLIC_AOT_VM_SNAPSHOT_INSTR_KEY, "vm_snapshot_instr");

sAotIsolateSnapshotData = metadata.getString(PUBLIC_AOT_ISOLATE_SNAPSHOT_DATA_KEY, "isolate_snapshot_data");

sAotIsolateSnapshotInstr = metadata.getString(PUBLIC_AOT_ISOLATE_SNAPSHOT_INSTR_KEY, "isolate_snapshot_instr");

sFlx = metadata.getString(PUBLIC_FLX_KEY, "app.flx");

sSnapshotBlob = metadata.getString(PUBLIC_SNAPSHOT_BLOB_KEY, "snapshot_blob.bin");

sFlutterAssetsDir = metadata.getString(PUBLIC_FLUTTER_ASSETS_DIR_KEY, "flutter_assets");

}

} catch (NameNotFoundException var2) {

throw new RuntimeException(var2);

}

}

也就是说 这些类容在什么位置,你完全可以在 metaData 里配置出来

编译生成产物

懒懒懒懒懒。。。。

这个自己看下就知道有些什么了,不一定非要知道每一个文件什么作用

系统拷贝assets那些内容到app_flutter目录

这个要看代码了,FlutterMain.java

private static void initResources(Context applicationContext) {

(new ResourceCleaner(applicationContext)).start();

sResourceExtractor = (new ResourceExtractor(applicationContext))

.addResources(SKY_RESOURCES)

.addResource(fromFlutterAssets(sFlx))

.addResource(fromFlutterAssets(sSnapshotBlob))

.addResource(fromFlutterAssets(sAotVmSnapshotData))

.addResource(fromFlutterAssets(sAotVmSnapshotInstr))

.addResource(fromFlutterAssets(sAotIsolateSnapshotData))

.addResource(fromFlutterAssets(sAotIsolateSnapshotInstr))

.addResource(fromFlutterAssets("kernel_blob.bin"))

.addResource(fromFlutterAssets("platform.dill"));

if (sIsPrecompiledAsSharedLibrary) {

sResourceExtractor.addResource(sAotSharedLibraryPath);

} else {

sResourceExtractor.addResource(sAotVmSnapshotData).addResource(sAotVmSnapshotInstr).addResource(sAotIsolateSnapshotData).addResource(sAotIsolateSnapshotInstr).addResource(sSnapshotBlob);

}

sResourceExtractor.start();

}

这里的 addResources和addResource 就是拷贝到 app_flutter目录的东西我就不一一列举了

其实这里才是重点,你要高清每一个文件,在更新时那些需要替换,那些是不变的,不然的话你全都替换比较暴力

希望哪位大神把这些文件怎么作用都整理出来,有人已经整理的请帖出地址

flutter已经支持安卓热更新_flutter 在 android 上的热更新相关推荐

  1. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  2. 微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜

    微信在推出新功能方面相当克制,但每一次总能引起全网关注. 昨天,微信又因为一个小功能的改进再次上了热搜,在安卓最新的 7.0.17 版本当中,微信取消了两分钟内删除功能. 在新版微信中,发出的消息在两 ...

  3. 安卓平台运行python_在 android 上运行 python 的方法

    android官方目前没有支持在android设备运行python,但是网上有一些项目组做了这个事情:http://geeknizer.com/install-run-python-apps-scri ...

  4. Android热修复更改图标,Android手写热修复(一)--ClassLoader

    前言 在上一篇文章Android类加载机制讲解了类加载器.加载dex.查找class相关的内容,并且透漏了热修复的原理,还没有看过的同学建议先看上一篇再来学习本文. 热修复的几种方案 1.基于类加载机 ...

  5. android app 自动更新,app升级项目,新增强制更新(可静默),支持热更新(wgt),可支持高版本安卓系统...

    pure-updater 一个可以用的自动更新方案 经测试可支持 Android 9.0 已支持热更新 已支持静默的强制更新 如果您觉得还可以的话那就点个五星吧!谢谢! 已测试 android 8.0 ...

  6. flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码

    分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...

  7. 三星s4 android8,三星全面支持安卓8.0系统,14款手机更新让人眼红

    原标题:三星全面支持安卓8.0系统,14款手机更新让人眼红 关于谷歌安卓8.0系统的发布会,已经过去了很长时间,但身边真没见过谁在用.这款被誉为史上最轻量化的安卓系统,据说在1GB超小内存的手机上进行 ...

  8. 【安卓】腾讯Bugly之应用升级热更新-热更新

    如何接入请参阅 [安卓]腾讯Bugly之应用升级&热更新-接入篇 什么是热更新: 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力.Bu ...

  9. android10.9 华为,福利升级:华为这4款手机将率先支持安卓 9.0系统更新

    原标题:福利升级:华为这4款手机将率先支持安卓 9.0系统更新 最新的安卓系统也在近日推出了,小米最先更新了安卓9.0版本,华为也紧跟其后,这次的系统也不光这两家厂商.其中还包括了vivo.OPPO. ...

最新文章

  1. php操作mysql数据库,PHP操作mysql数据库
  2. 网页制作中的背景处理
  3. git 撤销全部的commit_git 撤销commit
  4. JavaScript由哪三部分组成呢?
  5. ASP.NET-FineUI开发实践-9(四)
  6. 服务器位置设置在哪里找,服务器主页在哪里设置方法
  7. SQL 审核系统体验
  8. 不良事件总结怎么写_2017年第一季度不良事件总结分析
  9. ..\target\m2e-wtp\web-resources\META-INF\MANIFEST.MF (系统找不到指定的路径)解决办法
  10. 【K8S实战】-超详细教程(三)
  11. Docker(24)- docker login 命令详解
  12. 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度
  13. Motivated Word (1)
  14. 美国泛达网络:新一代通用型数据中心机柜
  15. webpack配置entry详解
  16. matlab 自定义的snr,Matlab信号添加噪声及信噪比SNR的计算
  17. 记一次lpk劫持样本分析
  18. Java破解反编译逆向工程笔记
  19. 2017年婚恋网站分析
  20. 【请勿点开】程序员放假鬼故事 | 每日趣闻

热门文章

  1. python入门代码示例-总算知道python入门代码示例
  2. python编程入门指南上下百度云-Python编程初学者指南 PDF扫描版[87MB]
  3. python怎么安装numpy库-python怎么安装numpy库
  4. python基础教程是什么意思-python基础教程都有什么?
  5. python可以做什么工作好-会python语言能做什么工作
  6. 学python要多少钱-学习Python这门课程大概需要多久?费用是多少?
  7. python下载文件到指定目录-Python获取指定文件夹下的文件名的方法
  8. python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(一)
  9. python常用标准库有哪些-Python 200个标准库汇总
  10. python文件读取输出-Python 读取和输出到txt