Skip to content

Commit 09b2975

Browse files
committed
fix: Add Gradle 9 compatibility
- Replace deprecated Project.exec() with ExecOperations - Inject ExecOperations in AndroidRustPlugin, RustBuildTask, and RustTestTask - Update RustInstaller functions to use ExecOperations - Upgrade Gradle wrapper to 9.2.1 This fixes the build failure with Gradle 9.x where Project.exec() method was removed. The plugin now properly uses the ExecOperations service which is the recommended approach in Gradle 9+.
1 parent dbe9881 commit 09b2975

File tree

5 files changed

+38
-22
lines changed

5 files changed

+38
-22
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Wed Dec 04 11:21:35 EET 2024
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

src/main/kotlin/dev/matrix/agp/rust/AndroidRustPlugin.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ import dev.matrix.agp.rust.utils.getAndroidExtension
99
import org.gradle.api.Plugin
1010
import org.gradle.api.Project
1111
import org.gradle.api.tasks.TaskProvider
12+
import org.gradle.process.ExecOperations
1213
import java.io.File
1314
import java.util.Locale
15+
import javax.inject.Inject
1416

1517
//
1618
// TODO: migrate to variant API with artifacts when JNI will be supported
1719
// https://developer.android.com/studio/build/extend-agp#access-modify-artifacts
1820
//
1921
@Suppress("unused")
20-
class AndroidRustPlugin : Plugin<Project> {
22+
abstract class AndroidRustPlugin @Inject constructor(
23+
private val execOperations: ExecOperations
24+
) : Plugin<Project> {
2125
override fun apply(project: Project) {
2226
val rustBinaries = RustBinaries(project)
2327
val extension = project.extensions.create("androidRust", AndroidRustExtension::class.java)
@@ -86,7 +90,7 @@ class AndroidRustPlugin : Plugin<Project> {
8690
}
8791

8892
val minimumSupportedRustVersion = SemanticVersion(extension.minimumSupportedRustVersion)
89-
installRustComponentsIfNeeded(project, minimumSupportedRustVersion, allRustAbiSet, rustBinaries)
93+
installRustComponentsIfNeeded(project, execOperations, minimumSupportedRustVersion, allRustAbiSet, rustBinaries)
9094
}
9195

9296
androidComponents.onVariants { variant ->

src/main/kotlin/dev/matrix/agp/rust/RustBuildTask.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@ import org.gradle.api.DefaultTask
88
import org.gradle.api.provider.Property
99
import org.gradle.api.tasks.Input
1010
import org.gradle.api.tasks.TaskAction
11+
import org.gradle.process.ExecOperations
1112
import java.io.File
13+
import javax.inject.Inject
1214

1315
internal abstract class RustBuildTask : DefaultTask() {
16+
@get:Inject
17+
abstract val execOperations: ExecOperations
18+
1419
@get:Input
1520
abstract val rustBinaries: Property<RustBinaries>
1621

@@ -66,7 +71,7 @@ internal abstract class RustBuildTask : DefaultTask() {
6671
.replace('-', '_')
6772
.uppercase()
6873

69-
project.exec {
74+
execOperations.exec {
7075
standardOutput = System.out
7176
errorOutput = System.out
7277
workingDir = rustProjectDirectory

src/main/kotlin/dev/matrix/agp/rust/RustInstaller.kt

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import dev.matrix.agp.rust.utils.RustBinaries
77
import dev.matrix.agp.rust.utils.SemanticVersion
88
import dev.matrix.agp.rust.utils.log
99
import org.gradle.api.Project
10+
import org.gradle.process.ExecOperations
1011
import java.io.ByteArrayOutputStream
1112

1213
internal fun installRustComponentsIfNeeded(
1314
project: Project,
15+
execOperations: ExecOperations,
1416
minimalVersion: SemanticVersion?,
1517
abiSet: Collection<Abi>,
1618
rustBinaries: RustBinaries,
@@ -20,29 +22,29 @@ internal fun installRustComponentsIfNeeded(
2022
}
2123

2224
if (minimalVersion != null && minimalVersion.isValid) {
23-
val actualVersion = readRustCompilerVersion(project, rustBinaries)
25+
val actualVersion = readRustCompilerVersion(execOperations, rustBinaries)
2426
if (actualVersion < minimalVersion) {
25-
installRustUp(project, rustBinaries)
26-
updateRust(project, rustBinaries)
27+
installRustUp(execOperations, rustBinaries)
28+
updateRust(execOperations, rustBinaries)
2729
}
2830
}
2931

3032
if (abiSet.isNotEmpty()) {
31-
installRustUp(project, rustBinaries)
33+
installRustUp(execOperations, rustBinaries)
3234

33-
val installedAbiSet = readRustUpInstalledTargets(project, rustBinaries)
35+
val installedAbiSet = readRustUpInstalledTargets(execOperations, rustBinaries)
3436
for (abi in abiSet) {
3537
if (installedAbiSet.contains(abi)) {
3638
continue
3739
}
38-
installRustTarget(project, abi, rustBinaries)
40+
installRustTarget(execOperations, abi, rustBinaries)
3941
}
4042
}
4143
}
4244

43-
private fun installRustUp(project: Project, rustBinaries: RustBinaries) {
45+
private fun installRustUp(execOperations: ExecOperations, rustBinaries: RustBinaries) {
4446
try {
45-
val result = project.exec {
47+
val result = execOperations.exec {
4648
standardOutput = NullOutputStream
4749
errorOutput = NullOutputStream
4850
executable(rustBinaries.rustup)
@@ -57,38 +59,38 @@ private fun installRustUp(project: Project, rustBinaries: RustBinaries) {
5759

5860
log("installing rustup")
5961

60-
project.exec {
62+
execOperations.exec {
6163
standardOutput = NullOutputStream
6264
errorOutput = NullOutputStream
6365
commandLine("bash", "-c", "\"curl\" --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y")
6466
}.assertNormalExitValue()
6567
}
6668

67-
private fun updateRust(project: Project, rustBinaries: RustBinaries) {
69+
private fun updateRust(execOperations: ExecOperations, rustBinaries: RustBinaries) {
6870
log("updating rust version")
6971

70-
project.exec {
72+
execOperations.exec {
7173
standardOutput = NullOutputStream
7274
errorOutput = NullOutputStream
7375
executable(rustBinaries.rustup)
7476
args("update")
7577
}.assertNormalExitValue()
7678
}
7779

78-
private fun installRustTarget(project: Project, abi: Abi, rustBinaries: RustBinaries) {
80+
private fun installRustTarget(execOperations: ExecOperations, abi: Abi, rustBinaries: RustBinaries) {
7981
log("installing rust target $abi (${abi.rustTargetTriple})")
8082

81-
project.exec {
83+
execOperations.exec {
8284
standardOutput = NullOutputStream
8385
errorOutput = NullOutputStream
8486
executable(rustBinaries.rustup)
8587
args("target", "add", abi.rustTargetTriple)
8688
}.assertNormalExitValue()
8789
}
8890

89-
private fun readRustCompilerVersion(project: Project, rustBinaries: RustBinaries): SemanticVersion {
91+
private fun readRustCompilerVersion(execOperations: ExecOperations, rustBinaries: RustBinaries): SemanticVersion {
9092
val output = ByteArrayOutputStream()
91-
project.exec {
93+
execOperations.exec {
9294
standardOutput = output
9395
errorOutput = NullOutputStream
9496
executable(rustBinaries.rustc)
@@ -104,9 +106,9 @@ private fun readRustCompilerVersion(project: Project, rustBinaries: RustBinaries
104106
return SemanticVersion(match.groupValues[1])
105107
}
106108

107-
private fun readRustUpInstalledTargets(project: Project, rustBinaries: RustBinaries): Set<Abi> {
109+
private fun readRustUpInstalledTargets(execOperations: ExecOperations, rustBinaries: RustBinaries): Set<Abi> {
108110
val output = ByteArrayOutputStream()
109-
project.exec {
111+
execOperations.exec {
110112
standardOutput = output
111113
errorOutput = NullOutputStream
112114
executable(rustBinaries.rustup)

src/main/kotlin/dev/matrix/agp/rust/RustTestTask.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@ import org.gradle.api.DefaultTask
44
import org.gradle.api.provider.Property
55
import org.gradle.api.tasks.Input
66
import org.gradle.api.tasks.TaskAction
7+
import org.gradle.process.ExecOperations
78
import java.io.File
9+
import javax.inject.Inject
810

911
internal abstract class RustTestTask : DefaultTask() {
12+
@get:Inject
13+
abstract val execOperations: ExecOperations
14+
1015
@get:Input
1116
abstract val rustProjectDirectory: Property<File>
1217

@@ -18,7 +23,7 @@ internal abstract class RustTestTask : DefaultTask() {
1823
val rustProjectDirectory = rustProjectDirectory.get()
1924
val cargoTargetDirectory = cargoTargetDirectory.get()
2025

21-
project.exec {
26+
execOperations.exec {
2227
standardOutput = System.out
2328
errorOutput = System.out
2429
workingDir = rustProjectDirectory

0 commit comments

Comments
 (0)