android 实现表格横向混动_Flutter混合开发和Android动态更新实践

Flutter混合开发和Android动态更新实践

感谢闲鱼和csdn的文章给的思路:

本篇是实践性文章包含两部分

将Flutter工程编译后的文件集成到Android项目

将Flutter代码热更新

不涉及源码和理论,想要了解的话可以阅读上面的文章

将Flutter工程编译后的文件集成到Android项目

​ 因为Flutter无法完全替代原生绝大部分项目都是Flutter和Native混合开发的模式,所以存在一部分同学只做Native开发,并不熟悉Flutter技术。如果直接采用Flutter工程来开发,那这部分原生开发同学也需要配置Flutter环境,学习Flutter。

​ 由于上述原因,所以采用flutter项目和原生项目相互独立开发,将flutter项目编译后的文件以module的形式集成到Android项目中。

原理:Android项目依赖flutter的文件

Flutter库

主要是flutter.jar,文件位于Flutter SDK目录下flutter/bin/cache/artifacts/engine

Flutter工程编译文件

isolate_snapshot_data、isolate_snapshot_instr、vm_snapshot_data、vm_snapshot_instr、flutter_assets下所有文件

位于Flutter工程build/app/intermediates/flutter/release/下

Flutter Plugin编译文件(暂时没用到,待补充)

集成步骤

在原生项目中新建一个module例如fluttermodule

将flutter.jar放入libs文件夹

将isolate_snapshot_data、isolate_snapshot_instr、vm_snapshot_data、vm_snapshot_instr和flutter_assets下所有文件放入assets/flutter_assets/下

为了方便可以在flutter项目中用gradle脚本实现,例如

task copyAndroidFlutterModule << {

println "project.rootDir = ${project.rootDir}/"

println "buildDir = ${this.buildDir}/"

def flutterOutputDir = "${this.buildDir}/flutter_android_output/flutter_module/"

def flutterPluginFile = new File(flutterOutputDir)

if (!flutterPluginFile.exists()) {

flutterPluginFile.mkdirs()

} else {

flutterPluginFile.deleteDir()

}

def flutterReleaseBuildDir = "${this.buildDir}/app/intermediates/flutter/release/"

println "flutterReleaseBuildDir=$flutterReleaseBuildDir"

//复制snapshot_data和snapshot_instr

project.copy {

from flutterReleaseBuildDir

include "*snapshot_data"

include "*snapshot_instr"

into flutterOutputDir

}

//复制flutter_assets

project.copy {

from "${flutterReleaseBuildDir}flutter_assets/"

into flutterOutputDir

}

}

将application指定为FlutterApplication或者自定义类集成FlutterApplication

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:name="io.flutter.app.FlutterApplication"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

新建Activity继承FlutterActivity

package com.gmail.jackxuechen.fluttermodel;

import android.os.Bundle;

import io.flutter.app.FlutterActivity;

public class FlutterRootActivity extends FlutterActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

GeneratedPluginRegistrant.registerWith(this);

}

}

集成成功

Android动态更新

原理:替换/data/data/包名/app_flutter/flutter_assets/

下的isolate_snapshot_data、isolate_snapshot_instr、vm_snapshot_data、vm_snapshot_instr即可实现flutter项目的更新

为了方便可以写个gradle脚本将flutter工程编译的isolate_snapshot_data、isolate_snapshot_instr、vm_snapshot_data、vm_snapshot_instr文件放到一个单独文件夹

task copyAndroidFlutterAssets << {

println "project.rootDir = ${project.rootDir}/"

println "buildDir = ${this.buildDir}/"

def flutterOutputDir = "${this.buildDir}/flutter_android_output/flutter_assets/"

def flutterPluginFile = new File(flutterOutputDir)

if (!flutterPluginFile.exists()) {

flutterPluginFile.mkdirs()

} else {

flutterPluginFile.deleteDir()

}

def flutterReleaseBuildDir = "${this.buildDir}/app/intermediates/flutter/release/"

println "flutterReleaseBuildDir=$flutterReleaseBuildDir"

//复制snapshot_data和snapshot_instr

project.copy {

from flutterReleaseBuildDir

include "*snapshot_data"

include "*snapshot_instr"

into flutterOutputDir

}

}

注意事项

vm_snapshot_data、vm_snapshot_instr和flutter sdk版本有关,生成更新文件时应保持和集成到原生项目中的flutter sdk版本一致

因为isolate_snapshot_data、isolate_snapshot_instr、vm_snapshot_data、vm_snapshot_instr可能是在FlutterApplication中处理(需要看源码目前还没研究到)的。如果直接替换相关文件而没有冷启动,可能会导致崩溃,不过可以通过升级逻辑实现冷启更新,类型腾讯tinker。

如果flutter项目中添加新的依赖原生的插件,则无法通过替换flutter编译后的文件升级,强制升级会崩溃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值