usefulness / easylauncher-gradle-plugin

Add a different ribbon to each of your Android app variants using this gradle plugin. Of course, configure it as you will
https://medium.com/@cycki/ribbonize-your-android-application-laucher-icon-again-c52e08d58172?source=friends_link&sk=4747a61844ce085a648d2116780ec4d3
MIT License
388 stars 18 forks source link
android debug flavor icon launcher overlay ribbon

Easylauncher Gradle Plugin for Android

build  ktlint

version

Modify the launcher icon of each of your app-variants using simple Gradle rules. Add ribbons of any color, overlay your own images, customize it according to your needs!

Circle RoundedRectangle Teardrop

This library heavily relies on the original Akaita's easylauncher plugin, but introduces supports for modern build tools and Vector icons

Usage

Basic usage

// in app/build.gradle
plugins {
    id "com.starter.easylauncher" version "${{version}}"
}

see Gradle Plugin Portal for the details

What should I do if I get `Could not resolve all artifacts` error? In some configurations a dependency resolution error might be thrown with a message: > Could not find com.android.tools.build:gradle:x.x.x`. As a solution apply the plugin to the root project using: ```groovy // in root project's build.gradle buildscript { repositories.google() } plugins { id "com.starter.easylauncher" version "${{version}}" apply false } ``` then apply the plugin in your application module: ```groovy // in app/build.gradle plugins { id "com.starter.easylauncher" } ``` Alternatively, if using Version Catalog: ```toml [plugins] starter-easylauncher = { id = "com.starter.easylauncher", version.ref = "easylauncher" } ``` See [related issue](https://github.com/usefulness/easylauncher-gradle-plugin/issues/80) for more information.

Advanced usage

By default, the plugin applies green ribbon for all debuggable build variants. You can customize the filters applied to each type, flavor and variant of your app.

Imagine these are the type and flavors of your app:

// in app/build.gradle
android {
    buildTypes {
        named("debug") {
            //Debuggable, will get a default ribbon in the launcher icon
        }
        named("release") {
            //Non-debuggable, will not get any default ribbon
        }
        register("beta") {
            //Debuggable, will get a default ribbon in the launcher icon
            debuggable true
        }
        register('canary') {
            //Non-debuggable, will not get any default ribbon
            debuggable false
        }
    }
    productFlavors {
        register("local") {}
        register("qa") {}
        register("staging") {}
        register("production") {}
    }
}

You could customize the plugin's behaviour like this:

easylauncher {
    defaultFlavorNaming = true // Use flavor name for default ribbon, instead of the type name
    showWarnings = true // Defines if the plugins should show warnings at configuration time

    productFlavors {
        register("local") {}
        register("qa") {
            // Add one more filter to all `qa` variants
            filters redRibbonFilter()
        }
        register("staging") {}
        register("production") {}
    }

    buildTypes {
        register("beta") {
            // Add two more filters to all `beta` variants
            filters = [
                    customRibbon(ribbonColor: "#0000FF"),
                    overlayFilter(file("example-custom/launcherOverlay/beta.png"))
            ]
        }
        register("canary") {
            // Remove ALL filters to `canary` variants
            enable = false
        }
        register("release") {}
    }

    variants {
        register("productionDebug") {
            // OVERRIDE all previous filters defined for `productionDebug` variant
            filters = orangeRibbonFilter("custom")
        }
    }
}

Providing Icon Names

By default, the plugin automatically discovers launcher icon and applies provided filters.
Custom icon names, useful i.e. when defining multiple activity aliases, can be provided using iconNames property as follows:

easylauncher {
    iconNames = ["@mipmap/custom_launcher_icon"] // optional, disables automatic launcher icon discovery and will use provided icons only

    buildTypes {
        register("beta") {
            // icon names can also be provided per each configuration (buildType, productFlavor or variant)
            iconNames = ["@mipmap/beta_launcher"]  
        }
    }
}

Available filters

Overlay filter

Command Result
overlayFilter(file("example-custom/launcherOverlay/beta.png"))

Ribbon filters

Filter Command Result
Gray ribbon grayRibbonFilter()
Green ribbon greenRibbonFilter()
Yellow ribbon yellowRibbonFilter()
Orange ribbon orangeRibbonFilter()
Red ribbon redRibbonFilter()
Blue ribbon blueRibbonFilter()

Advanced Ribbon filter

Description Command Result
Custom background color customRibbon(ribbonColor: "#6600CC")
Custom label customRibbon(label: "label", ribbonColor: "#DCDCDC")
Custom text color customRibbon(label: "label", ribbonColor: "#DCDCDC", labelColor: "#000000")
Custom gravity - Top customRibbon(label: "custom", position: "top")
Custom gravity - Bottom customRibbon(position: "bottom")
Custom gravity - TopLeft customRibbon(position: "topLeft")
Custom gravity - TopRight customRibbon(position: "topRight")
Custom text size (relative to the icon size) customRibbon(position: "bottom", textSizeRatio: 0.2)
Custom font (locally installed) customRibbon(position: "top", font: "ComicSansMs")
Custom font (using font pack) customRibbon(position: "top", font: file("fonts/CustomFont.ttf"))
Troubleshooting on "Problem reading font data." When using docker or a _minimalistic_ environment one might encounter above error message when loading Fonts. The solution is to make sure font support was installed i.e. by calling: ``` apk add --no-cache freetype fontconfig ttf-dejavu ``` See [related issue](https://github.com/usefulness/easylauncher-gradle-plugin/issues/201) for more information.

Chrome-like filters

Filter Command Result
Default chromeLike()
Custom appearance chromeLike(label: "Custom", ribbonColor: "#FF00FF", labelColor: "#FFFFFF")
Custom font (locally installed) chromeLike(label: "Custom", font: "ComicSansMS-Bold")
Custom gravity - Top (with additional padding) chromeLike(label: "Top", gravity: "Top", labelPadding: 10)
Custom overlay/label alignment chromeLike(label: "Tall", overlayHeight: 0.6, textSizeRatio: 0.3)

Available options

Requirements

Minimal requirements for the plugin are:

Project Structure

easylauncher/   - source code of Gradle plugin
sample/         - root directory of supported Android applications which serve as test projects

Credits

Credits to Akaita's easylauncher plugin which this project heavily relies on


YourKit logo

YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of YourKit Java Profiler, YourKit .NET Profiler, and YourKit YouMonitor.