Google released version 0.11 of the Android Gradle plugin.
The release notes contains the following:
One of the user visible changes in 0.11 is that we've deprecated the packageName and packageNameSuffix settings, and have renamed them to applicationId and applicationIdSuffix. The purpose of this is to make it clear that this application id is decoupled from package declarations in your manifest, and in particular, the R class and the BuildConfig class, and all the implementation classes inside your app, can be renamed and refactored freely; you just need to keep applicationId the same. If you open your build.gradle file, lint is highlighting these deprecated calls and offering quickfixes to update them:
What exactly does this mean. How is the packagename in the build script decoupled from the one in the manifest?
package
specified in AndroidManifest.xml identify one application installed on the device. The name of the property itself is misleading because one may think that refactoring java classes may require renamingpackage
property as well.package
property can be any string respecting limitation described in javadoc.Because this confusion Google guys decided to rename
package
toapplicationId
. However, this change apply to gradle file only. Changing manifest property name would break compatibility with previous versions, that's my guess.So when you build your APK, gradle replaces manifest's
package
property value withapplicationId
value specified in gradle script.If you would like to test it yourself. Just set
applicationId
with different value that your manifest'spackage
and build APK. Then go to folder /build/intermediates/manifests/dev/debug and open AndroidManifest.xml. You will find thereapplicationId
value.