diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 021871631..176ffbdc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -155,7 +155,7 @@ jobs: - name: Build Release App if: startsWith(github.ref, 'refs/tags/') - run: ./gradlew sample:android:assembleStaging sample:android:assembleRelease sample:android:bundleRelease -P"com.mikepenz.android.signing.enabled"="true" -P"com.mikepenz.android.signing.storeFile"="opensource.jks" -P"com.mikepenz.android.signing.storePassword"="${{ secrets.STORE_PASSWORD }}" -P"com.mikepenz.android.signing.keyAlias"="${{ secrets.KEY_ALIAS }}" -P"com.mikepenz.android.signing.keyPassword"="${{ secrets.KEY_PASSWORD }}" + run: ./gradlew sample:android:assembleRelease sample:android:bundleRelease -P"com.mikepenz.android.signing.enabled"="true" -P"com.mikepenz.android.signing.storeFile"="opensource.jks" -P"com.mikepenz.android.signing.storePassword"="${{ secrets.STORE_PASSWORD }}" -P"com.mikepenz.android.signing.keyAlias"="${{ secrets.KEY_ALIAS }}" -P"com.mikepenz.android.signing.keyPassword"="${{ secrets.KEY_PASSWORD }}" - name: Collect artifacts run: | diff --git a/MIGRATION.md b/MIGRATION.md index 94a91d5c1..5d9437b28 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -4,7 +4,9 @@ - **Breaking Change**: The `core` plugin no longer depends on the kotlinx.immutable collections library. - Collections are marked as stable via the stability config file instead: https://github.com/mikepenz/AboutLibraries/pull/1267 - +- **Breaking Change**: The already deprecated `generateLibraryDefinitions*` tasks are now removed +- **Breaking Change**: The plugin will now only work for projects that use AGP 7 or newer, with the new variants API via `AndroidComponentsExtension` available + #### v13.2.0 - **Breaking Change**: Some underlying APIs start to require API 23 instead of 21. diff --git a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroid.kt b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroid.kt index 8b7927b72..4d67ca7bf 100644 --- a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroid.kt +++ b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroid.kt @@ -1,6 +1,5 @@ package com.mikepenz.aboutlibraries.plugin -import com.mikepenz.aboutlibraries.plugin.util.configure import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.util.GradleVersion @@ -15,52 +14,19 @@ class AboutLibrariesPluginAndroid : Plugin { return } + try { + Class.forName("com.android.build.api.variant.AndroidComponentsExtension") + } catch (t: Throwable) { + project.logger.error("Android Gradle Plugin 7.0.0 or greater is required to apply this plugin.") + return + } + // create the extension for the about libraries plugin val extension = project.extensions.findByType(AboutLibrariesExtension::class.java) ?: project.extensions.create("aboutLibraries", AboutLibrariesExtension::class.java) extension.applyConvention() LOGGER.debug("Enabled Android task registration") - configureAndroidTasks(project, extension, ::configureAndroidResourceTasks) - } - - private fun configureAndroidResourceTasks(project: Project, extension: AboutLibrariesExtension, @Suppress("DEPRECATION") variant: com.android.build.gradle.api.BaseVariant) { - val variantName = variant.name.replaceFirstChar { it.uppercase() } - - val resultsResDirectory = project.layout.buildDirectory.dir("generated/aboutLibraries/${variant.name}/res/") - val resultsDirectory = resultsResDirectory.map { it.dir("raw/") } - - // task to write the general definitions information - val task = project.tasks.configure("prepareLibraryDefinitions${variantName}", AboutLibrariesTask::class.java) { - it.group = "" - it.variant.set(variant.name) - it.configureOutputFile(resultsDirectory.map { dir -> - @Suppress("DEPRECATION") - dir.file(extension.export.outputFileName.get()) - }) - it.configure() - } - - // This is necessary for backwards compatibility with versions of gradle that do not support this new API. - try { - variant.registerGeneratedResFolders(project.files(resultsResDirectory).builtBy(task)) - try { - variant.mergeResourcesProvider.configure { it.dependsOn(task) } - } catch (t: Throwable) { - AboutLibrariesPlugin.LOGGER.error( - "Couldn't register mergeResourcesProvider task dependency. This is a bug in AGP. Please report it to the Android team. ${t.message}", - t - ) - @Suppress("DEPRECATION") variant.mergeResources.dependsOn(task) - } - } catch (t: Throwable) { - AboutLibrariesPlugin.LOGGER.warn( - "Using deprecated API to register task, `registerGeneratedResFolders` is not supported by the environment. Upgrade your AGP version., ${t.message}", - t - ) - @Suppress("DEPRECATION") - // noinspection EagerGradleConfiguration - variant.registerResGeneratingTask(task.get(), resultsResDirectory.get().asFile) - } + configureAndroidTasks(project, extension) } companion object { diff --git a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroidExtension.kt b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroidExtension.kt index f6eaecbd9..0dc7b096f 100644 --- a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroidExtension.kt +++ b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesPluginAndroidExtension.kt @@ -1,99 +1,33 @@ package com.mikepenz.aboutlibraries.plugin import com.android.build.api.variant.AndroidComponentsExtension -import com.android.build.gradle.AppExtension -import com.android.build.gradle.LibraryExtension import com.mikepenz.aboutlibraries.plugin.util.configure import org.gradle.api.Project internal fun configureAndroidTasks( project: Project, extension: AboutLibrariesExtension, - block: (Project, AboutLibrariesExtension, @Suppress("DEPRECATION") com.android.build.gradle.api.BaseVariant) -> Unit = ::configureAndroidTasks, - blockNew: (Project, AboutLibrariesExtension, com.android.build.api.variant.Variant) -> Unit = ::configureAndroidTasks, + block: (Project, AboutLibrariesExtension, com.android.build.api.variant.Variant) -> Unit = ::configureAndroidTasks, ) { project.pluginManager.withPlugin("com.android.application") { AboutLibrariesPlugin.LOGGER.debug("Registering Android task for Application") - val newApp = project.extensions.findByType(AndroidComponentsExtension::class.java) - if (newApp != null) { - project.extensions.configure(AndroidComponentsExtension::class.java) { - it.onVariants { variant -> - blockNew(project, extension, variant) - } - } - } else { - val app = project.extensions.findByType(AppExtension::class.java) - if (app != null) { - app.applicationVariants.configureEach { variant -> block(project, extension, variant) } - } else { - AboutLibrariesPlugin.LOGGER.warn("No Android AppExtension found. Skipping Android tasks registration. Please ensure your Android Gradle plugin is applied BEFORE the AboutLibraries plugin.") + project.extensions.configure(AndroidComponentsExtension::class.java) { + it.onVariants { variant -> + block(project, extension, variant) } } } project.pluginManager.withPlugin("com.android.library") { AboutLibrariesPlugin.LOGGER.debug("Registering Android task for Library") - - val newLib = project.extensions.findByType(AndroidComponentsExtension::class.java) - if (newLib != null) { - project.extensions.configure(AndroidComponentsExtension::class.java) { - it.onVariants { variant -> - blockNew(project, extension, variant) - } - } - } else { - val lib = project.extensions.findByType(LibraryExtension::class.java) - if (lib != null) { - lib.libraryVariants.configureEach { variant -> block(project, extension, variant) } - } else { - AboutLibrariesPlugin.LOGGER.warn("No Android LibraryExtension found. Skipping Android tasks registration. Please ensure your Android Gradle plugin is applied BEFORE the AboutLibraries plugin.") + project.extensions.configure(AndroidComponentsExtension::class.java) { + it.onVariants { variant -> + block(project, extension, variant) } } } } -private fun configureAndroidTasks(project: Project, extension: AboutLibrariesExtension, @Suppress("DEPRECATION") variant: com.android.build.gradle.api.BaseVariant) { - val variantName = variant.name.replaceFirstChar { it.uppercase() } - - val resultsResDirectory = project.layout.buildDirectory.dir("generated/aboutLibraries/${variant.name}/res/") - val resultsDirectory = resultsResDirectory.map { it.dir("raw/") } - - // task to generate libraries, and their license into the build folder (not hooked to the build task) - project.tasks.configure("exportLibraryDefinitions${variantName}", AboutLibrariesTask::class.java) { - it.variant.set(variant.name) - it.configureOutputFile(resultsDirectory.map { dir -> - @Suppress("DEPRECATION") - dir.file(extension.export.outputFileName.get()) - }) - it.configure() - } - - // backwards compatibility, to be removed in v13.0.0 - project.tasks.configure("generateLibraryDefinitions${variantName}", AboutLibrariesTask::class.java) { - it.group = "" - it.deprecated.set(true) - it.variant.set(variant.name) - it.configureOutputFile(resultsDirectory.map { dir -> - @Suppress("DEPRECATION") - dir.file(extension.export.outputFileName.get()) - }) - it.configure() - } - - // task to output libraries, and their license in CSV format to the CLI - project.tasks.configure("exportLibraries${variantName}", AboutLibrariesExportTask::class.java) { - it.variant.set(variant.name) - it.configure() - } - - // task to output libraries, their license in CSV format and source to a given location - project.tasks.configure("exportComplianceLibraries${variantName}", AboutLibrariesExportComplianceTask::class.java) { - it.variant.set(variant.name) - it.projectDirectory.set(project.layout.projectDirectory) - it.configure() - } -} - private fun configureAndroidTasks(project: Project, extension: AboutLibrariesExtension, variant: com.android.build.api.variant.Variant) { val variantName = variant.name.replaceFirstChar { it.uppercase() } val resultsResDirectory = project.layout.buildDirectory.dir("generated/aboutLibraries/${variant.name}/res/") @@ -125,18 +59,6 @@ private fun configureAndroidTasks(project: Project, extension: AboutLibrariesExt it.configure() } - // backwards compatibility, to be removed in v13.0.0 - project.tasks.configure("generateLibraryDefinitions${variantName}", AboutLibrariesTask::class.java) { - it.group = "" - it.deprecated.set(true) - it.variant.set(variant.name) - it.configureOutputFile(resultsDirectory.map { dir -> - @Suppress("DEPRECATION") - dir.file(extension.export.outputFileName.get()) - }) - it.configure() - } - // task to output libraries, and their license in CSV format to the CLI project.tasks.configure("exportLibraries${variantName}", AboutLibrariesExportTask::class.java) { it.variant.set(variant.name) diff --git a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesTask.kt b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesTask.kt index 905361f3c..b44d7e111 100644 --- a/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/com/mikepenz/aboutlibraries/plugin/AboutLibrariesTask.kt @@ -12,7 +12,6 @@ import com.mikepenz.aboutlibraries.plugin.util.forLicense import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input @@ -35,10 +34,6 @@ abstract class AboutLibrariesTask : BaseAboutLibrariesTask() { @get:OutputDirectory abstract val outputDirectory: DirectoryProperty - @get:Optional - @get:Input - abstract val deprecated: Property - override fun getDescription(): String = "Exports dependency meta data from the current module.${variant.orNull?.let { " Filtered by variant: '$it'." } ?: ""}" override fun getGroup(): String = super.getGroup() ?: org.gradle.language.base.plugins.LifecycleBasePlugin.BUILD_GROUP @@ -80,10 +75,6 @@ abstract class AboutLibrariesTask : BaseAboutLibrariesTask() { @TaskAction fun action() { - if (deprecated.isPresent && deprecated.get()) { - LOGGER.warn("`generateLibraryDefinitions${variant.orElse("").get()}` is deprecated. Please use `exportLibraryDefinitions${variant.orElse("").get()}` instead.") - } - val output = outputFile.get().asFile if (!output.parentFile.exists()) { output.parentFile.mkdirs() // verify output exists diff --git a/sample/shared/build.gradle.kts b/sample/shared/build.gradle.kts index 0f7ea1b58..8849b5a3b 100644 --- a/sample/shared/build.gradle.kts +++ b/sample/shared/build.gradle.kts @@ -2,7 +2,6 @@ import com.mikepenz.gradle.utils.readPropertyOrElse plugins { id("com.mikepenz.convention.kotlin-multiplatform") - alias(baseLibs.plugins.androidKmpLibrary) id("com.mikepenz.convention.compose") id("com.mikepenz.aboutlibraries.plugin") } @@ -22,6 +21,7 @@ kotlin { namespace = "com.mikepenz.aboutlibraries.sample.shared" compileSdk = baseLibs.versions.compileSdk.get().toInt() minSdk = project.readPropertyOrElse("com.mikepenz.android.minSdk", baseLibs.versions.minSdk.get(), null)?.toInt() + experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true } listOf(