因此,我试图使用新的Kotlin语法将AppGallery连接gradle插件添加到我的android项目中。但我会犯这样的错误:
org.gradle.internal.exceptions.LocationAwareException: Build file 'D:\#KERJAAN\devbase\sample\build.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/") }
}
}
并在app的build.gradle.kts
中添加这样的插件
plugins {
id("com.huawei.agconnect") version "1.6.3.300"
}
有趣的是,如果使用根build.gradle.kts
中的类路径,它可以工作。有人知道为什么吗?
发布于 2022-02-16 03:17:07
任何Gradle插件(这一点都不是AGC特定的)只能在根项目级别加载,然后通常应用于模块级别。我刚刚尝试删除buildscript
块(在问题中类似),这确实导致:
Plugin [id: 'com.huawei.agconnect', version: '1.7.2.300', 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.2.300')
插件依赖不会解决,而pluginManagement
会继续添加.gradle.plugin
。如果存储库知道完整的(而不仅仅是短人员的名称agcp
),这应该是现成的(这实际上是默认的预期包名,除非更改它):
com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.7.2.300
这不符合:
com.huawei.agconnect:agcp:1.7.2.300
人们可以使用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.2.300')
}
println ">> ${it.target}"
} else {
println "> ${it.target}"
}
}
}
}
plugins
必须在build.gradle
中定义
plugins {
id "com.android.application" version "7.3.0" apply false
id "com.android.library" version "7.3.0" apply false
id "com.huawei.agconnect.agcp" version "1.7.2.300" apply false
}
println
将将更新的(假) id
输出到artifact
映射it.target
[
id: 'com.huawei.agconnect.agcp',
version: '1.7.2.300',
artifact: 'com.huawei.agconnect:agcp:1.7.2.300',
apply: false
]
在应用它时,仍然需要使用真正的id
apply plugin: 'com.huawei.agconnect'
agcp { enableAPMS true }
这只是因为(1.7.2.300版) APMSTransform
有了一些检查,这需要显式地将AGP放在classpath
上。buildscript
块“几乎”过时了,如果不是APMSTransform
错误地认为它是唯一可以加载Android插件的地方。
/** Still required due to AGCP plugin. */
buildscript {
repositories {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
}
}
它还需要检查这些插件中的任何一个:
plugins {
id "com.android.application" version "7.3.0" apply false
id "com.android.library" version "7.3.0" apply false
}
例如:
project.getPluginManager().hasPlugin('com.android.application') || project.getPluginManager().hasPlugin('com.android.library')
为了使这项工作完美无缺(没有resolutionStrategy
),这将需要一个更新的检查,以避免在build.gradle
文件中没有设置com.android.tools.build:gradle
和一个URL重写,这将正确地处理包名的.gradle.plugin
后缀,以便com.huawei.agconnect.gradle.plugin
和agcp
将导致相同的包下载。resolutionStrategy
确实是解决办法,而不是答案。
发布于 2022-08-20 15:15:17
不要用
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'
}
https://stackoverflow.com/questions/71121109
复制相似问题