com.github.castorflex.manifestreplace:plugin

Gradle plugin to add more placeholders to your manifest.xml.


License
Apache-2.0

Documentation

Note

The current version works with the gradle plugin 0.13.3

Why is this useful? The android-plugin already uses manifestPlaceholders!

The android-plugin uses manifestPlaceholders to replace placeholders in your manifest, but only in some places. You cannot put a placeholder to add a full activity for example.

This plugin replace all instances of your placeholder by your values in your manifest.

Usage

Add the plugin to your classpath, and apply it! That's all Maven Central

dependencies {
    classpath 'com.github.castorflex.manifestreplace:plugin:1.1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'manifestreplace'

// That's all you need, the following is an example

android {

    //use the placeholders just like you were doing before
    defaultConfig {
        manifestPlaceholders = [
            myPlaceholderIntentFilter_sessionlist: getManifestIntentFilter("sessionlist", false),
            myPlaceholderIntentFilter_sessiondetails: getManifestIntentFilter("sessiondetails", false),
            myPlaceholderLabel: "label"
        ]
    }

    buildTypes {
        debug {
            manifestPlaceholders = [
                myPlaceholderIntentFilter_sessionlist: getManifestIntentFilter("sessionlist", true),
                myPlaceholderIntentFilter_sessiondetails: getManifestIntentFilter("sessiondetails", true)
            ]
        }
    }

    productFlavors {
        free{
            manifestPlaceholders = [
                myPlaceholderLabel: "labelFree"
            ]
        }
        pro {
            manifestPlaceholders = [
                myPlaceholderLabel: "labelPro"
            ]
        }
    }
}

def getManifestIntentFilter(String action, boolean debug) {
    String host = (debug ? "debug." : "") + "myapplication.com"
    return "            <intent-filter>\n" +
                "                <action android:name=\"android.intent.action.VIEW\"/>\n" +
                "\n" +
                "                <category android:name=\"android.intent.category.DEFAULT\"/>\n" +
                "                <category android:name=\"android.intent.category.BROWSABLE\"/>\n" +
                "\n" +
                "                <data\n" +
                "                    android:host=\"$host\"\n" +
                "                    android:pathPattern=\"/androiduri/${action}.*\"\n" +
                "                    android:scheme=\"https\"/>\n" +
                "            </intent-filter>\n"
}

Then, add some placeholders to your manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application ... >
        <activity
            android:name="testapplication.castorflex.com.myapplication.MainActivity"
            android:label="${myPlaceholderLabel}" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            ${myPlaceholderIntentFilter_sessiondetails}
            ${myPlaceholderIntentFilter_sessionlist}
        </activity>

    </application>

</manifest>