com.huawei.agconnect 插件未找到



所以我正在尝试使用新的Kotlin DSL语法将AppGallery connect gradle插件添加到我的Android项目中。但是我收到这样的错误:

org.gradle.internal.exceptions.LocationAwareException: Build file 'D:#KERJAANdevbasesamplebuild.gradle.kts' line: 3
Plugin [id: 'com.huawei.agconnect', version: '1.6.3.300'] was not found in any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.6.3.300')
Searched in the following repositories:
Gradle Central Plugin Repository
Google
MavenRepo
maven(https://developer.huawei.com/repo/)

我所做的是在settings.gradle.kts中为这样的插件添加存储库:

pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
maven { setUrl("https://developer.huawei.com/repo/") }
}
}

并在应用程序的build.gradle.kts中添加这样的插件:

plugins {
id("com.huawei.agconnect") version "1.6.3.300"
}

有趣的是,如果使用根build.gradle.kts中的类路径,它可以工作。有谁知道为什么?

任何 Gradle 插件(这根本不是 AGC 特定的)只能在根项目级别加载,然后通常应用于模块级别。我刚刚尝试删除buildscript块(与问题类似),这确实导致:

Plugin [id: 'com.huawei.agconnect', version: '1.7.3.302', apply: false] was not found in any of the following sources:
maven(https://developer.huawei.com/repo/)
Plugin Repositories (could not resolve plugin artifact 'com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.7.3.302')

插件依赖项不会解析,而pluginManagement不断添加.gradle.plugin。如果存储库知道完整名称而不仅仅是简写名称agcp,这应该开箱即用(这实际上是默认的预期包名称,除非更改它):

com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.7.3.302

这不匹配:

com.huawei.agconnect:agcp:1.7.3.302

可以使用pluginManagement.resolutionStrategy作为临时解决方法...

settings.gradle用于重写错误假定的包名称:

pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
google()
maven { url 'https://developer.huawei.com/repo/' }
}
plugins {}
resolutionStrategy {
eachPlugin {
if (it.requested.id.getNamespace() == 'com.huawei.agconnect') {
println ">> ${it.requested.id.id}"
if (it.requested.id.id == 'com.huawei.agconnect.agcp') {
it.useModule('com.huawei.agconnect:agcp:1.7.3.302')
}
if (it.requested.id.id == 'com.huawei.agconnect.apms') {
it.useModule('com.huawei.agconnect:agconnect-apms-plugin:1.6.1.300')
}
println ">> ${it.target}"
} else {
println ">  ${it.target}"
}
}
}
}

plugins必须在build.gradle中定义:

plugins {
id "com.android.application" version "7.3.1" apply false
id "com.android.library" version "7.3.1" apply false
id "com.huawei.agconnect.agcp" version "1.7.3.302" apply false
id "com.huawei.agconnect.apms" version "1.6.1.300" apply false
}

println将输出更新的(假)idartifact映射it.target

[
id: 'com.huawei.agconnect.agcp',
version: '1.7.3.302',
artifact: 'com.huawei.agconnect:agcp:1.7.3.302',
apply: false
]

应用时,仍然需要使用真实的id

apply plugin: 'com.huawei.agconnect'

只是(从版本1.7.3.302开始)APMSTransform进行了一些检查,这需要明确地将AGP放在classpath上。buildscript块"几乎"过时了,如果不是APMSTransform错误地假设,它是可以加载Android Gradle插件的唯一地方。

/** Still required due to AGCP plugin. */
buildscript {
repositories {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
}
}

它还需要检查以下任一插件:

plugins {
id "com.android.application" version "7.3.1" apply false
id "com.android.library" version "7.3.1" apply false
}

例如:

project.getPluginManager().hasPlugin('com.android.application') || project.getPluginManager().hasPlugin('com.android.library')

为了使这项工作完美无缺(没有resolutionStrategy),这将需要更新的检查,以免com.android.tools.build:gradlebuild.gradle文件中没有设置和 还有一个 URL 重写,它将正确处理包名称的.gradle.plugin后缀,以便com.huawei.agconnect.gradle.pluginagcp将导致相同的包下载。resolutionStrategy确实是解决方法,而不是答案。

不要使用

plugins {
id("com.huawei.agconnect") version "1.6.3.300"
}

请像使用一样的旧方式

dependencies {
// 增加agcp插件配置,推荐您使用最新版本的agcp插件。
classpath 'com.huawei.agconnect:agcp:1.6.3.300'
// important add next line , huawei dependencies agp.
classpath 'com.android.tools.build:gradle:7.1.2'
}

无法解析 com.huawei.agconnect:agcp:1.6.1.300

如果您在构建 APK 或捆绑包时遇到此错误 然后更改路径 从

com.huawei.agconnect:agcp:1.6.1.300

com.huawei.agconnect:agcp:1.6.5.300

它对我有用

正确的(最简单和官方的)解决方案就像已经提到的@SurePing一样。这不是"旧方式",而是 Gradle 文档中的推荐方式

agcp 插件需要 com.android.tools.build.gradle,将其添加到顶级 build.gradle.kts 文件中:

buildscript {
repositories {
maven {url = uri("https://developer.huawei.com/repo/") }
}
dependencies {
classpath("com.android.tools.build:gradle:8.1.0")
classpath("com.huawei.agconnect:agcp:1.9.0.300")
}
}

华为已经发布了他们的SDK/插件的1.9.1.300版本,幸运的是现在支持Gradle 8.0

1.9.1.300
2023-07-04
Modified the SDK to make it compatible with Android Gradle 8.0.

这里有一个链接。它仍然不能在当前的Android Studio上开箱即用,但至少否定了对解决方案策略的需求(@Martin Zeitler感谢,你的答案在一段时间前确实有帮助)。 以下是一些示例代码,供任何感兴趣的人使用:

build.gradle项目

buildscript
{
repositories
{
maven {url = uri("https://developer.huawei.com/repo/") }
}
dependencies
{
classpath('com.android.tools.build:gradle:8.1.1')
classpath("com.huawei.agconnect:agcp:1.9.1.300")
}
}
plugins 
{
id 'com.android.application' version '8.1.1' apply false
id 'com.android.library' version '8.1.1' apply false
}

build.gradle:app

plugins 
{
id 'com.android.application'
id 'com.huawei.agconnect'
}
android
{
...
}
dependencies 
{
implementation 'com.huawei.agconnect:agconnect-core:1.9.1.300'
}

settings.gradle项目

pluginManagement {
repositories {
google()
mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
}
}
rootProject.name = "SomeProject"
include ':app'

相关内容

  • 没有找到相关文章

最新更新