Is it possible to change the package name of an Android application using Gradle?
I need to compile two copies of the same app, having a unique package name (so I can publish to the market twice).
You can use strings. xml in different folders, see Android separate string values for release and debug builds. Then paste it to app\src\debug\res\values\ and app\src\release\res\values\ folders. Replace "Your app name" in debug and release files.
Caution: Once you publish your application, you cannot change the package name. The package name defines your application's identity, so if you change it, then it is considered to be a different application and users of the previous version cannot update to the new version.
Step by Step Implementation Step 2: Now click on the setting gear icon and deselect Compact Middle Packages. Step 3: Now the packages folder is broken into parts as shown in the below image. Step 4: Now right-click on the first package name (com) and Refactor > Rename.
As a simpler alternative to using product flavours as in Ethan's answer, you can also customise build types.
How to choose between the approaches:
(You can also combine the two approaches, which results in every build variant having distinct package name.)
For debug build type, and all other non-release types, define applicationIdSuffix
which will be added to the default package name. (Prior to Android Gradle plugin version 0.11 this setting was known as packageNameSuffix
.)
android { buildTypes { debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' } beta { applicationIdSuffix '.beta' versionNameSuffix '-BETA' // NB: If you want to use the default debug key for a (non-debug) // build type, you need to specify it: signingConfig signingConfigs.debug } release { // signingConfig signingConfigs.release // runProguard true // ... } } }
Above, debug
and release
are default build types whose some aspects are configured, while beta
is a completely custom build type. To build the different types, use assembleDebug
, assembleBeta
, etc, as usual.
Similarly, you can use versionNameSuffix
to override the default version name from AndroidManifest (which I find very useful!). E.g. "0.8" → "0.8-BETA", as configured above.
Resources:
Myself I've been using productFlavors
so far for this exact purpose, but it seems build type customisation may be closer to my needs, plus it keeps the build config simpler.
Update (2016): I've since used this approach in all my projects, and I think it definitely is the way to go. I also got it included in Android Best Practices guide by Futurice.
You could so something like this
android { ... defaultConfig { minSdkVersion 8 versionCode 10 } flavorDimensions "flavor1", "flavor2" productFlavors { flavor1 { applicationId "com.example.flavor1" versionCode 20 } flavor2 { applicationId "com.example.flavor2" minSdkVersion 14 } } }
You can also change the field android.defaultConfig.applicationId
if you want to do one-off builds.
Taken from: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With