Flutter应用迁移Gradle新架构时Huawei AGCP插件应用失败问题
我了解com.huawei.agconnect plugin not found相关问题,但现有方案均不适用,旧方案已失效。目前正尝试将Flutter应用迁移至基于plugin块的Gradle新架构,但AGCP插件仍无法完全摒弃旧的buildscript配置方式。应用需生成Google和Huawei两个渠道包,必须保证渠道包中不包含竞品代码(应用商店要求即使未运行也不能存在竞品库)。此前运行正常,但近一年华为相关方案滞后,问题始终无法彻底解决。
基本配置
settings.gradle配置
pluginManagement { [...] repositories { google() mavenCentral() maven { url "https://developer.huawei.com/repo/" } gradlePluginPortal() } resolutionStrategy { eachPlugin { if (requested.id.id == "com.huawei.agconnect") { useModule("com.huawei.agconnect:agcp:1.9.1.303") } } } } plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "7.3.1" apply false id "org.jetbrains.kotlin.android" version "1.9.22" apply false id "com.huawei.agconnect" version "1.9.1.303" apply false }
应用层build.gradle配置
项目根build.gradle已按新Gradle方式精简,应用层build.gradle保留buildscript并通过条件判断配置依赖与插件:
buildscript { repositories { maven { url 'https://developer.huawei.com/repo/' } } dependencies { if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains("huawei")) { classpath 'com.android.tools.build:gradle:7.3.1' classpath 'com.huawei.agconnect:agcp:1.9.1.303' } } } [...] each { flavor -> if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains("huawei")) { apply plugin: "com.huawei.agconnect" } }
当前报错与核心问题
当前构建报错:No such property: rootProject for class: com.huawei.agconnect.agcp.AGCProcess.
若不应用AGCP插件,应用可编译但无法正常运行——因为AGCP插件需处理agconnect-services.json中的条目供运行时使用,缺失该处理则无法展示广告。
有资料提到1.9.1.300+版本的AGCP原生兼容Gradle 8(需升级com.android.application至8.1.1并调整gradle-wrapper版本),但目前不可行:新Gradle要求android块中配置namespace,自研插件可适配,但多数社区插件未升级,导致构建失败。
尝试的新方案(更新)
尝试将Huawei相关Gradle配置迁移至内部模块(已有Google和Huawei两个渠道模块)。此前不知道无Android代码的普通包模块也可配置Gradle文件(原模块无android文件夹)。
为模块新增android文件夹及三个核心文件:
settings.gradle:配置插件管理与解析策略local.properties:补充缺失的根项目名称build.gradle:配置buildscript且无需条件执行
应用层移除了相关配置与条件插件应用,交由模块处理。但该方案仍无效:
- 编译无报错,但
agconnect-services.json未被处理(验证:故意写入语法错误无提示;华为文档要求APK的resources.arsc需包含agc_开头的字符串资源,实际未生成) - 运行时提示未找到JSON文件,无法展示广告
- 尝试在Manifest中手动配置
appid和cpid,Huawei IAP可正常使用,但广告功能仍失效
内容的提问来源于stack exchange,提问作者Gábor

