我在 Gradle 托管设备设置中可能遇到什么问题?
What issue could I have in Gradle managed device setup?
引入了一项新功能 Gradle 托管设备(参见此处的示例:https://developer.android.com/studio/preview/features?hl=fr)
设置似乎非常简单,只需将几行复制到模块级别 build.gradle
文件,一切都应该有效。
可悲的是,我不是这种情况,请给我一些建议。代码为红色,脚本未成功。查看我的 build.gradle.kts
文件:
带下划线的 ManagedVirtualDevice 显示以下错误:
我的 Android 工作室版本是 Android Studio Bumblebee | 2021.1.1 金丝雀 11
构建 #AI-211.7628.21.2111.7676841,构建于 2021 年 8 月 26 日。
同步 Gradle 显示:
org.gradle.internal.exceptions.LocationAwareException: Build file '/*****/app/build.gradle.kts' line: 112
Script compilation errors:
Line 112: pixel2api29 (com.android.build.api.dsl.ManagedVirtualDevice) {
^ Unresolved reference: pixel2api29
Line 112: pixel2api29 (com.android.build.api.dsl.ManagedVirtualDevice) {
^ Classifier 'ManagedVirtualDevice' does not have a companion object, and thus must be initialized here
Line 114: device = "Pixel 2"
^ Unresolved reference: device
Line 115: apiLevel = 29
^ Unresolved reference: apiLevel
Line 117: systemImageSource = "google"
^ Unresolved reference: systemImageSource
Line 118: abi = "x86"
^ Unresolved reference: abi
6 errors
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost$compileSecondStageOf$cacheDir.invoke(Interpreter.kt:666)
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost$compileSecondStageOf$cacheDir.invoke(Interpreter.kt:387)
at org.gradle.kotlin.dsl.provider.CompileKotlinScript.execute(KotlinScriptEvaluator.kt:375)
at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
at org.gradle.internal.execution.steps.ExecuteStep.access[=11=]0(ExecuteStep.java:40)
at org.gradle.internal.execution.steps.ExecuteStep.call(ExecuteStep.java:53)
at org.gradle.internal.execution.steps.ExecuteStep.call(ExecuteStep.java:50)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:75)
...
哪个
只是 运行 遇到了同样的问题 - 您需要实例化一个 ManagedVirtualDevice
对象并对其进行配置,然后再将其添加到您的设备列表中:
import com.android.build.gradle.internal.dsl.ManagedVirtualDevice
testOptions {
devices {
add(
ManagedVirtualDevice("pixel2api30").apply {
device = "Pixel 2"
apiLevel = 30
systemImageSource = "aosp-atd"
abi = "x86"
}
)
}
}
请注意,导入与 Google 的文档所说的略有不同 - 在他们的示例中,他们传递的是接口,而不是实现。
正确的等效方法是使用 NamedDomainObjectContainer
:
的方法
import com.android.build.api.dsl.ManagedVirtualDevice
android {
testOptions {
devices {
// create it now (if it doesn't exist yet) and configure it (exactly as in Groovy):
maybeCreate<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// create it now and configure it:
create<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// create it later and configure it:
register<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// if it already exists (created elsewhere), configure it:
"pixel2api29"(ManagedVirtualDevice::class) { ... }
或使用 by
以防您需要引用设备(例如群组):
devices {
val pixel2api29 by creating(ManagedVirtualDevice::class) { ... }
// or
val pixel2api29 by registering(ManagedVirtualDevice::class) { ... }
deviceGroups {
"phoneAndTablet" {
targetDevices.add(pixel2api29)
}
}
}
参见
中的org.gradle.kotlin.dsl.NamedDomainObjectContainerScope
gradle-kotlin-dsl-7.4.jar!/org/gradle/kotlin/dsl/NamedDomainObjectContainerExtensionsKt.class
引入了一项新功能 Gradle 托管设备(参见此处的示例:https://developer.android.com/studio/preview/features?hl=fr)
设置似乎非常简单,只需将几行复制到模块级别 build.gradle
文件,一切都应该有效。
可悲的是,我不是这种情况,请给我一些建议。代码为红色,脚本未成功。查看我的 build.gradle.kts
文件:
带下划线的 ManagedVirtualDevice 显示以下错误:
我的 Android 工作室版本是 Android Studio Bumblebee | 2021.1.1 金丝雀 11 构建 #AI-211.7628.21.2111.7676841,构建于 2021 年 8 月 26 日。
同步 Gradle 显示:
org.gradle.internal.exceptions.LocationAwareException: Build file '/*****/app/build.gradle.kts' line: 112
Script compilation errors:
Line 112: pixel2api29 (com.android.build.api.dsl.ManagedVirtualDevice) {
^ Unresolved reference: pixel2api29
Line 112: pixel2api29 (com.android.build.api.dsl.ManagedVirtualDevice) {
^ Classifier 'ManagedVirtualDevice' does not have a companion object, and thus must be initialized here
Line 114: device = "Pixel 2"
^ Unresolved reference: device
Line 115: apiLevel = 29
^ Unresolved reference: apiLevel
Line 117: systemImageSource = "google"
^ Unresolved reference: systemImageSource
Line 118: abi = "x86"
^ Unresolved reference: abi
6 errors
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost$compileSecondStageOf$cacheDir.invoke(Interpreter.kt:666)
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost$compileSecondStageOf$cacheDir.invoke(Interpreter.kt:387)
at org.gradle.kotlin.dsl.provider.CompileKotlinScript.execute(KotlinScriptEvaluator.kt:375)
at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
at org.gradle.internal.execution.steps.ExecuteStep.access[=11=]0(ExecuteStep.java:40)
at org.gradle.internal.execution.steps.ExecuteStep.call(ExecuteStep.java:53)
at org.gradle.internal.execution.steps.ExecuteStep.call(ExecuteStep.java:50)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:75)
...
哪个
只是 运行 遇到了同样的问题 - 您需要实例化一个 ManagedVirtualDevice
对象并对其进行配置,然后再将其添加到您的设备列表中:
import com.android.build.gradle.internal.dsl.ManagedVirtualDevice
testOptions {
devices {
add(
ManagedVirtualDevice("pixel2api30").apply {
device = "Pixel 2"
apiLevel = 30
systemImageSource = "aosp-atd"
abi = "x86"
}
)
}
}
请注意,导入与 Google 的文档所说的略有不同 - 在他们的示例中,他们传递的是接口,而不是实现。
正确的等效方法是使用 NamedDomainObjectContainer
:
import com.android.build.api.dsl.ManagedVirtualDevice
android {
testOptions {
devices {
// create it now (if it doesn't exist yet) and configure it (exactly as in Groovy):
maybeCreate<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// create it now and configure it:
create<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// create it later and configure it:
register<ManagedVirtualDevice>("pixel2api29") { ... }
// or
// if it already exists (created elsewhere), configure it:
"pixel2api29"(ManagedVirtualDevice::class) { ... }
或使用 by
以防您需要引用设备(例如群组):
devices {
val pixel2api29 by creating(ManagedVirtualDevice::class) { ... }
// or
val pixel2api29 by registering(ManagedVirtualDevice::class) { ... }
deviceGroups {
"phoneAndTablet" {
targetDevices.add(pixel2api29)
}
}
}
参见
中的org.gradle.kotlin.dsl.NamedDomainObjectContainerScope
gradle-kotlin-dsl-7.4.jar!/org/gradle/kotlin/dsl/NamedDomainObjectContainerExtensionsKt.class