All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mcxiaoke.packer.ng.GradlePlugin.groovy Maven / Gradle / Ivy

package com.mcxiaoke.packer.ng

import com.android.build.gradle.api.BaseVariant
import com.android.builder.Version
import org.gradle.api.Plugin
import org.gradle.api.Project

// Android PackerNg Plugin Source
class GradlePlugin implements Plugin {
    static final String TAG = "PackerNg"
    static final String PLUGIN_NAME = "packer"

    Project project

    @Override
    void apply(Project project) {
        this.project = project
        if (!project.plugins.hasPlugin("com.android.application")) {
            throw new PluginException(
                    "'com.android.application' plugin must be applied", null)
        }
        if (new StringVersion(Version.ANDROID_GRADLE_PLUGIN_VERSION)
                < new StringVersion("2.2.0")) {
            throw new PluginException(
                    "'com.android.tools.build:gradle' must be v2.2.0 or above", null)
        }
        project.configurations.create(PLUGIN_NAME).extendsFrom(project.configurations.compile)
        project.extensions.create(PLUGIN_NAME, GradleExtension)
        project.afterEvaluate {
            project.android.applicationVariants.all { BaseVariant variant ->
                addTasks(variant)
            }
        }
    }

    static boolean isV2SigningEnabled(BaseVariant vt) {
        boolean e1 = false
        boolean e2 = false
        def s1 = vt.buildType.signingConfig
        if (s1 && s1.signingReady) {
            e1 = s1.v2SigningEnabled
        }
        def s2 = vt.mergedFlavor.signingConfig
        if (s2 && s2.signingReady) {
            e2 = s2.v2SigningEnabled
        }
        return e1 || e2
    }

    void addTasks(BaseVariant vt) {
        debug("addTasks() for ${vt.name}")
        def variantTask = project.task("apk${vt.name.capitalize()}",
                type: GradleTask) {
            variant = vt
            extension = project.packer
            dependsOn vt.assemble
        }

        debug("addTasks() new variant task:${variantTask.name}")

        def buildTypeName = vt.buildType.name
        if (vt.name != buildTypeName) {
            def taskName = "apk${buildTypeName.capitalize()}"
            def task = project.tasks.findByName(taskName)
            if (task == null) {
                task = project.task(taskName)
            }
            task.dependsOn(variantTask)
            debug("addTasks() build type task ${taskName}")
        }

    }

    void debug(String msg) {
        project.logger.info(msg)
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy