如何在Flutter Plugin中导入aar文件?已尝试方案均无效
在Flutter Plugin中导入本地AAR文件的解决方案
直接在Flutter项目中导入AAR文件操作简单,但在Flutter Plugin中会遇到如下报错:
构建AAR时不支持直接依赖本地.aar文件。生成的AAR会损坏,因为本地.aar文件依赖的类和Android资源不会被打包到最终的AAR中。旧版本的Android Gradle Plugin在这种情况下也会生成损坏的AAR(尽管不会抛出该错误)。
尝试使用compileOnly fileTree(dir: 'libs', include: ['*.aar'])仅能完成编译,实际项目中无法正常导入使用。以下是经过验证的可行方案:
方案一:转为本地Maven仓库依赖(推荐)
这种方式从根源上解决直接依赖本地AAR的打包问题,是最稳定的方案:
- 在Flutter Plugin的
android目录下新建local-repo文件夹,将目标AAR文件放入其中。 - 在
android/build.gradle的allprojects.repositories中添加本地Maven仓库配置:
allprojects { repositories { google() mavenCentral() // 添加本地Maven仓库 maven { url uri('./local-repo') } } }
- 为AAR生成对应的POM文件:
- 在
local-repo下创建层级目录,格式为[groupId]/[artifactId]/[version],例如com/example/mylibrary/1.0.0 - 将AAR文件重命名为
[artifactId]-[version].aar(如mylibrary-1.0.0.aar)后放入该目录 - 同目录下创建
[artifactId]-[version].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.example</groupId> <artifactId>mylibrary</artifactId> <version>1.0.0</version> <packaging>aar</packaging> </project>
- 在Plugin的
android/build.gradle的dependencies中添加依赖:
implementation 'com.example:mylibrary:1.0.0'
方案二:使用flatDir配合implementation
若不想转为Maven仓库,可采用此方式,但需额外配置确保打包时AAR内容被正确包含:
- 在Plugin的
android/build.gradle中配置flatDir仓库:
repositories { google() mavenCentral() flatDir { dirs 'libs' } }
- 将AAR文件放入
android/libs目录,在dependencies中添加依赖:
implementation(name: 'mylibrary', ext: 'aar')
- 添加打包配置,确保AAR的资源和JNI库被包含到最终产物中:
android { sourceSets { main { jniLibs.srcDirs = ['libs'] } } } // 复制AAR到打包目录 task copyAARResources(type: Copy) { from file('libs/mylibrary.aar') into 'build/intermediates/merged_aar_jni_libs/release/out/lib' } // 关联打包任务 tasks.whenTaskAdded { task -> if (task.name.startsWith('assemble')) { task.dependsOn copyAARResources } }
方案三:解压AAR嵌入源码(适合小型AAR)
如果AAR体积较小,可直接解压后将内容嵌入Plugin源码:
- 解压AAR文件,得到
classes.jar、res、jni等目录。 - 将
classes.jar放入android/libs,添加依赖:
implementation files('libs/classes.jar')
- 将
res目录下的资源复制到Plugin的android/src/main/res目录,注意避免资源名冲突。 - 若AAR包含JNI库,将
jni下的文件复制到android/src/main/jniLibs目录。
内容的提问来源于stack exchange,提问作者Ramji
相关产品推荐
相关产品推荐

