如何在Flutter插件中正确引入Android本地.aar依赖库
Flutter插件Android端本地.aar依赖集成方案
构建Flutter插件Android端AAR产物时,Gradle默认不支持library模块直接通过implementation files('xxx.aar')的方式引用本地AAR文件,常规flatDir配置方案在插件场景下失效的核心原因是:插件AAR构建流程不会将flatDir引用的本地AAR打入最终插件产物的依赖列表,宿主App集成插件时会出现依赖缺失、类找不到的问题。以下是两种生产环境验证过的可行方案:
方案一:本地Maven仓库依赖(推荐,无兼容问题)
这个方案适配所有版本的Flutter、Gradle,支持自定义AAR自带传递依赖的场景,后续升级SDK版本维护成本低。
- 第一步:在插件项目的
android目录下新建repo文件夹,作为插件内置的本地Maven仓库根目录 - 第二步:将需要集成的自定义.aar文件,按照Maven仓库规范放入对应目录结构。举个例子,若你的自定义SDK组ID为
com.custom.sdk,组件ID为core,版本号为2.1.0,对应AAR文件名为core-2.1.0.aar,则目录结构如下:
android/ └── repo/ └── com/ └── custom/ └── sdk/ └── core/ └── 2.1.0/ ├── core-2.1.0.aar └── core-2.1.0.pom
- 第三步:在上述版本目录下创建对应
.pom文件,写入基础配置即可,若自定义AAR有其他第三方依赖,直接在pom的dependencies节点追加声明即可,基础pom内容参考:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.custom.sdk</groupId> <artifactId>core</artifactId> <version>2.1.0</version> <packaging>aar</packaging> </project>
- 第四步:修改插件
android/build.gradle文件,在repositories块中新增本地Maven仓库配置(注意不要只配置在buildscript下的repositories块,否则主工程依赖时找不到仓库地址):
rootProject.allprojects { repositories { maven { url uri('./repo') } // 保留原有的google、mavenCentral等仓库配置 } }
- 第五步:在dependencies块中通过Maven坐标方式依赖自定义AAR即可:
dependencies { implementation 'com.custom.sdk:core:2.1.0' }
配置完成后正常构建插件,Gradle会自动将本地Maven仓库中的AAR纳入插件的依赖传递链路,宿主App集成插件时不需要额外配置仓库地址,可自动拉取对应依赖。
方案二:AAR内容合并(轻量方案,适合简单依赖场景)
如果你的自定义AAR没有额外传递依赖,且后续升级频率很低,可以直接解压AAR将内容合并到插件Android模块中,不需要配置Maven结构:
- 将.aar文件作为压缩包解压,取出根目录下的
classes.jar,重命名为方便识别的名称(比如custom-sdk-core.jar),放入插件android模块的libs目录,通过implementation files('libs/custom-sdk-core.jar')方式依赖 - 将解压后
res目录下的所有资源文件,合并到插件android模块的src/main/res对应子目录下 - 对照解压后的
AndroidManifest.xml内容,将需要的权限、组件声明合并到插件模块的AndroidManifest.xml中 - 如果AAR内包含native so库,将解压后
jni目录下各架构的so文件,放入插件android模块的src/main/jniLibs对应架构目录下
常见避坑点
- 不要使用flatDir配置方式引用本地AAR:该配置仅对当前模块的本地构建生效,插件被其他项目引用时相对路径会直接失效,触发类找不到错误
- 不要尝试直接在dependencies中用files方式引用libs目录下的AAR:该写法会直接触发构建报错,没有可绕过的Gradle配置开关
- 如果自定义AAR存在传递依赖,一定要在pom文件中完整声明对应依赖坐标,否则宿主App运行时会抛出
NoClassDefFoundError
内容的提问来源于stack exchange,提问作者Wei Wen
相关产品推荐
相关产品推荐

