Flutter Android add-to-app 三种方式详解

704 阅读3分钟

Flutter Android add-to-app 三种方式详解

在Android中添加或依赖flutter module,官方文档有详细介绍,如果查看官方文档操作后出现各种水土不服,请往下看。。。

注:

  • [groupId] 类似于包名 com.xx.xxx,替换为自己的即可(fluter module工程设定的)
  • [fluterProjectName] 指fluter module工程名,替换为自己的即可
  • 下文中的配置,关于本地路径的配置,相对、绝对路径均可
  • 下文中的配置,除非特别说明,否则均为Android工程配置
  • 关于所有情况下的repositories配置,注意:
    • 如果你的agp版本7及以上(记得应该是从7开始的),必须在setting.gradle中配置repositories;7以下在projectbuild.gralde中配置。
    • 7及以上在setting.gradle中配置时,注意一般需要设置:
          repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
      
      1. RepositoriesMode.FAIL_ON_PROJECT_REPOS是默认模式,使用‘设置’的 repositories 配置(setting.gradle中的配置)、如果有冲突就会报错。类似报这样的错误:Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository ‘maven’ was added by plugin class ‘FlutterPlugin
      2. RepositoriesMode.PREFER_PROJECT是倾向于‘项目’的 repositories 配置(项目的build.gradle中的配置);
      3. RepositoriesMode.PREFER_SETTINGS是倾向于‘设置’的 repositories 配置(setting.gradle中的配置);

一、本地maven

1. repositories配置

此处再强调一下,如果你的agp版本7及以上(记得应该是从7开始的),必须在setting.gradle中配置;7以下在projectbuild.gralde中配置。 配置错误将导致无法正确依赖flutter module编译的本地maven库中的aar包,或无法下载flutter插件

repositories {
    maven {
        //使用本地flutter工程编译目录配置时配置如下(相对、绝对路径均可)
        url 'D:/xxxxx/[fluterProjectName]/build/host/outputs/repo'
    }

    maven {
        //无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
        url "https://storage.flutter-io.cn/download.flutter.io"        //flutter依赖
    }
}

2. app/build.gralde配置

//使用本地flutter工程编译目录配置依赖时
debugImplementation '[groupId].[fluterProjectName]:flutter_debug:1.0'
releaseImplementation '[groupId].[fluterProjectName]:flutter_release:1.0'

二、aar文件依赖

1. flutter module项目编译出的aar文件

flutter module项目中build aar后生成的所有aar文件(路径:D:/xxxxx/[fluterProjectName]/build/host/outputs/repo,每个aar使用release或debug看情况,分别对应使用即可), copy到Android工程libs中。

2. repositories配置

maven {
    //无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
    url "https://storage.flutter-io.cn/download.flutter.io"        //flutter依赖
}

3. app/build.gralde配置

//依赖libs下所有aar文件
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
//copy所有aar到android工程中配置依赖时
implementation 'io.flutter:flutter_embedding_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:armeabi_v7a_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:arm64_v8a_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:x86_64_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
  • 此配置用于下载和依赖flutter插件相关的jar和jar中的.so(不同架构)

  • 其中xxxxxxxxx:1.0.0-后面跟的一长串版本号,请到D:/xxxxx/[fluterProjectName]/build/host/outputs/repo/[groupId]/[fluterProjectName]/flutter_debug/1.0/flutter_debug-1.0.pom文件中,往下拉查看

三、module依赖(便于开发调试)

1. repositories配置

maven {
    //无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
    url "https://storage.flutter-io.cn/download.flutter.io"        //flutter依赖
}

2. setting.gradle配置

setBinding(new Binding([gradle: this]))
evaluate(new File('D:/xxxxx/[fluterProjectName]/.android/','include_flutter.groovy'))

3. app/build.gralde配置

implementation project(':flutter')

4. gradle.properties配置

当Android工程的主app,名称不是:app时(比如修改了主module的名字为:demo_abc_test

flutter.hostAppProjectName = demo_abc_test