Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand Down
4 changes: 3 additions & 1 deletion MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -15,52 +14,19 @@ class AboutLibrariesPluginAndroid : Plugin<Project> {
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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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/")
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -35,10 +34,6 @@ abstract class AboutLibrariesTask : BaseAboutLibrariesTask() {
@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

@get:Optional
@get:Input
abstract val deprecated: Property<Boolean>

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

Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion sample/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Expand All @@ -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(
Expand Down
Loading