赞
踩
本文分为以下章节,读者可按需阅读:
Flutter测试项目Github
Flutter容器项目Github
现在很多教程都停留在创建一个新的 Flutter 项目然后开始介绍如何使用这个项目开发 Flutter。但是其实我们目前大部分使用 Flutter 的场景都是基于已经成熟的项目。我们不可能因为使用 Flutter 而将原来的项目推到重来。这一节我就来介绍一种成熟项目无缝接入 Flutter 的方式。本章需要大家结合上面提到的 Github 项目代码食用。 1.闲鱼以及美团的实践
2.我的实践
从上面的介绍来看,闲鱼、美团的实践方式似乎有着一些不方便之处。比如说不能动态更新 Flutter 代码、Flutter 的 AAR 和主工程一起编译太具有侵入性等等(这里只是我自己浅薄的看法,有异议的同学可以在评论区提出)。所以我这一节要介绍一种侵入性非常小的接入 Flutter 的方式,简单来说就一句话:动态加载 Flutter 生成的 Apk。接下来我会结合前面提到的两个 github 项目里的代码进行讲解,大家一定要把这两个项目 clone 下来,当然能点个 star 就更好了。(1).创建Flutter测试项目
图1:Flutter-Test-项目.png
- 2.创建好了之后如图1所示,我们需要在 app 目录下的 build.gradle 文件中添加一些代码,如代码块1所示。
-
- project.afterEvaluate {
- android.applicationVariants.all { variant ->
- def variantName = variant.name.capitalize()
- def buildTask = project.tasks.findByName("assemble${variantName}")
- if (buildTask) {
- def outputApk = variant.outputs[0].outputFile.path
- def classEntry = "*.dex"
- def soEntry = "lib/*"
- def metaEntry = "META-INF/*"
- def licenseEntry = "assets/flutter_assets/LICENSE"
-
- buildTask.doLast {
- println variant.outputs[0].outputFile.length()
- exec {
- commandine 'sh', '-c', "zip -d ${outputApk} ${classEntry}"
- }
- exec {
- commandLine 'sh', '-c', "zip -d ${outputApk} ${soEntry}"
- }
- exec {
- commandLine 'sh', '-c', "zip -d ${outputApk} ${metaEntry}"
- }
- exec {
- commandLine 'sh', '-c', "zip -d ${outputApk} ${licenseEntry}"
- }
- }
- }
- }
- }
(2).创建Flutter容器项目
图2:Flutter容器项目目录.png
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。