11package dev.matrix.agp.rust
22
3- import com.android.build.api.dsl.CommonExtension
43import com.android.build.gradle.internal.tasks.factory.dependsOn
54import dev.matrix.agp.rust.utils.Abi
65import dev.matrix.agp.rust.utils.RustBinaries
76import dev.matrix.agp.rust.utils.SemanticVersion
87import dev.matrix.agp.rust.utils.getAndroidComponentsExtension
9- import dev.matrix.agp.rust.utils.getAndroidExtension
108import org.gradle.api.Plugin
119import org.gradle.api.Project
1210import org.gradle.api.tasks.TaskProvider
1311import org.gradle.process.ExecOperations
14- import java.io.File
1512import javax.inject.Inject
1613
1714//
@@ -24,35 +21,33 @@ abstract class AndroidRustPlugin @Inject constructor(
2421) : Plugin<Project> {
2522 override fun apply (project : Project ) {
2623 val rustBinaries = RustBinaries (project)
27- val extension = project.extensions.create(" androidRust" , AndroidRustExtension ::class .java)
24+ val rustExtension = project.extensions.create(" androidRust" , AndroidRustExtension ::class .java)
2825 val androidComponents = project.getAndroidComponentsExtension()
2926 val tasksByBuildType = HashMap <String , ArrayList <TaskProvider <RustBuildTask >>>()
3027
31- androidComponents.finalizeDsl {
32- val androidExtension = project.getAndroidExtension()
28+ androidComponents.finalizeDsl { androidExtension ->
3329 val allRustAbiSet = mutableSetOf<Abi >()
34- // Use sdkComponents to get NDK directory (Provider<Directory>)
35- val ndkDirectory = androidComponents.sdkComponents.ndkDirectory.map { it.asFile }
30+ val ndkDirectory = androidComponents.sdkComponents.ndkDirectory
3631 val ndkVersion = SemanticVersion (androidExtension.ndkVersion)
37- val extensionBuildDirectory = project.layout.buildDirectory.dir(" intermediates/rust" ).get().asFile
32+ val extensionBuildDirectory = project.layout.buildDirectory.dir(" intermediates/rust" ).get()
3833
3934 for (buildType in androidExtension.buildTypes) {
4035 val buildTypeNameCap = buildType.name.replaceFirstChar(Char ::titlecase)
4136
42- val variantBuildDirectory = File ( extensionBuildDirectory, buildType.name)
43- val variantJniLibsDirectory = File ( variantBuildDirectory, " jniLibs" )
37+ val variantBuildDirectory = extensionBuildDirectory.dir( buildType.name)
38+ val variantJniLibsDirectory = variantBuildDirectory.dir( " jniLibs" )
4439
4540 val cleanTaskName = " clean${buildTypeNameCap} RustJniLibs"
4641 val cleanTask = project.tasks.register(cleanTaskName, RustCleanTask ::class .java) {
4742 this .variantJniLibsDirectory.set(variantJniLibsDirectory)
4843 }
4944
50- for ((moduleName, module) in extension .modules) {
45+ for ((moduleName, module) in rustExtension .modules) {
5146 val moduleNameCap = moduleName.replaceFirstChar(Char ::titlecase)
52- val moduleBuildDirectory = File ( variantBuildDirectory, " lib_$moduleName " )
47+ val moduleBuildDirectory = variantBuildDirectory.dir( " lib_$moduleName " )
5348
5449 val rustBuildType = module.buildTypes[buildType.name]
55- val rustConfiguration = mergeRustConfigurations(rustBuildType, module, extension )
50+ val rustConfiguration = mergeRustConfigurations(rustBuildType, module, rustExtension )
5651
5752 val testTask = when (rustConfiguration.runTests) {
5853 true -> {
@@ -88,10 +83,12 @@ abstract class AndroidRustPlugin @Inject constructor(
8883 }
8984 }
9085
91- androidExtension.sourceSets.findByName(buildType.name)?.jniLibs?.directories?.add(variantJniLibsDirectory.absolutePath)
86+ androidExtension.sourceSets.findByName(buildType.name)?.also {
87+ it.jniLibs.directories.add(variantJniLibsDirectory.asFile.absolutePath)
88+ }
9289 }
9390
94- val minimumSupportedRustVersion = SemanticVersion (extension .minimumSupportedRustVersion)
91+ val minimumSupportedRustVersion = SemanticVersion (rustExtension .minimumSupportedRustVersion)
9592 installRustComponentsIfNeeded(
9693 execOperations,
9794 minimumSupportedRustVersion,
@@ -143,7 +140,7 @@ abstract class AndroidRustPlugin @Inject constructor(
143140 private fun mergeRustConfigurations (vararg configurations : AndroidRustConfiguration ? ): AndroidRustConfiguration {
144141 val defaultConfiguration = AndroidRustConfiguration ().also {
145142 it.profile = " release"
146- it.targets = Abi .values() .mapTo(ArrayList (), Abi ::rustName)
143+ it.targets = Abi .entries .mapTo(ArrayList (), Abi ::rustName)
147144 it.runTests = null
148145 it.disableAbiOptimization = null
149146 }
0 commit comments