Different application names for different build options in Android?

I have 2 create flavors, say flavor1 and flavor2

I want my app to be named, say, “AppFlavor1” when I create for flavor1 and “AppFlavor2” when I create for flavor 2

Here is a snippet of my source manifest

  <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 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, the default value

    <string name="app_name">app_name_string</string>

When I try to create both versions of the implementation implementation, the application name is always app_name_string (String from the file string.xml)

How can I solve this problem? thank

+4
source share
3 answers

Just add a line

<string name="app_name">app_name_string</string>

in 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.gradlefile

productFlavors { {
    photographer_prod {
      resValue "string", "app_name", "the app name.."
    }
    agent_prod {
      resValue "string", "app_name", "the app name.."
    }
  }
+1

<string name="app_name">app_name_string</string>.

+1

In addition to Gabriele Mariotti's answer, make sure that the value of the application / attribute is android:labelset to @string/app_namein your file AndroidManifest.xml.

0
source

Source: https://habr.com/ru/post/1695860/


All Articles