构建Flutter插件时Android Gradle Plugin报错:本地AAR依赖不支持
解决Flutter插件构建AAR时本地AAR依赖问题
问题原因
Android Gradle插件(AGP)7.0+明确禁止Library模块直接依赖本地.aar文件。因为构建AAR时,本地AAR中的类、资源不会被打包进最终生成的插件AAR中,导致下游项目引用插件时出现类找不到、资源缺失的问题。旧版AGP虽然不报错,但生成的AAR同样是损坏的。
解决方案(推荐官方方式:发布本地AAR到本地Maven仓库)
步骤1:修改插件的Android Library模块build.gradle
在rfid_c72_plugin/android/build.gradle中添加Maven发布配置,将本地AAR发布到本地Maven仓库:
group 'com.example.rfid_c72_plugin' version '1.0' buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.2.2' } } rootProject.allprojects { repositories { google() mavenCentral() // 添加本地Maven仓库地址 mavenLocal() } } apply plugin: 'com.android.library' // 添加maven-publish插件 apply plugin: 'maven-publish' android { compileSdkVersion 30 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { minSdkVersion 20 } lintOptions { checkReleaseBuilds false abortOnError false } } // 配置发布本地AAR到本地Maven publishing { publications { aar(MavenPublication) { // 指定要发布的AAR文件 artifact file('libs/DeviceAPI_ver20220518_release.aar') // 设置Maven坐标,可自定义 groupId 'com.rfid.c72' artifactId 'device-api' version '20220518' } } } dependencies { //rx Android for updating status implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.19' // 保留jar文件的依赖 implementation files('libs/xUtils-2.5.5.jar') // 引用本地Maven中的AAR依赖 implementation 'com.rfid.c72:device-api:20220518' }
步骤2:发布AAR到本地Maven仓库
在终端进入插件的Android目录(rfid_c72_plugin/android),执行以下Gradle命令:
./gradlew publishToMavenLocal
执行成功后,该AAR会被发布到本地Maven仓库(默认路径:~/.m2/repository/com/rfid/c72/device-api/20220518/)。
步骤3:构建Flutter插件AAR
现在可以正常执行构建命令:
flutter build aar
备选方案:将AAR解压合并到插件模块
如果不想使用本地Maven,可将AAR解压后合并到插件模块中(适合结构简单的AAR):
- 解压
DeviceAPI_ver20220518_release.aar,得到classes.jar、res目录、AndroidManifest.xml等文件。 - 将
classes.jar复制到插件的libs目录下。 - 将
res目录中的资源合并到插件模块的res目录(注意避免资源名冲突)。 - 将
AndroidManifest.xml中的权限、组件等配置合并到插件的AndroidManifest.xml中。 - 修改依赖,移除本地AAR的引用,改为引用解压后的jar:
dependencies { // ...其他依赖 implementation files('libs/classes.jar') implementation files('libs/xUtils-2.5.5.jar') }
备选方案:创建包装模块依赖AAR
- 在插件的Android目录下新建一个Android Library模块(比如命名为
device-api-wrapper)。 - 将
DeviceAPI_ver20220518_release.aar复制到该模块的libs目录,在其build.gradle中添加依赖:
dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) }
- 在主插件模块的
build.gradle中依赖这个包装模块:
dependencies { // ...其他依赖 implementation project(':device-api-wrapper') }
内容的提问来源于stack exchange,提问作者Justin Roy
相关产品推荐
相关产品推荐

