前言
本篇写一个将 flutter 打包为 aar 置入已有项目的方案
与前篇不同的是: 本篇使用新版本的 flutter 环境, 使用 build aar 命令构建 aar,并上传至 maven 私服
开发环境
$ flutter doctor -v
[✓] Flutter (Channel stable, v1.12.13+hotfix.7, on Mac OS X 10.15 19A602, locale zh-Hans-CN)
• Flutter version 1.12.13+hotfix.7 at /Users/caijinglong/Library/Flutter/flutter_dev
• Framework revision 9f5ff2306b (9 天前), 2020-01-26 22:38:26 -0800
• Engine revision a67792536c
• Dart version 2.7.0
准备步骤
创建宿主工程
这个是模拟你本来的项目
作为原生开发者自行使用 Android Studio 创建即可
一个标准的 android 项目, 除了 gradle 版本使用 6.1.1, 和 maven 仓库使用阿里云镜像, 其他并没有什么修改
创建 flutter 项目
这个是模拟你的 flutter 项目
使用 module type
$ flutter create -t module flutter_module_example
如果你不是这种类型创建的项目, 理论上也可以用 flutter build aar, 但是不保证完全一样
本机启动一个 maven 私服
这里使用 docker-compose 启动, 根据你自己的情况来安装, 如果你有公司的 maven 私服或你不喜欢用 docker, 则根据你自己的实际情况跳过这步或使用别的 maven 私服
version: "3"
services:
nexus:
image: sonatype/nexus3
ports:
- 9000:8081
volumes:
- /Volumes/Samsung-T5/docker/nexus/data:/nexus-data
语法是 宿主机:docker 镜像
端口是将 docker 的 8081 映射到本机的 9000 端口
volumes 是映射 nexus 的数据到本机的文件夹内
$ docker-compose up
启动 docker
我这里不是初次安装, 所以没有, 你如果是初次安装可以从 data 文件夹内找到 admin.password
查看初始密码
一般初次登陆会让你设置一个, 记住它后面要用到
这个就是私服的 maven url 地址
flutter 项目
修改项目
本篇修改一下 flutter 项目, 引入一个path_provider
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
path_provider: any
实际开发时别用这个 any 版本号, 我只是懒得看最新版是多少而已
构建 aar
$ flutter build aar
来打包
这里 build 完, console 日志有提示你怎么配置你的 host 项目, 如果你是自己开发, 直接用本地的 repo 目录作为仓库就可以了, 将配置复制到项目里即可
repositories 闭包配置可以写在在 host 项目, 也可以配置在 app module 中, 你如果不明白项目和 module 的差别, 可以请教你们安卓原生同事, 也可以自行百度
其他的配置请配置到 app module 里
// 添加 maven 仓库 url
repositories {
maven {
url '/Volumes/Samsung-T5/code/flutter/exists_blog/flutter_module_example/build/host/outputs/repo' // 这个是我本地的, 你根据你自己的情况肯定不一样, 不要直接复制粘贴我的, 粘贴命令行里的
}
maven {
url 'http://download.flutter.io' // 这个是flutter的maven仓库地址
}
}
// 添加依赖
dependencies {
debugImplementation 'com.example.flutter_module_example:flutter_debug:1.0'
profileImplementation 'com.example.flutter_module_example:flutter_profile:1.0'
releaseImplementation 'com.example.flutter_module_example:flutter_release:1.0'
}
// 因为android项目默认是没有profile类型的, 这里需要你自己加一个, 然后配置参考debug
android {
buildTypes {
profile {
initWith debug
}
}
}
当然, 实际上不太可能是自己开发, 即便是自己开发, 也不可能家里和公司连目录结构都一模一样, 然后这里就是 maven 私服的作用了, 让依赖相同, 以便于合作开发
分析下构建产物
这里我们注意到, 我们依赖只有一个 flutter_module_example, 没有 path_provider, 这个就是 maven 帮我们处理的了
看目录结构, path_provider 是有的, 还分为 release profile debug
这里是 flutter 项目对应的 pom 文件, 依赖了三部分代码, 这样 maven 就会自动帮你把这三部分代码都下载并依赖
上传依赖
使用界面上传
这里分别上传就看见了
因为是演示, 我只上传 release 的, 然后在 host 项目里引用
项目里, 根目录的build.gradle
repositories{
maven{
url 'http://localhost:9000/repository/maven-releases/' // 你自己的maven私服地址
}
maven{
url 'htt