Android中不同构建风格的不同应用名称?

时间:2018-04-06 10:16:11

标签: android gradle android-gradle

我有2种构建口味,比如,flavor1和flavor2

我希望我的应用程序可以命名,例如," AppFlavor1"当我为flavor1和" AppFlavor2"当我为风味2构建时

这是我的清单源代码

  <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>

这是gradle文件的源代码段

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)
    }
}

}

在string.xml中,默认值为

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

当我尝试构建两个flavor实现版本时,app name始终为app_name_string(string.xml文件中的String)

我如何解决这个问题?感谢

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

只需添加字符串

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

在文件夹中:

app/src/photographer_prod/res/values/strings.xml
app/src/agent_prod/res/values/strings.xml

您还可以将资源值直接添加到build.gradle文件

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

答案 2 :(得分:1)

除了Gabriele Mariotti的答案外,请确保您的define hook-next refresh end 文件中application / android:label属性的值设置为@string/app_name