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

org.holoeverywhere.plugin.HoloEverywhereAppPlugin.groovy Maven / Gradle / Ivy

package org.holoeverywhere.plugin

import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin
import com.android.builder.model.SigningConfig
import org.gradle.api.Project
import org.gradle.api.artifacts.PublishArtifact
import org.gradle.api.internal.artifacts.BaseRepositoryFactory
import org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact
import org.gradle.internal.reflect.Instantiator
import org.holoeverywhere.plugin.extension.HoloEverywhereExtension

import javax.inject.Inject

public class HoloEverywhereAppPlugin extends HoloEverywhereAbstractPlugin implements HoloEverywherePublishPlugin.PublishInjector {
    private HoloEverywhereExtension extension
    private AppExtension androidExtension

    private DefaultPublishArtifact artifactApk

    @Inject
    HoloEverywhereAppPlugin(Instantiator instantiator, BaseRepositoryFactory repositoryFactory) {
        super(instantiator, repositoryFactory)
    }

    @Override
    void apply(Project project) {
        checkPluginOrder(project)
        loadCorePlugin(project)

        project.afterEvaluate { afterEvaluate() }
        androidExtension = project.plugins.apply(AppPlugin).extension as AppExtension

        extension = extension(project)
        extension.publish.packaging = 'apk'
        configureApk(project, 'release')
    }

    def void afterEvaluate() {
        if (!artifactsPrepared) {
            prepareArtifactsForPublication()
        }

        if (extension.signing.enable) {
            if (extension.signing.release.valid()) {
                createSigningConfig(extension.signing.release.obtainConfig('release'), 'release')
            }
            createSigningConfig(extension.signing.debug.obtainMaybeDebugConfig('debug'), 'debug')
        }
    }

    PublishArtifact configureApk(Project project, String type) {
        File apkFile = new File("${project.buildDir}/apk/${project.name}-${type}${androidExtension.defaultConfig.signingConfig?.isSigningReady() ? '' : '-unsigned'}.apk")
        return artifactApk = new DefaultPublishArtifact(project.name, 'apk', 'apk', '', new Date(), apkFile, project.tasks.getByName("assemble${type.capitalize()}"))
    }

    def void createSigningConfig(SigningConfig signingConfig, String name) {
        androidExtension.signingConfigs.add(signingConfig)
        androidExtension.buildTypes.getByName(name).setSigningConfig(signingConfig)
    }

    private boolean artifactsPrepared = false

    @Override
    void prepareArtifactsForPublication() {
        if (artifactsPrepared) {
            throw new RuntimeException("Artifacts already prepared for publication")
        }
        artifactsPrepared = true

        if (extension.app.publishReleaseApk) {
            publish(extension, artifactApk)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy