背景
安卓IOS各端准备正式开发上线,需要统一flutter开发版本,验证后决定使用1.9.1_hotfix.6版本,对比1.5.1版本变动挺大的,另外由于工程是比较大,比较老的工程,项目指定支持armeabiCPU类型,为了适配引入aar到项目,之前就踩了一个坑,不另外适配cpu版本,默认生成的不包含armeabi模式flutter.so,也就是当你从原生跳转到flutter工程时候会报错,找不到flutter.so ;
找不到flutter.so修复方案
为了对其CPU,因为我们的原生项目指定了使用armeabi 类型CPU,我们需要运行一次flutter工程,生成release.apk,然后拿到对应的V7包下的so库。在flutter工程中创建armeabi文件夹,拷贝过来,然后更改配置,执行打包命令生成aar.
当前Flutter 版本1.9.1+ 结构
libs下已经不在是之前的flutterlib.so 库,替代的是flutter.jar和lib.jar
flutter.jar下面主要是一些引擎类,工具类,以及我们安卓下用到类的字节码都在里面
lib.jar 的大小也可以看到,特别小,8B,网上查了下,推测就是一些索引文件
再看上面 armeabi文件夹下,flutter.so是支持库,而lib.so其实就是我们的dart代码,别问我怎么知道的,花了一天时间才在愚人节这个特殊日子爬坑出来。😂😂😂😂
总结分析
为什么会掉坑里,因为之前的集成为了适配CPU,都会把flutter.so 拷贝到新的工程中,然而,新版本多了一个lib.so文件,这个其实就是Dart代码,个人理解 这个做法应该是也增加反编译难度,结合到之前遇到的升级后在原生找不到FlutterActivity的文章,可以去看下,大致就明白新的策略。
之前觉得我遇到的想象比较诡异,我明明在flutter 工程都把个人详情页面的Dart文件都删除了。clean了打成aar 后,集成到原生项目还是跳之前的页面,并不是我新的页面。这个诡异的问题,静下心来,排除了自己有没有低级错误,拍了几下脑袋,复盘下还是很快想到了,大改的问题产生路径。
修复方法
删除armeabi文件夹,正常打包,拿到flutter.so 和lib.so 重新创建armeabi文件夹,并丢进去,再次打包,就可以了。