I have 2 build flavors, say, flavor1 and flavor2
I would like my application to be named, say, "AppFlavor1" when I build for flavor1 and "AppFlavor2" when I build for flavor 2
Here is a my manifest source's snippet
<application
android:name=".PApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.activities.SplashActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Here is a gradle file's source snippet
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '26.0.2'
flavorDimensions "default"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
signingConfigs {
release {
}
}
buildTypes {
release {
minifyEnabled false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors.whenObjectAdded { flavor ->
flavor.ext.set("app_name", "")
}
productFlavors {
photographer_prod {
app_name = "flovor1name"
buildConfigField "String", "API_URL", ""
buildConfigField "boolean", "IS_PHOTOGRAPHER_APP", "true"
applicationId "me.flovor.package_1"
versionCode 1048
versionName "1.0.48"
}
agent_prod {
app_name = "flovor2name"
buildConfigField "String", "API_URL", ""
buildConfigField "boolean", "IS_PHOTOGRAPHER_APP", "false"
applicationId "me.flovor.package_2"
versionCode 1016
versionName "1.0.16"
}
}
applicationVariants.all { variant ->
def flavor = variant.productFlavors*.name[0]
def appName = variant.productFlavors*.app_name[0]
variant.mergeResources.doLast {
File valuesFile = file("${variant.mergeResources.outputDir}/values/values.xml")
if (valuesFile.exists()) {
String content = valuesFile.getText('UTF-8')
content = content.replaceAll("app_name_string", appName)
valuesFile.write(content, 'UTF-8')
} else {
println("File: " + valuesFile.path + " does not exist")
}
}
if (variant.buildType.name == "debug") {
return;
}
variant.outputs.each { output ->
def SEP = "_"
def buildType = variant.variantData.variantConfiguration.buildType.name
def version = variant.versionName
def date = new Date();
def formattedDate = date.format('ddMMyy_HHmm')
def newApkName = flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
output.outputFileName = new File(output.outputFile.parent, newApkName)
}
}
}
In string.xml default value is
<string name="app_name">app_name_string</string>
When I try to build both flavors realize version, the app name is always app_name_string (String from string.xml file)
How do i solve this problem? thanks
Android Product Flavors are used to create different app versions. App versions can be free or paid. They can have different themes and texts. They can use different environments or APIs. Let's assign two product flavors free and paid in our application.
Product flavours lets you create multiple variants of an android app while using a single codebase. To create product flavours you need to define rules in the build.
Build variants are the result of Gradle using a specific set of rules to combine settings, code, and resources configured in your build types and product flavors. Although you do not configure build variants directly, you do configure the build types and product flavors that form them.
You can add a config file, say 'Appconfig. java' to your productFlavor specific source folders i.e. src/<productflavor>/java/<packagename>/Appconfig. java ; you can then use Appconfig. PRODUCT_FLAVOR in your app.
Just add the string
<string name="app_name">app_name_string</string>
in the folders:
app/src/photographer_prod/res/values/strings.xml
app/src/agent_prod/res/values/strings.xml
You can also add resource values directly to your build.gradle
file
productFlavors {
photographer_prod {
resValue "string", "app_name", "the app name.."
}
agent_prod {
resValue "string", "app_name", "the app name.."
}
}
In addition to Gabriele Mariotti's answer, make sure application / android:label
attribute's value is set to @string/app_name
in your AndroidManifest.xml
file.
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