<lambda>null1import com.android.build.api.variant.AndroidComponentsExtension 2 import com.android.build.gradle.api.AndroidBasePlugin 3 import org.apache.tools.ant.taskdefs.condition.Os 4 import org.gradle.api.Plugin 5 import org.gradle.api.Project 6 import org.gradle.configurationcache.extensions.capitalized 7 import org.gradle.kotlin.dsl.create 8 import org.gradle.kotlin.dsl.extra 9 import org.gradle.kotlin.dsl.getByType 10 import org.gradle.kotlin.dsl.register 11 import org.gradle.kotlin.dsl.withType 12 import java.io.File 13 14 abstract class AConfigPlugin : Plugin<Project> { 15 16 override fun apply(project: Project) { 17 project.plugins.withType<AndroidBasePlugin> { 18 project.dependencies.add("implementation", project.project(":ModuleUtils")) 19 project.dependencies.add("implementation", project.project(":platform-compat")) 20 21 project.extensions.create<AConfigExtension>("aconfig", project.objects) 22 val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java) 23 val androidTop = project.extra["ANDROID_TOP"].toString() 24 val platform = if (Os.isFamily(Os.FAMILY_MAC)) "darwin" else "linux" 25 androidComponents.onVariants { variant -> 26 val variantName = variant.name.capitalized() 27 val aconfigExtension = project.extensions.getByType<AConfigExtension>() 28 val aconfigBin = File("$androidTop/prebuilts/build-tools/$platform-x86/bin/aconfig") 29 30 aconfigExtension.declarations.forEach { 31 val pkgName = it.packageName.get() 32 val addFlagCacheTaskProvider = project.tasks.register<AConfigCreateCacheTask>( 33 "generate${variantName}FlagCache_$pkgName" 34 ) { 35 aconfigPath.set(aconfigBin) 36 packageName = pkgName 37 containerName = it.containerName.orNull 38 srcFiles.setFrom(it.srcFile) 39 outputFile.set( 40 project.layout.buildDirectory.file( 41 "intermediates/${variant.name}/aconfig/flag-cache-$pkgName.pb" 42 ) 43 ) 44 } 45 val addFlagLibTaskProvider = project.tasks.register<AConfigCreateJavaLibTask>( 46 "generate${variantName}FlagLib_$pkgName" 47 ) { 48 aconfigPath.set(aconfigBin) 49 cacheFile.set(addFlagCacheTaskProvider.flatMap(AConfigCreateCacheTask::outputFile)) 50 } 51 variant.sources.java?.addGeneratedSourceDirectory( 52 addFlagLibTaskProvider, 53 AConfigCreateJavaLibTask::outputFolder 54 ) 55 } 56 } 57 } 58 } 59 } 60