1 /* <lambda>null2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package aconfig 18 19 import com.android.build.api.variant.AndroidComponentsExtension 20 import java.io.File 21 import org.apache.tools.ant.taskdefs.condition.Os 22 import org.gradle.api.Plugin 23 import org.gradle.api.Project 24 import org.gradle.configurationcache.extensions.capitalized 25 import org.gradle.kotlin.dsl.create 26 import org.gradle.kotlin.dsl.extra 27 import org.gradle.kotlin.dsl.getByType 28 import org.gradle.kotlin.dsl.register 29 30 abstract class AConfigPlugin : Plugin<Project> { 31 32 override fun apply(project: Project) { 33 project.dependencies.add("implementation", project.project(":libs:aconfig-platform-compat")) 34 project.extensions.create<AConfigExtension>("aconfig", project.objects) 35 val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java) 36 val androidTop = project.extra["ANDROID_TOP"].toString() 37 val platform = if (Os.isFamily(Os.FAMILY_MAC)) "darwin" else "linux" 38 androidComponents.onVariants { variant -> 39 val variantName = variant.name.capitalized() 40 val aconfigExtension = project.extensions.getByType<AConfigExtension>() 41 val aconfigBin = File("$androidTop/prebuilts/build-tools/$platform-x86/bin/aconfig") 42 43 aconfigExtension.declarations.forEach { 44 val pkgName = it.packageName.get() 45 val addFlagCacheTaskProvider = project.tasks.register<AConfigCreateCacheTask>( 46 "generate${variantName}FlagCache_$pkgName" 47 ) { 48 aconfigPath.set(aconfigBin) 49 packageName = pkgName 50 srcFiles.setFrom(it.srcFile) 51 outputFile.set( 52 project.layout.buildDirectory.file( 53 "intermediates/${variant.name}/aconfig/flag-cache-$pkgName.pb" 54 ) 55 ) 56 } 57 val addFlagLibTaskProvider = project.tasks.register<AConfigCreateJavaLibTask>( 58 "generate${variantName}FlagLib_$pkgName" 59 ) { 60 aconfigPath.set(aconfigBin) 61 cacheFile.set( 62 addFlagCacheTaskProvider.flatMap(AConfigCreateCacheTask::outputFile) 63 ) 64 } 65 variant.sources.java?.addGeneratedSourceDirectory( 66 addFlagLibTaskProvider, 67 AConfigCreateJavaLibTask::outputFolder 68 ) 69 } 70 } 71 } 72 } 73