Using String Constants Generated by Gradle Build Configurations

September 23, 2014

If you’ve ever wanted to use different String constants in your Android project for debug and release builds, there is a way.

Gradle allows developers to insert different constants into their Java code and XML resources with different build configurations.

Google Maps API V2 Example

The Google Maps API V2 requires that your Maps API key be placed in your AndroidManifest.xml file, like this:

<meta-data
 android:name="com.google.android.maps.v2.API_KEY"
 android:value="(YOUR MAPS API KEY)"/>

Since this is in the manifest, you don’t have the option to change this API key at runtime. If you wanted to use a different Maps API key for your development and production build versions, you would have to change this entry in the manifest each time you built a release version of your app.

With Gradle however, you can specify different XML string resources for your debug and release builds. In this case, we can make a string resource for our Maps API key in our build.gradle file:

android {

 ...

 buildTypes {
 debug {
 ...

 resValue "string", "GOOGLE_MAPS_ANDROID_API_KEY", "(your development Maps API key)"
 }
 release {
 ...

 resValue "string", "GOOGLE_MAPS_ANDROID_API_KEY", "(your production Maps API key)"
 }
 }
}

The string resource “GOOGLE_MAPS_ANDROID_API_KEY” will be generated during a debug or release build. Now you can refer to this string in your manifest:

<meta-data
 android:name="com.google.android.maps.v2.API_KEY"
 android:value="@string/GOOGLE_MAPS_ANDROID_API_KEY"/>

Your IDE may complain about this string resource not existing, but it will build just fine.

String Constants in Your Java Code

Gradle can also insert String constants into your Java code. Let’s say we want to use different URL endpoints depending on whether this is our debug or release version. This can be done in your build.gradle file.

android {

 ...

 buildTypes {
 debug {
 ...

 buildConfigField "String", "URL_ENDPOINT", "\"http://your.development.endpoint.com/\""
 }
 release {
 ...

 buildConfigField "String", "URL_ENDPOINT", "\"http://your.production.endpoint.com/\""
 }
 }
}

The escaped double-quotes (\”) around the string itself are necessary in order for the String constants to have the double-quotes in the generated code.

Now we can refer to this String constant in our code.

import com.yourpackage.name.BuildConfig;

private void doSomethingWithUrlEndpoint() {
 String urlEndpoint = BuildConfig.URL_ENDPOINT;

 ...
}
Joseph Kreiser
Joseph Kreiser
Software Developer

Stay in the loop with our latest content!

Select the topics you’re interested to receive our new relevant content in your inbox. Don’t worry, we won’t spam you.

Product Strategy: Turning your App Ideas Into Reality
Process

Product Strategy: Turning your App Ideas Into Reality

April 16, 2020

Anyone who has been there knows, it can be incredibly frustrating having an app idea and not being able to bring it to life. And with organizational, technical, or financial roadblocks in the way, it can be equally frustrating to simply get a project off the ground.

Read more
Simple, Responsive CSS Grid Page Layout
Development Web

Simple, Responsive CSS Grid Page Layout

June 25, 2019

In this new blog post, Jeff Kloosterman shares his approach to creating a CSS Grid Page Layout. It is simple and it is responsive. Enjoy.

Read more
Being Intentional, Flexible and People-Focused in 2021
Team

Being Intentional, Flexible and People-Focused in 2021

October 19, 2020

MichiganLabs co-founder and managing partner, Joshua Hulst, sat down with Chelsea Dubey (Guest Writer) to share his insights for a strong start to the new year and the exciting technology trends that his team is tracking for 2021.

Read more
View more articles