Use package name in XML

While uou can use ${packageName} to fill in the generated package name in the Manifest:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="${packageName}"
    android:icon="@drawable/icon"
    android:label="@string/app_name"/> 

This currently (Android Gradle 0.11) doesn't work with resource files. :-(

Instead, you must create a separate version of the resource file for each build type / variant you want with a different account type:

  • src
    • debug/res/xml/authenticator.xml (with debug package name)
    • main/res/xml/authenticator.xml (with default package name)

On top of jenzz's answer, i had to do this, since my case is just like as question, i add applicationIdSuffix for debug version of app.

android {
    ...

    defaultConfig {
        applicationId "..."
        ...
    }
    ....

    buildTypes {
        release {
            ...
            resValue 'string', 'application_id', android.defaultConfig.applicationId
        }

        debug {
            ...
            applicationIdSuffix '.debug'
            resValue 'string', 'application_id', android.defaultConfig.applicationId + applicationIdSuffix
        } 
}

Then in any xml resource, i can get application Id as like this: @string/application_id


Here's another temporary workaround until the Android Gradle plugin gets support for placeholders in resource files.

You can dynamically create a String resource via Gradle in the defaultConfig and/or buildTypes and/or productFlavors closure:

android {
    defaultConfig {
        applicationId 'com.foo.bar'
        resValue 'string', 'package_name', applicationId
    }
}

You can then reference it in your authenticator.xml file just like you do for the label:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/package_name"
    android:icon="@drawable/icon"
    android:label="@string/app_name"/>