KMA-271 Android dependencies are not imported with AGP 7

This commit is contained in:
Vyacheslav Karpukhin
2021-08-17 19:22:04 +02:00
committed by Space
parent 29787218e1
commit 5530080a7d
@@ -29,6 +29,9 @@ import org.gradle.api.internal.artifacts.dependencies.ProjectDependencyInternal
import org.gradle.api.internal.attributes.AttributeContainerInternal
import org.gradle.api.internal.attributes.AttributesSchemaInternal
import org.gradle.api.provider.Provider
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters
import org.gradle.api.services.BuildServiceRegistry
import org.gradle.internal.component.model.AttributeConfigurationSelector
import org.jetbrains.kotlin.gradle.plugin.forEachVariant
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -51,8 +54,11 @@ object AndroidDependencyResolver {
val useNioPath = versions[0].toInt() >= 7
val sdkHandler = if (useNioPath) {
val getInstance = AndroidSdkHandler::class.java.getMethodOrNull("getInstance", Path::class.java) ?: return null
getInstance(null, androidExtension.sdkDirectory.toPath()) as AndroidSdkHandler
val androidLocationBuildService = getAndroidLocationBuildService(project) ?: return null
val androidLocationsProvider = getClassOrNull("com.android.prefs.AndroidLocationsProvider") ?: return null
val getInstance =
AndroidSdkHandler::class.java.getMethodOrNull("getInstance", androidLocationsProvider, Path::class.java) ?: return null
getInstance(null, androidLocationBuildService, androidExtension.sdkDirectory.toPath()) as AndroidSdkHandler
} else {
AndroidSdkHandler.getInstance(androidExtension.sdkDirectory)
}
@@ -77,6 +83,20 @@ object AndroidDependencyResolver {
)
}
private fun getAndroidLocationBuildService(project: Project): BuildService<BuildServiceParameters.None>? =
getClassOrNull("com.android.build.gradle.internal.services.BuildServicesKt")?.let { buildServices ->
getClassOrNull("com.android.build.gradle.internal.services.AndroidLocationsBuildService")?.let { androidLocationsService ->
val getBuildService =
buildServices.getMethodOrNull("getBuildService", BuildServiceRegistry::class.java, androidLocationsService.javaClass)
@Suppress("UNCHECKED_CAST")
(getBuildService?.invoke(
null,
project.gradle.sharedServices,
androidLocationsService
) as Provider<BuildService<BuildServiceParameters.None>>?)?.get()
}
}
private fun getClassOrNull(s: String) =
try {
Class.forName(s)