From dc2e27f181540c0ec0a51b70ab2018b20d6f619f Mon Sep 17 00:00:00 2001 From: Konstantin Tabere Date: Fri, 6 Sep 2024 10:00:22 +0200 Subject: [PATCH] wip # Conflicts: # appexample/build.gradle.kts --- appexample/build.gradle.kts | 1 - .../src/main/java/ch/ubique/linth/IconTask.kt | 48 +++++++++++++++++++ .../main/java/ch/ubique/linth/LinthPlugin.kt | 27 +++++++++++ .../ch/ubique/linth/UploadToUbDiagTask.kt | 2 +- .../ubique/linth/common/ProjectExtensions.kt | 16 +++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 plugin-build/plugin/src/main/java/ch/ubique/linth/IconTask.kt create mode 100644 plugin-build/plugin/src/main/java/ch/ubique/linth/common/ProjectExtensions.kt diff --git a/appexample/build.gradle.kts b/appexample/build.gradle.kts index 1cf2403..5302f5a 100644 --- a/appexample/build.gradle.kts +++ b/appexample/build.gradle.kts @@ -54,7 +54,6 @@ dependencies { } linthPlugin { - //apkFile = getLayout().buildDirectory.file("outputs/apk/dev/debug/example.apk") uploadKey = "f1c8846e-0c3a-44ac-b56a-53feb91d6383" flavors = "dev" diff --git a/plugin-build/plugin/src/main/java/ch/ubique/linth/IconTask.kt b/plugin-build/plugin/src/main/java/ch/ubique/linth/IconTask.kt new file mode 100644 index 0000000..ec60c51 --- /dev/null +++ b/plugin-build/plugin/src/main/java/ch/ubique/linth/IconTask.kt @@ -0,0 +1,48 @@ +package ch.ubique.linth + +import ch.ubique.linth.common.getMergedManifestFile +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction +import java.io.File +import kotlin.math.max + +abstract class IconTask : DefaultTask() { + + init { + description = "Generates App Icon" + group = "linth" + } + + @get:Input + abstract var flavors: Set + + @TaskAction + fun iconAction() { + val moduleDir = File(project.rootDir, project.name) + val buildDir = project.layout.buildDirectory.asFile.get() + + val gradleLastModified = max( + File(moduleDir, "build.gradle").lastModified(), + File(project.rootDir, "build.gradle").lastModified() + ) + + val generatedResDir = File("$buildDir/generated/res/launcher-icon/") + + flavors.forEach { flavor -> + // get banner label + val defaultLabelEnabled = false//android.defaultConfig.launcherIconLabelEnabled + val flavorLabelEnabled = true//flavor.launcherIconLabelEnabled + + val bannerLabel = if (flavorLabelEnabled) { + flavor + } else { + null + } + + val manifestFile = project.getMergedManifestFile(flavor, "debug") + println("ManifestFile: ${manifestFile.path}") + } + } + +} diff --git a/plugin-build/plugin/src/main/java/ch/ubique/linth/LinthPlugin.kt b/plugin-build/plugin/src/main/java/ch/ubique/linth/LinthPlugin.kt index 216bd9b..7c9a76f 100644 --- a/plugin-build/plugin/src/main/java/ch/ubique/linth/LinthPlugin.kt +++ b/plugin-build/plugin/src/main/java/ch/ubique/linth/LinthPlugin.kt @@ -3,6 +3,7 @@ package ch.ubique.linth import ch.ubique.linth.common.capitalize import ch.ubique.linth.model.UploadRequest import com.android.build.gradle.AppExtension +import com.android.build.gradle.internal.tasks.factory.dependsOn import org.gradle.api.Plugin import org.gradle.api.Project @@ -13,7 +14,33 @@ abstract class LinthPlugin : Plugin { val androidExtension = getAndroidExtension(project) + val iconTask = project.tasks.register("generateAppIcon", IconTask::class.java) { iconTask -> + + val flavors = mutableSetOf() + + androidExtension.applicationVariants.forEach { variant -> + val flavor = variant.flavorName.capitalize() + flavors.add(flavor) + } + + iconTask.flavors = flavors + } + + //hook iconTask into android build process + project.afterEvaluate { + androidExtension.applicationVariants.forEach { variant -> + val variantName = variant.name.capitalize() + variant.outputs.forEach { output -> + iconTask.dependsOn(output.processManifestProvider) + project.tasks.named("generate${variantName}Resources") { + it.dependsOn(iconTask) + } + } + } + } + project.tasks.register("uploadToUbDiag", UploadToUbDiagTask::class.java) { uploadTask -> + uploadTask.uploadKey = extension.uploadKey.get() uploadTask.proxy = extension.proxy.orNull diff --git a/plugin-build/plugin/src/main/java/ch/ubique/linth/UploadToUbDiagTask.kt b/plugin-build/plugin/src/main/java/ch/ubique/linth/UploadToUbDiagTask.kt index 75618ad..96db164 100644 --- a/plugin-build/plugin/src/main/java/ch/ubique/linth/UploadToUbDiagTask.kt +++ b/plugin-build/plugin/src/main/java/ch/ubique/linth/UploadToUbDiagTask.kt @@ -14,7 +14,7 @@ abstract class UploadToUbDiagTask : DefaultTask() { init { description = "Uploads Apk to UbDiag" - group = "publish" + group = "linth" } @get:Input diff --git a/plugin-build/plugin/src/main/java/ch/ubique/linth/common/ProjectExtensions.kt b/plugin-build/plugin/src/main/java/ch/ubique/linth/common/ProjectExtensions.kt new file mode 100644 index 0000000..11e97ea --- /dev/null +++ b/plugin-build/plugin/src/main/java/ch/ubique/linth/common/ProjectExtensions.kt @@ -0,0 +1,16 @@ +package ch.ubique.linth.common + + +import org.gradle.api.Project +import java.io.File + +/** + * returns File with merged manifest + */ +fun Project.getMergedManifestFile(flavor: String, buildType: String): File { + val variantName = flavor + buildType + return File( + layout.buildDirectory.asFile.get(), + "intermediates/merged_manifests/${variantName}/process${variantName}Manifest/AndroidManifest.xml" + ) +}