flutter已经支持安卓热更新_flutter 在 android 上的热更新
热更新是一种需求吧。
自然会想到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 上的热更新相关推荐
- SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案
SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...
- 微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜
微信在推出新功能方面相当克制,但每一次总能引起全网关注. 昨天,微信又因为一个小功能的改进再次上了热搜,在安卓最新的 7.0.17 版本当中,微信取消了两分钟内删除功能. 在新版微信中,发出的消息在两 ...
- 安卓平台运行python_在 android 上运行 python 的方法
android官方目前没有支持在android设备运行python,但是网上有一些项目组做了这个事情:http://geeknizer.com/install-run-python-apps-scri ...
- Android热修复更改图标,Android手写热修复(一)--ClassLoader
前言 在上一篇文章Android类加载机制讲解了类加载器.加载dex.查找class相关的内容,并且透漏了热修复的原理,还没有看过的同学建议先看上一篇再来学习本文. 热修复的几种方案 1.基于类加载机 ...
- android app 自动更新,app升级项目,新增强制更新(可静默),支持热更新(wgt),可支持高版本安卓系统...
pure-updater 一个可以用的自动更新方案 经测试可支持 Android 9.0 已支持热更新 已支持静默的强制更新 如果您觉得还可以的话那就点个五星吧!谢谢! 已测试 android 8.0 ...
- flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码
分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...
- 三星s4 android8,三星全面支持安卓8.0系统,14款手机更新让人眼红
原标题:三星全面支持安卓8.0系统,14款手机更新让人眼红 关于谷歌安卓8.0系统的发布会,已经过去了很长时间,但身边真没见过谁在用.这款被誉为史上最轻量化的安卓系统,据说在1GB超小内存的手机上进行 ...
- 【安卓】腾讯Bugly之应用升级热更新-热更新
如何接入请参阅 [安卓]腾讯Bugly之应用升级&热更新-接入篇 什么是热更新: 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力.Bu ...
- android10.9 华为,福利升级:华为这4款手机将率先支持安卓 9.0系统更新
原标题:福利升级:华为这4款手机将率先支持安卓 9.0系统更新 最新的安卓系统也在近日推出了,小米最先更新了安卓9.0版本,华为也紧跟其后,这次的系统也不光这两家厂商.其中还包括了vivo.OPPO. ...
最新文章
- php操作mysql数据库,PHP操作mysql数据库
- 网页制作中的背景处理
- git 撤销全部的commit_git 撤销commit
- JavaScript由哪三部分组成呢?
- ASP.NET-FineUI开发实践-9(四)
- 服务器位置设置在哪里找,服务器主页在哪里设置方法
- SQL 审核系统体验
- 不良事件总结怎么写_2017年第一季度不良事件总结分析
- ..\target\m2e-wtp\web-resources\META-INF\MANIFEST.MF (系统找不到指定的路径)解决办法
- 【K8S实战】-超详细教程(三)
- Docker(24)- docker login 命令详解
- 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度
- Motivated Word (1)
- 美国泛达网络:新一代通用型数据中心机柜
- webpack配置entry详解
- matlab 自定义的snr,Matlab信号添加噪声及信噪比SNR的计算
- 记一次lpk劫持样本分析
- Java破解反编译逆向工程笔记
- 2017年婚恋网站分析
- 【请勿点开】程序员放假鬼故事 | 每日趣闻
热门文章
- python入门代码示例-总算知道python入门代码示例
- python编程入门指南上下百度云-Python编程初学者指南 PDF扫描版[87MB]
- python怎么安装numpy库-python怎么安装numpy库
- python基础教程是什么意思-python基础教程都有什么?
- python可以做什么工作好-会python语言能做什么工作
- 学python要多少钱-学习Python这门课程大概需要多久?费用是多少?
- python下载文件到指定目录-Python获取指定文件夹下的文件名的方法
- python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(一)
- python常用标准库有哪些-Python 200个标准库汇总
- python文件读取输出-Python 读取和输出到txt