所以我想知道如何使用Gradle用开源的Kotlin项目https://github.com/mobile-dev-inc/dadb来编译我的Android应用程序.我能够在它们中成功地运行./gradlew assemble
,但是我希望有一个根目录,可以将它们作为子项目进行编译.我认为复杂的原因是dadb
有自己的子项目dadb
,这使得它变得更加棘手.这是我试图从根目录编译的当前错误:
1: Task failed with an exception.
-----------
* Where:
Build file '/home/tron/AndroidStudioProjects/cookie/dadb/dadb/build.gradle.kts' line: 4
* What went wrong:
Script compilation errors:
Line 04: import org.gradle.jvm.toolchain.internal.JavaToolchainFactory
^ Unresolved reference: JavaToolchainFactory
Line 29: val toolchainFactory = objects.newInstance(JavaToolchainFactory::class.java)
^ Not enough information to infer type variable T
这是我的根settings.gradle.kts
:
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "cookie"
include(":app")
include(":dadb")
include(":dadb:dadb")
这是我的build.gradle.kts
分:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.androidApplication) apply false
alias(libs.plugins.jetbrainsKotlinAndroid) apply false
}
这是dadb/dadb
‘S build.gradle.kts
:
import org.gradle.internal.jvm.inspection.DefaultJvmMetadataDetector
import org.gradle.internal.os.OperatingSystem
import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec
import org.gradle.jvm.toolchain.internal.JavaToolchainFactory
import org.gradle.jvm.toolchain.internal.JavaToolchainInput
plugins {
`maven-publish`
id("org.jetbrains.kotlin.jvm")
id("com.vanniktech.maven.publish")
`java-library`
id("com.palantir.graal") version "0.9.0"
id("org.graalvm.buildtools.native") version "0.9.5"
}
repositories {
mavenCentral()
}
dependencies {
api("com.squareup.okio:okio:2.10.0")
implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("com.google.truth:truth:1.0.1")
}
val toolchainFactory = objects.newInstance(JavaToolchainFactory::class.java)
val metadataDetector = objects.newInstance(DefaultJvmMetadataDetector::class.java)
graal {
graalVersion("21.0.0.2")
}
tasks.test {
useJUnitPlatform()
}
tasks.nativeTestCompile {
dependsOn(tasks.extractGraalTooling)
}
graalvmNative {
binaries {
all {
buildArgs.add("-H:+EnableAllSecurityServices")
javaLauncher.set(provider {
val output = tasks.extractGraalTooling.get().outputs.files.singleFile
val javaHome = if (OperatingSystem.current().isMacOsX) output.resolve("Contents/Home") else output
val metadata = metadataDetector.getMetadata(javaHome)
if (!metadata.isValidInstallation) {
throw RuntimeException(metadata.errorMessage)
}
val spec = objects.newInstance(DefaultToolchainSpec::class.java).apply {
languageVersion.set(JavaLanguageVersion.of(java.targetCompatibility.majorVersion))
}
val javaToolchain = toolchainFactory.newInstance(javaHome, JavaToolchainInput(spec))
javaToolchain.get().javaLauncher
})
}
}
}
这是Dadb的settings.gradle.kts
:
rootProject.name = "dadb"
include("dadb")
如有任何帮助,将不胜感激!