
Flutter入门进阶之旅(十八)Flutter项目打包成aar集成到原生And
课程目标
掌握flutter打包成aar的整体流程
利用fat-aar把flutter项目中的三方依赖打入aar资源包中
项目准备:
flutter端项目我采用的是本专栏的实例代码项目:https://github.com/xiedong11/flutter_app,Android端原生项目为新建的一个hello world项目,flutter端的相关配置我会上传到github仓库中,原生Android项目比较简单,我只在本博客中贴出部分关键代码
1.flutter项目打包成aar
flutter端项目工程目录
Flutter端项目工程目录
上面截图的flutter工程需要经过我们的改造才能作为一个aar的形式存在,要被打包成aar的flutter端的项目是作为一个独立的module运行在宿主app(原生Android)中,所以我们需要修改两个地方,让我们打包出来的产物变成aar而不是独立运行的apk。
1.1修改Android下的 build.gradle
1. 2 修改Androidmanifest.xml文件
需要修改的地方,我都在源码里留注释了,这里就不展开赘述了,下面我们来通过gradle获得编译好的aar产物
因为在build.gradle 中,我们把apply plugin: 'com.android.application'修改成了,apply plugin: 'com.android.library'
所以,现在通过Terminal中我执行gradlew assembleRelease编译出的产物会有原来的apk变成aar文件,文件输出目录为项目根目录下的/bulid/app/outputs/aar
如下图所示:
1.3 Android端项目配置接入aar依赖
1.3.1 新建原生Android项目,我上述打包产出的aar文件作为依赖放入libs文件夹
1.3.2 修改dependencies节点下的fileTree依赖配置,支持引入aar依赖支持
1.3.3 在原生Android项目中写一个简单的按钮测试flutter项目
至此,把flutter项目打包成aar导入到原生Android项目中的所有工程配置已经结束了,读者可以测试上上述整个过程;但有时候我们的flutter项目并不是单纯的flutter官方代码,开发过程中少不了引入一些三方依赖,像上节课我们讲到的Dio网络请求库,或者是通过pubspec.yaml引入的其他开源工具类,这种情况下,通过上边的配置方式,你会发现第三方的依赖代码是打不进aar包里的,下面我们就讲解一下借助fat-aar的形式把三方依赖代码打入aar包中去
2.flutter项目中存在三方依赖
通过上边的配置,我们只能把纯flutter项目打包成aar文件,换句话说,如果我们的flutter项目存在三方依赖是不能正常打包进flutter产物里的,这个时候我们就需要通过在Android原生项目中引入fat-aar配置,确保把flutter项目中的三方依赖正常打包进去flutter产物中去。
2.1修改项目工程目录的build.gradle文件,引入fat-aar支持
2.2 在上边第一部分配置app文件下build.gradle基础上,增加fat-aar相关配置,这里为了切换aar library运行环境,我引入isAarLibrary标志位作为切换环境开关,方便工程配置,具体代码如下:
2.3 AndroidManifest.xml清单文件中不需要增加额外配置,原生Android端唤起flutter项目aar包的方式也不需要修改,整个引入fat-aar的过程只是为了确保能把flutter项目中的三方依赖代码打入到flutter产物中去,所以关于flutter打包成aar的操作跟第一步保持一致就行,第二步的配置,只是为了确保flutter项目中的三方依赖能正常打包进flutter产物中去
效果图是我把本专栏的相关代码作为一个aar集成到一个新建的原生Android项目中,效果图如下:
项目的完整代码配置在https://github.com/xiedong11/flutter_app 中,读者可以参考具体配置细节,笔者在写本篇博文打包aar时的flutter 环境stable版本为 flutter v1.9.1,读者尽量用官方稳定版的代码做测试。
