flutter踩坑记录(三)-- 项目打包

flutter踩坑记录目录

flutter踩坑记录(一)--项目准备阶段   https://blog.csdn.net/hjr365708064/article/details/95454939

flutter踩坑记录(二)--基本使用及原生flutter交互篇  https://blog.csdn.net/hjr365708064/article/details/95459151

经过前面2篇帖子的介绍,我们已经基本掌握了flutte模块依赖,flutter页面显示,及flutter与原生的交互,接下来一个棘手的问题就是代码写好了,能打进原生的apk内吗?会和原生之前的打包冲突吗?是直接打module进apk吗?下面就来一一解答。

我们通过flutter的学习知道,在flutter的debug和release两种模式中,编译方式是完全不一样的,在release阶段,也就是正式打包apk时期会生成运行所需的so库,而release产生的so库是分32和64位之分的,不能同时打包,为了更通用,我们使用arm-v7a的so库,也就是说需要32位的so库。这个时候我们就需要去修改原生项目的app目录下的build文件,使整个项目的ndk配置只使用arm-v7a架构来实现。

android {
  defaultConfig {
   
    ndk {
        abiFilters "armeabi-v7a"
    }
  }
}

接下来我们考虑到底打包的时候要直接打module进入apk还是要使用flutter 目录下flutter build apk 命令生成的aar文件,经过多次实测直接打包module是不成功,会报一些底层错误,也参考网易新闻等大厂经验,最终是通过aar方式的依赖的集成来实现打包完成的(打包使用的是第三方andResGuard微信压缩打包方式,使用studio打包也测试使用module引入依赖是不成功的)。

既然打包是要用aar方式来实现,那我们之前依赖的flutter模块module方式还有用吗?经过查看多篇帖子最终确定思路为通过设置变量实现debug模式下依赖module,正式打包时依赖aar实现的方式,这样既可以加快开发编译的速度,不需要经常替换aar文件,又可实现正式打包的成功运行。

在flutter端打包apk产生所需的aar文件

在当前目录下使用命令行

flutter clean,首先清楚旧的build文件夹,以免影响正常打包

clean命令成功后执行flutter build apk 命令产生正式打包文件 ,在没有错误正常执行完成后可在flutter——myapplication(自定义的flutter目录)下找到.android文件夹下的Flutter文件夹下的build目录下的outputs下面的aar文件夹,里面有一个

flutter-release.aar和flutter—debug.aar,我们需要的是flutter-release.aar,文件大小为5.46M左右,如果比这个小很多,则说明打包失败,需要重新查看.android文件夹下的app目录下面的build配置是否正确,flutter文件和flutterFragment文件是否报错等。(因为正式打包出的aar文件中包含so库,所以文件大小不会小于5M)

引入aar依赖

android {

   repositories {

      flatDir {

         dirs 'libs'

        }

   }

}

在app下面和src平级见libs目录,放入aar

flutter踩坑记录(三)-- 项目打包_第1张图片

两种依赖方式的选择,设置isDebug变量区分开发还是正式打包

if(!rootProject.ext.isDebug){
    implementation(name: 'flutter-release', ext: 'aar')
}else {
    implementation project(':flutter')
}

做好这两部分之后别忘了添加混淆依赖,否则运行时打开页面会出现找不到class类的错误

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

到这一步我们已经可以在原生项目中愉快的打包了,因为使用了微信的压缩打包,并没有发现apk有明显增大的迹象,(可能是flutter项目中还没有引入图片的原因,后续继续观察安装包体积)

有一个遗留问题:之前flutter项目中有引入sharePreference第三方plugin,打包能完成,但是页面打开过程中报缺少share相关类,试用网上推荐的flat-aar插件效果不是很好,目前是先去掉了,等之后有时间再研究如何解决此问题,如果有人有好的解决方法也可评论回复,一起学习解决。

flutter作为谷歌推出新的跨平台解决方案还是很值得学习的,dart语言是以java语言为基础,对于有java语言开发经验的同学上手会容易一些,但可能因为出来时间太短了,还有很多坑需要去踩,网上也有很多优秀的帖子解决flutter使用中的问题,有幸能和flutter一起成长,我也会从中学习和收获很多。

参考文章 网易:http://dy.163.com/v2/article/detail/EA0O4PQ705376OPS.html

Flutter aar打包踩坑之旅   https://www.jianshu.com/p/95adb8ab934a

你可能感兴趣的:(flutter使用)