Flutter开发-使用命令创建Flutter App/Module/Plugin/Package

本文详细介绍了Flutter的四种主要工程类型,包括FlutterApplication、FlutterModule、FlutterPlugin和FlutterPackage,每种类型的创建命令、目录结构及用途,为开发者提供全面的项目创建指导。

Flutter四种工程类型

1. Flutter Application (全新的APP)

标准的Flutter App工程,包含标准的Dart层与Native平台层 创建命令

flutter create xxapp
//默认Android使用Java,iOS使用Objective-C。
//如果要指定语言,比如安卓使用Kotlin,iOS使用Swift
flutter create -i swift -a kotlin xxapp
复制代码

工程目录:

2. Flutter Module (混编到已有的安卓/iOS工程内)

官方的混编方案-Add Flutter to existing apps

flutter create -t module xxapp_module
复制代码

工程目录:

3. Flutter Plugin

Flutter平台插件工程,包含Dart层与Native平台层的实现

flutter create --template=plugin xxapp_plugin
复制代码

工程目录:

4. Flutter Package

Flutter纯Dart插件工程,仅包含Dart层的实现,往往定义一些公共Widget

flutter create --template=package xxapp_package
复制代码

工程目录:

转载于:https://juejin.im/post/5cda8401e51d453b6d4d144e

<think>我们有两个主要问题需要解决: 1. Flutter项目中sqflite版本冲突如何解决 2. 构建AAR时报'AARs can only be built for plugin or module projects'错误 根据引用内容,我们得知: - 构建AAR时,如果项目不是插件或模块项目,会报错(引用[1]提到使用`flutter build aar`命令-Flutter项目中存在三方依赖(如sqflite)时,需要特殊处理才能打包进AAR(引用[2]) - 在插件中直接引入本地AAR会导致构建失败(引用[4]和[5]),因为构建AAR时不允许直接依赖本地AAR 因此,我们分步解决: ### 问题1: sqflite版本冲突 版本冲突通常是由于多个依赖对同一个库要求不同的版本范围导致。解决方法: #### 步骤1: 检查依赖树 运行以下命令查看依赖冲突: ```bash flutter pub deps ``` 或者使用更详细的方式: ```bash flutter pub outdated ``` #### 步骤2: 解决冲突 在`pubspec.yaml`中,可以通过`dependency_overrides`强制使用特定版本(不推荐长期使用,仅临时解决): ```yaml dependency_overrides: sqflite: ^2.0.0+4 # 替换为你需要的版本 ``` 但更好的方式是: 1. 尝试升级所有依赖到最新版本,看是否自动解决冲突 2. 如果某个依赖要求过时的sqflite版本,考虑升级该依赖或寻替代品 #### 步骤3: 使用`pub upgrade`和`pub get` 更新依赖: ```bash flutter pub upgrade ``` ### 问题2: 修复构建AAR时报错 错误信息:'AARs can only be built for plugin or module projects' 根据引用[1],只有插件或模块项目才能构建AAR。因此,我们需要将项目配置为模块。 #### 步骤1: 确保项目是模块 在Flutter项目中,需要将其配置为模块,以便能够生成AAR。 在`android`目录下,检查`build.gradle`文件,确保应用的是`com.android.library`插件(而不是`com.android.application`): ```gradle apply plugin: 'com.android.library' ``` #### 步骤2: 配置fat-aar(用于包含三方依赖) 根据引用[2],当Flutter项目依赖了第三方插件(如sqflite)时,需要配置fat-aar将这些依赖打包进AAR。 在`android`目录下的`build.gradle`文件中,添加fat-aar配置: 1. 在`buildscript`中添加fat-aar依赖: ```gradle buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' // 确保Gradle插件版本支持 // 添加fat-aar插件 classpath 'com.kezong:fat-aar:1.3.6' } } ``` 2. 应用fat-aar插件: ```gradle apply plugin: 'com.kezong.fat-aar' ``` 3. 修改依赖配置,将需要合并的依赖使用`embed`代替`implementation`: ```gradle dependencies { // 将Flutter模块依赖的插件用embed方式引入 embed project(':flutter_plugin_that_you_depend') // 替换为你的插件名称,例如sqflite对应的插件 // 注意:sqflite本身是一个Flutter插件,它对应的Android模块名通常是插件名(如:sqflite对应的Android模块是':sqflite') // 示例:假设你的项目依赖了sqflite插件,那么应该这样写: // embed project(':sqflite') } ``` 但是,请注意:直接这样写可能会不到模块,因为sqflite插件是以项目依赖的形式存在。我们需要在`settings.gradle`中引入这些模块。 #### 步骤3: 配置settings.gradle 根据引用[3],在`android/settings.gradle`中添加以下配置,将Flutter插件引入: ```gradle include ':app' // 你的主模块,如果有的话 // 引入Flutter模块 setBinding(new Binding([gradle: this])) evaluate(new File(settingsDir, '../.android/include_flutter.groovy')) // 注意:上面的路径可能根据项目结构有所不同 // 引入你依赖的插件(例如sqflite) include ':sqflite' project(':sqflite').projectDir = new File('../../path/to/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-x.x.x/android/') ``` 但是,这种方法需要知道插件的本地路径,且不易维护。 实际上,更推荐的方法是使用Flutter官方提供的构建AAR命令,它会自动处理这些依赖。但根据引用[2],我们需要使用fat-aar来打包第三方依赖。 #### 步骤4: 使用Flutter命令构建AAR 运行: ```bash flutter build aar ``` 此命令会自动构建所有变体(debug, release等)的AAR,并输出到`build/host/outputs/repo`(引用[1])。 如果遇到插件中的AAR依赖问题(如引用[4][5]),需要确保在插件中不要直接依赖本地AAR。如果必须使用本地AAR,可以尝试将AAR上传到本地Maven仓库,然后通过`mavenLocal()`引用。 ### 综合解决方案: 1. **解决sqflite版本冲突**: - 使用`dependency_overrides`临时解决(不推荐长期使用- 或升级相关依赖 2. **配置项目以构建AAR**: - 将`android`目录下的`build.gradle`中的`com.android.application`改为`com.android.library` - 移除`applicationId` - 配置fat-aar插件(用于打包第三方依赖) - 修改依赖,将需要打包进AAR的依赖从`implementation`改为`embed` - 在`settings.gradle`中正确引入Flutter和插件模块 3. **构建命令**: ```bash flutter clean flutter pub get flutter build aar ``` ### 注意事项: - 构建AAR时,确保Android项目的Gradle配置正确。 - 如果遇到插件中的本地AAR依赖问题,参考引用[5]的解决方案:将本地AAR上传到本地Maven仓库,然后在插件中通过`mavenLocal()`引入,并使用`implementation`(而不是直接依赖文件)。 示例(插件中的build.gradle): ```gradle repositories { mavenLocal() // ... 其他仓库 } dependencies { implementation 'com.example:my-aar:1.0.0' // 通过mavenLocal引入 } ``` 上传AAR到本地Maven仓库的方法: ```bash ./gradlew publishToMavenLocal ``` 或者手动安装(如果AAR文件不多): ```bash mvn install:install-file -Dfile=path-to-aar -DgroupId=com.example -DartifactId=my-aar -Dversion=1.0.0 -Dpackaging=aar ``` 由于问题复杂,以上步骤可能需要根据实际项目调整。 --- §§相关问题§§ 1. 如何将Flutter模块集成到现有Android应用中? 2. 如何发布Flutter插件到本地Maven仓库? 3. 如何解决Flutter插件中的资源冲突问题? 4. 如何配置Flutter项目的多环境构建? [^1]: Flutter Module生成aar遇到的问题和解决方法 [^2]: 通过fat-aar配置打包三方依赖 [^3]: 在settings.gradle中引入模块 [^4]: Flutter插件中引入本地AAR导致的构建错误 [^5]: Flutter插件开发之集成本地AAR</think>### 解决 Flutter 项目中 sqflite 版本冲突与 AAR 构建错误 #### 问题 1: 解决 sqflite 版本冲突 **根本原因**: 当多个插件依赖不同版本的 sqflite 时,会导致版本冲突。需统一所有依赖的 sqflite 版本。 **解决方案**: 1. **检查依赖树** 在项目根目录运行: ```bash flutter pub deps ``` 查所有依赖 sqflite 的插件及其版本要求。 2. **强制统一版本** 在 `pubspec.yaml` 中添加版本覆盖: ```yaml dependency_overrides: sqflite: ^2.3.0 # 指定兼容的版本 ``` 3. **验证依赖** 删除旧依赖并重新获取: ```bash rm -rf .dart_tool/ # 清除缓存 flutter clean flutter pub get ``` #### 问题 2: 修复构建 AAR 报错 `AARs can only be built for plugin or module projects` **根本原因**: Flutter 项目需配置为模块才能生成 AAR(引用[1])。直接构建普通 Flutter 项目会触发此错误。 **解决方案**: 1. **转换为模块项目** 在 `android/build.gradle` 中修改: ```gradle // 将 application 改为 library apply plugin: 'com.android.library' // 替代 com.android.application android { defaultConfig { // 删除 applicationId } } ``` 2. **配置 FAT-AAR(关键步骤)** 添加 fat-aar 插件合并三方依赖(引用[2]): ```gradle // android/build.gradle buildscript { dependencies { classpath 'com.kezong:fat-aar:1.3.8' // 添加 fat-aar } } apply plugin: 'com.kezong.fat-aar' dependencies { implementation project(':flutter') // 必须存在 embed project(':sqflite') // 用 embed 替代 implementation // 其他插件同样使用 embed } ``` 3. **修复本地 AAR 依赖问题** 若插件包含本地 AAR(如某些人脸识别 SDK),需在 **主项目** 中配置(引用[3][4]): ```gradle // android/settings.gradle include ':face_sdk' project(':face_sdk').projectDir = file('../path/to/face_sdk') // 指向 AAR 所在目录 ``` ```gradle // android/build.gradle dependencies { implementation project(':face_sdk') // 在主项目中引入 } ``` #### 完整构建流程 1. 配置项目: ```bash flutter clean flutter pub get ``` 2. 生成 AAR: ```bash flutter build aar --no-debug --no-profile # 仅生成 release ``` 3. 输出位置: ``` build/host/outputs/repo/ # 引用[1]中默认输出路径 ``` #### 关键注意事项 1. **fat-aar 必须配置**:否则三方依赖不会打包进 AAR(引用[2]) 2. **插件中的 AAR 处理**:禁止在插件内直接依赖本地 AAR(引用[4][5]),必须提升到主项目 3. **模块化验证**:通过 `include ':flutter'` 确保项目被识别为模块(引用[3]) > **结果验证**:成功构建后,检查输出目录应包含: > ``` > your_package-release.aar > pom.xml # 包含所有依赖声明 > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值