Android通过aar引入flutter的系列问题的处理

2,051 阅读2分钟

最近升级了flutter 1.9,准备通过生成aar的方式将flutter集成到项目中。于是就开始干

  1. 升级到flutter 1.9 channel stable
  2. 把需要实现的需求通过flutter实现。
  3. 打包aar(1.9已支持flutter build aar命令),上传maven。
    这里也可以参考一下这位老哥的方案:flutter打包aar上传maven集成到原生android工程
  4. Android主项目引用aar出现了一些问题导致build apk失败
    4.1 项目编译java版本不同
    之前的Android主项目为java 1.7编译的,而flutter1.9默认只能通过java 8编译,否则会出现这样一个问题
    Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above.
    4.2 解决方法
    既然不能更改flutter的编译版本来兼容项目,那就只能更改主项目了,
    未更改之前我的配置如下
    Android studio版本为3.0.1
    project的build.gradle为classpath 'com.android.tools.build:gradle:2.2.3'
    修改之后如下
    android studio版本未改动。
    project的build.gradle改为classpath 'com.android.tools.build:gradle:3.0.1'
    app的build.gradle的android节点下增加1.8配置
android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}
  1. 通过FlutterView及FlutterActivity将flutter上实现的需求引入到Android项目中来,这种需要参考的资料就很多了,不懂的自行查找摸索吧。
  2. Android工程打包成功,从原生页面跳转到嵌有flutter的页面
    然后程序崩溃了!!! 错误如下:
Must be able to initialize the ICU context. Tried: /data/user/0/xxx/app_flutter/flutter_shared/icudtl.dat #43705
  • 这是由于flutter打包的时候并没有把/flutter_shared/icudtl.dat这个文件打到aar中,导致运行时需要该文件时程序崩溃,官方建议让我切换到master分支,但是我电脑内存已经不支持了🤦‍♀,但是“天无绝人之路”,让我发现了另一篇文章,来自这位老哥的Flutter集成到Android项目三部曲 ,他给的思路是找到一个icudtl.dat文件,直接放在Android项目中的assets下,这样Android项目打包的时候就直接将其打入包里了。然后我从原生页面跳转flutter,成功了!!!,TM了个巴子的。
  • 关于这个icudtl.dat文件如何拿到,根据上边这位老哥的说法,我在解压flutter1.9创建的项目中生成的apk后,也还是没有发现这个icudtl.dat文件,反而是在我之前低版本fluter的项目中的apk包找到了这个文件,试试看的态度将它拿过来就用了,结果证明是好用的。我觉得可能也是我flutter环境的相关配置有问题,如果有明白大佬,希望能指点一下,小弟不剩感激。

tips:

如果有遇到和我一样问题的同学,并且无法获取icudtl.dat这个文件的话,我把我这个icudtl放在了网盘上,有需要的同学自行下载吧。