(原创)Flutter基础入门:手把手教你搭建Flutter混合项目:AAR方式集成

news2024/11/26 14:49:20

前言

上一篇博客讲了如何用“模块代码依赖模式”这种方式去搭建Flutter混合项目
因为篇幅原因,AAR集成方式来搭建项目的步骤和注意点放到这篇博客来讲
如果你没看过上篇博客,建议先阅读上一篇:
(原创)Flutter基础入门:手把手教你搭建Flutter混合项目
下面来讲具体的步骤

集成步骤

编译aar

首先进入到我们Flutter的Module中,我一般是把Module引入一个安卓工程
在settings.gradle文件中这样写:

include ':flutterxiongmodule'

引入后,进入到flutter的module目录中,执行命令:

flutter build aar

类似下图:
在这里插入图片描述
当然我们也可以用android studio这样构建aar
在这里插入图片描述
Tools菜单下也可以就行clean,去掉之前的构建缓存:
在这里插入图片描述
构建成功后,其实打印的日志就告诉我们怎样集成了,继续往下看
在这里插入图片描述

build下repo文件夹

aar构建成功后,我们的FlutterMoudle下面会有这些文件:
在这里插入图片描述
其中生成的aar文件就在这个目录的文件夹下,根据不同使用情况生成了三个对应的aar
如果是同事需要接入我们的aar,我们就把build下整个repo文件夹先复制一份给他
然后继续集成

集成aar

首先修改settings.gradle的内容

repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

改为

repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)

具体区别上篇博客有讲到
然后按照日志里的步骤,首先进入我们工程里的根目录下的build.gradle文件
加上这些内容

      var storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
      repositories {
        maven {
            url 'E:\myproject\testproject\FlutterHybridProject\flutterxiongmodule\build\host\outputs\repo'
        }
        maven {
            url "$storageUrl/download.flutter.io"
        }
      }

这里要注意,第一个maven的url,配置的就是我们repo文件夹的路径
如果你的同事需要使用你生成的aar
就把你发的repo文件夹,直接放到app工程下,类似这样
在这里插入图片描述
因为我是直接引入了FlutterMoudle
所以我的路径是这个

'E:\myproject\testproject\FlutterHybridProject\flutterxiongmodule\build\host\outputs\repo'

如果像上图一样放到app目录下,就是这种:

'E:\myproject\testproject\FlutterHybridProject\app\repo'

根目录下的build.gradle文件全部内容如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}

allprojects {
    var storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        maven {
            url 'E:/myproject/testproject/FlutterHybridProject/flutterxiongmodule/build/host/outputs/repo'
        }
        maven {
            url "$storageUrl/download.flutter.io"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

然后去我们app的build.gradle文件加上这些:

    dependencies {
      debugImplementation 'com.xiongyp.flutterxiongmodule:flutter_debug:1.0'
      profileImplementation 'com.xiongyp.flutterxiongmodule:flutter_profile:1.0'
      releaseImplementation 'com.xiongyp.flutterxiongmodule:flutter_release:1.0'
    }

如果只是测试下,不用三个aar都引入,引入第一个就好了,具体区别下面会专门介绍
然后在app的build.gradle文件的android的buildTypes下面加上:

        profile {
            initWith debug
        }

整体结构如下:

android {
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        profile {
            initWith debug
        }
    }
}

这样我们的aar就集成好了

页面跳转

这块就和上篇博客讲的一样了,大家按照上一篇的步骤来就好
做完了运行项目,就可以正常跳转到Flutter的页面了

注意点

四种运行方式

我们打出aar时,会发现生成了好几种:
在这里插入图片描述
这是因为Flutter有四种运行模式:Debug、Release、Profile和Test,这
四种模式在build的时候是完全独立的。
具体区别是:

  • Debug
      Debug模式可以在真机和模拟器上同时运行:会打开所有的断言,包括debugging信息、debugger aids(比如observatory)和服务扩展。优化了快速develop/run循环,但是没有优化执行速度、二进制大小和部署。命令flutter run就是以这种模式运行的,通过sky/tools/gn --android或者sky/tools/gn --ios来build。有时候也被叫做“checked模式”或者“slow模式”。

  • Release
      Release模式只能在真机上运行,不能在模拟器上运行:会关闭所有断言和debugging信息,关闭所有debugger工具。优化了快速启动、快速执行和减小包体积。禁用所有的debugging aids和服务扩展。这个模式是为了部署给最终的用户使用。命令flutter run --release就是以这种模式运行的,通过sky/tools/gn --android --runtime-mode=release或者sky/tools/gn --ios --runtime-mode=release来build。

  • Profile
       Profile模式只能在真机上运行,不能在模拟器上运行:基本和Release模式一致,除了启用了服务扩展和tracing,以及一些为了最低限度支持tracing运行的东西(比如可以连接observatory到进程)。命令flutter run --profile就是以这种模式运行的,通过sky/tools/gn --android --runtime-mode=profile或者sky/tools/gn --ios --runtime-mode=profile```来build。因为模拟器不能代表真实场景,所以不能在模拟器上运行。

  • test
       headless test模式只能在桌面上运行:基本和Debug模式一致,除了是headless的而且你能在桌面运行。命令flutter test就是以这种模式运行的,通过sky/tools/gn来build。

在我们实际开发中,应该用到上面所说的四种模式又各自分为两种:一种是未优化的模式,供开发人员调试使用;一种是优化过的模式,供最终的开发人员使用。默认情况下是未优化模式,如果要开启优化模式,build的时候在命令行后面添加–unoptimized参数。

解决aar包第三方库引用不到的问题

当你的Flutter中引用了第三方插件或者aar包时,在打出Flutter的aar后
你会发现找不到这个第三方的插件或者aar包了
也就是无法间接引用到这些插件和aar包
其实这问题不仅仅是Flutter有,
我们自己在封装sdk的过程中也会遇到,
比如android 工程将module打包成aar文件提供给他人使用,
其中引用了别人的aar。
但是module形成aar时不会自动把之前依赖的aar包打包进去,
还有一些引用的第三方库也不会打包进去,用的时候需要重复引用。
为了解决这个问题,除了自己重复引用外,
这里提供另外一个解决方案:
首先在root project的根目录下的build.gradle里添加:

 dependencies {
        classpath 'com.kezong:fat-aar:1.2.8'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

在需要打包成aar包的module工程里添加(相当于引入了这个插件):

apply plugin: 'com.kezong.fat-aar'

arr包以及第三方库包的引用方式如下:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    embed(name: 'aar包名称', ext: 'aar'){ transitive = true}
   
    embed ('com.squareup.okio:okio:1.14.1'){ transitive = true}
    embed ('com.squareup.okhttp3:okhttp:3.8.0'){ transitive = true}
    embed ('com.google.code.gson:gson:2.8.0'){ transitive = true}

}

Flutter build android aar 版本

当我们使用flutter build aar时,它总是构建1.0版本,例如:flutter_release-1.0.aar。
那么如何修改aar的版本呢?
一开始我想的是去修改pubspec.yaml文件里的version: 1.0.0+1
最后发现无效,实际应该是在你的命令行这样输入:

flutter build aar --build-number=2.0

number后面就是你的版本号
如果你只想生成 release aar 可以试试这个:

flutter build aar --no-debug --no-profile --build-number=2.0

有关此命令的更多信息,请尝试此:

flutter build aar -h

源码分享

文章里相关代码都放到gitee上面了,需要的可以自取哈
FlutterHybridProject
不同的分支是各自的集成方式示例,区别如下:

  • master 一个简单的安卓Helloworld项目
  • old_gradlesetting 模块代码依赖模式:Gradle版本低于Gradle7.X方式集成
  • new_gradlesetting 模块代码依赖模式:Gradle7.X方式集成
  • aar_flutter AAR依赖模式:基于Gradle7.X版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快来看看这些前端开发技巧你掌握多少吧

文章目录 一、代码整洁推荐1.1 三元(三目)运算符1.2 短路判断简写1.3 变量声明简写1.4 if真值判断简写1.5 For循环简写1.6 对象属性简写1.7 箭头函数简写1.8 隐式返回简写1.9 模板字符串1.10 默认参数值1.11 解构赋值简写1.12 多条件判断简写1.13 多变量赋值简写1.14 解构时重命…

easyExcel动态导出,合并指定单元格

如上图所示,需要使用easyExcel动态导出上述表格并指定合并其中的单元格,日期是动态的,每个月不相同,直接上实现代码,以demo形式展现,更好理解 /** * 考勤记录动态导出测试 */ GetMapping(&q…

【Kotlin学习】R2DBC与MyBatis性能对比

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、测试框架选取Spring Webflux VS Spring MVCSpring Data R2DBC VS MyBatis 二、测试代码编写1. 项目1核心代码1.1 引入依赖1.2 接口代码 2. 项目2核心代码2.…

Layui图片上传

前端代码&#xff1a; <div class"layui-upload"> <button type"button" class"layui-btn" id"test1">上传图片</button> <div class"layui-upload-list"> <img class"lay…

如何一次性生成大量结构相同、内容不同的二维码

使用 批量模板数据 的方式&#xff0c;可 一次性生成大量结构相同&#xff0c;内容不同的活码 &#xff0c;大幅提升制码效率。 模板的样式&#xff0c;关联的表单状态等所有内容均可进行修改&#xff0c;修改后所有子码都将批量更新&#xff0c;且模板可重复使用&#xff0c;让…

页面加载进度条(VUE3)

通常我们希望在页面跳转加载中&#xff0c;页面顶部出现进度条。 &#xff08;1&#xff09; 下载依赖 npm install nprogress --save &#xff08;2&#xff09;在router中得index.js中引入 import NProgress from nprogress import nprogress/nprogress.css &#xff08;…

C++——类和对象(2)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年4月25日 内容&#xff1a;C类和对象讲解 目录 前言&#xff1a; 1.this指针&#xff1a; 2.默认成员函数&#xff1a; 3.构造函数&#xff1a; 4.析构函数&#xff1a; 5.构造函数的问题&#xff1a; 结尾&#xff…

Transformer 代码详细解析

Transformer 代码详细解析 文章目录 Transformer 代码详细解析一、Transformer 背景介绍1.1 Transformer 的诞生1.2 Transformer 的优势1.3 Transformer 的市场 二、Transformer架构解析2.1 认识 Transformer 架构2.1.1 Transformer模型的作用2.1.2 Transformer 总体架构图 2.2…

全国计算机等级三级网络技术试卷详解(一)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1.下列关于RPR技术的描述中&#xff0c;错误的是&#xff08;&#xff09;。 A) RPR与FDDI一样使用双环结构 B) 在RPR环中&#xff0c;源节点向目的节点成功发出…

2023常用的10款电力电子系统仿真分析软件推荐

市场上有许多电子仿真器&#xff0c;那么对于电力电子项目来说&#xff0c;哪种仿真器最好呢&#xff1f;或者因为期望任何软件包在各个方面都是最好的是不合理的&#xff0c;那么用户如何确定哪个软件是项目的最佳选择&#xff1f; PSIM PSIM是一种模块化封装&#xff0c;专为…

华为认证实验篇-ENSP的安装(附下载地址)

ENSP&#xff08;Enterprise Network Simulation Platform&#xff09;是华为公司开发的一款网络仿真软件&#xff0c;它可以帮助网络工程师进行网络拓扑设计、网络配置、网络测试等工作。本篇文章将介绍如何在Windows操作系统上安装ENSP。后续会在专栏陆续更新ENSP的实验&…

MACH SYSTEMS操作手册 SAEJ2716(SENT) to RS-232/CAN Gateway怎么使用?

双通道SAE J2716 (SENT)至RS-232/CAN总线网关&#xff0c;具有两个双向SENT通道和RS-232 (SENT-RS232) 或CAN总线 (SENT-CAN) 接口。两种变体还提供两个模拟输出&#xff0c;可以直接将输入SENT数据转换为模拟电压。该网关配备了一个免费的PC应用程序&#xff0c;用于SENT通信分…

VS同时调试主程序和子程序工具

VS要想要实现同时调试主程序和子程序&#xff0c;可使用工具 Microsoft Child Process Debugging power Tool 来实现。 我的环境和官方使用说明 环境&#xff1a;VS2019 官方使用说明&#xff1a;Introducing the Child Process Debugging Power Tool - Azure DevOps Blogh…

Swagger 版本控制 注释展示(.NET)

版本控制 项目创建 以Visual Studio 2022为例&#xff0c;创建Web API项目&#xff0c;如下图所示。 在创建时勾选启用OpenAPI支持&#xff0c;默认安装Swashbuckle.AspNetCore库&#xff0c;并配置相关信息。 创建版本枚举类 /// <summary>/// 版本枚举/// </su…

新版Fluent默认保存的h5文件无法用Tecplot打开的解决办法(亲试有效,评论区是重点)

文章目录 Ansys Fluent简介Fluent 输入/出 文件格式新版Fluent的输出压缩文件&#xff08;.cas.h5文件&#xff09;解决办法 Ansys Fluent简介 Ansys Fluent &#xff0c;是国际上比较流行的商用CFD软件包&#xff0c;在美国的市场占有率为60%&#xff0c;凡是和流体、热传递和…

IP地址的分配

一、ip地址的作用 用IP地址来标识Internet的主机&#xff1b;IP协议可以根据路由选择协议提供的路由信息对IP数据报进行转发&#xff0c;直至抵达目的主机。IP地址和MAC地址的匹配&#xff1b;数据链路层使用MAC地址来发送数据帧&#xff0c;因此在实际发送IP报文时&#xff0…

分布式消息队列Kafka(四)- 消费者

1.Kafka消费方式 2.Kafka消费者工作流程 &#xff08;1&#xff09;总体工作流程 &#xff08;2&#xff09;消费者组工作流程 3.消费者API &#xff08;1&#xff09;单个消费者消费 实现代码 package com.zrclass.kafka.consumer; import org.apache.kafka.clients.consum…

【Golang项目实战】手把手教你写一个备忘录程序|附源码——建议收藏

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 前几天瑶瑶子…

0Ω电阻在PCB板中的5大常见作用

在PCB板中&#xff0c;时常见到一些阻值为0Ω的电阻。我们都知道&#xff0c;在电路中&#xff0c;电阻的作用是阻碍电流&#xff0c;而0Ω电阻显然失去了这个作用。那它存在于PCB板中的原因是什么呢&#xff1f;今天我们一探究竟。 1、充当跳线 在电路中&#xff0c;0Ω电阻…

CCF-CSP 2013-12-3 最大的矩形(暴力枚举)

首先我们可以先根据数据范围反推时间复杂度&#xff0c;比如&#xff0c;数据范围n < 1000,我们可以将时间复杂度控制在O(n), O(n)logn 思路上比较容易想到的是枚举所有情况&#xff0c;然后输出面积最大的情况即可 可以在第一重循环枚举i&#xff0c;表示从第i个矩形开始往…