已有Android项目集成Flutter寻坑记

背景

Flutter作为谷歌下一代主推的全平台UI框架,具有很多的优点:

  • 支持全平台,包括Android、iOS、Web甚至桌面端。
  • 全平台都基于同一套代码库,区别于React Native的learn once, write everywhere。
  • 媲美原生的性能。
  • 牛逼的开发效率,这个深有体会,目前笔者公司负责的一个电商app,随便修改一行代码build一次在2018款macbook pro 15下都需要4分钟左右,Flutter可以做到不到一秒。
  • 丰富的组件库,比Android的组件更加丰富。
  • 国内已经有很多大厂已经有使用Flutter在他们的核心项目中了, 比如阿里的咸鱼,腾讯的now直播,京东商城等等。

今年整个互联网寒冬,很多公司都在裁员,移动端跨平台方案能够一定程度上节约开发成本,而且android ios都是一套代码,也避免了分端开发导致两端逻辑可能不一致的问题。

尝鲜

按照官方文档的指引https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps,很快我就完成了集成,但是一运行,进入flutter页面时,总是黑屏过段时间就闪退了,查看崩溃信息时发现应该是flutter so库没有打包进去,这个问题是因为我们的项目是只打包armeabi单abi。而flutter只提供armeabi-v7a以上的so。所以我们把abi改成armeabi-v7a就可以顺利打包flutter的so库了,如下:

    splits {
        abi {
            enable !project.hasProperty('runx86')
            reset()
            include 'armeabi-v7a' 
            universalApk false
        }
    }

满心欢喜的赶紧build再次运行,结果还是一样,进入flutter页面,还是黑屏一下,然后闪退,这时候出现的error log是:

VM snapshot must be valid.
Check failed: vm. Must be able to initialize the VM.

WTF:google之,发现一片非常有用的文章https://github.com/flutter/flutter/issues/19818。在这篇文章中提到:

vmfailed

看起来是说打包的apk的assets中缺少了flutter_assets,flutter_assets里面是什么?我猜他妈的肯定是dart vm还有dart的代码。这个哥们也比较实在,他说他也不知道为什么没有打包进去。于是按照这个哥们的方法,手工把flutter module编译出来的flutter_assets的拷贝到安卓项目中,然后重新编译打包,我手指微微颤抖的点开flutter页面,我操,flutter页面终于出来,我第一次流下了幸福的眼泪。但是幸福过后,还是要思考,我不能每次都手工拷贝吧,写个脚本拷贝也行,但是还是显得不太专业,我想要的是直接在IDE上点build按钮就能生成一个完美的apk包。

接着继续查看上面这个issue 19818(这个number还蛮吉利的),有个兄弟说是如果你的项目中有用到productFlavors的话,你的flutter项目也必须要配置相同的productFlavors才会自动把flutter_assets打包进去。按照下面这个方式进行代码调整:

productFlavor

build打包运行,f**k,还是不行。flutter_assets怎样都打包不进apk里面。然后就是无尽的尝试,终于发现有一个中国的兄弟遇到跟我类似的问题https://www.jianshu.com/p/3a88d9b993cd
fluttermaster

看起来是需要切到flutter的master分支上才可以,目前我是在stable分支上,那就切把,赶紧执行flutter channel master。这个过程需要翻墙,或者添加flutter中国镜像。要不然会下载不成功。切成功之后,试了无数次,还行不行。怎么办,我已经生无死恋..........................

在经过多次痛哭流涕之后,我真想把电脑合上,背起书包回家(已经是深夜了),但是作为一个对技术有狂热追求的我,我不甘心就这样失败。也许是上帝的安排,冥冥之中我对比了下别的项目module名称都是app这样,而我们的却是vipshop。我想再尝试一把,不行的话,那我就放弃了。 于是我把vipshop重命名为app,build运行。查看下apk打包的内容。


done

flutter_assets终于打包进去了。 进入flutter页面也没闪退了。呜呜... 今晚终于可以安心睡个好觉了。 赶紧掏出手机叫好滴滴,打卡下班回家....

总结

整体的曲折经历上面已经说了,下面总结下具体的改动点,假设你的主工程和flutter module位于:

  • 主工程:/somepath/my_app
  • flutter module: /somepath/flutter_module

主要改动点有:

  1. flutter切到master分支,执行flutter channel master。
  2. 按照官方指引https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps进行集成。
  3. 确保你的主工程的主module名称是app,/somepath/my_app/app。
  4. 如果你的项目使用了abi splits,确认include的是armeabi-v7a。
    splits {
        abi {
            enable !project.hasProperty('runx86')
            reset()
            include 'armeabi-v7a' 
            universalApk false
        }
    }
  1. 假设你的主项目配置了dev productFlavor,那么你需要修改 /somepath/flutter_module/.android/Flutter/build.gradle,增加dev productFlavor和buildTypes。


    productflavor
  2. 修改flutter项目 /somepath/flutter_module/.android/app/build.gradle,增加dev productFlavor


    productflavor

大功告成!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270