如何引用build.gradle中定义的String var?

时间:2015-08-03 03:12:46

标签: android android-studio

我希望显示基于免费和专业版的不同应用名称。

我在build.gradle中定义buildConfigField "String", "AppName", "\"Message Cleanup\"",但我不知道如何在AndroidManifest.xml中应用android:label。

你可以帮帮我吗?谢谢!

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.dodata.messagecleanup" >



    <application
        android:allowBackup="true"
        android:icon="@mipmap/clenupmessage"
        android:label="AppName"
        android:theme="@style/AppTheme" >


        <activity android:name="ui.CleanupDelete"
            android:label="AppName">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>       


    </application>

</manifest>

的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "info.dodata.messagecleanup"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 7
        versionName "1.07"
        archivesBaseName = "MessageCleanup-V" + versionName
    }


    productFlavors {
        free {
            applicationId "info.dodata.messagecleanup"
            buildConfigField "String", "AppName", "\"Message Cleanup\""
        }


        pro {
            applicationId "info.dodata.messagecleanup.pro"
            buildConfigField "String", "AppName", "\"Message Cleanup Pro\""
        }
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.google.android.gms:play-services:7.3.0'
}

致kcoppock

manifestPlaceholders可以做到这一点。

productFlavors {

wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}

baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "New"]
}

c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}

uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}

}

在AndroidManifest.xml中,我可以将它用作以下代码

 <meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />

1 个答案:

答案 0 :(得分:2)

假设您使用的是标准项目结构(例如,您有src/main/res/values/strings.xml之类的内容),请为每种风格创建其他目录:

src/free/res/values/strings.xml
src/pro/res/values/strings.xml

并在这两个文件中定义相同的字符串键(例如app_name),并为每个变体指定正确的值。所以你有类似的东西:

<强>的src /免费/ RES /值/ strings.xml中

<string name="app_name">Message Cleanup</string>

<强>的src /亲/ RES /值/ strings.xml中

<string name="app_name">Message Cleanup Pro</string>

资源合并将根据正在构建的变体在这些字符串中合并。现在您可以在代码中引用app_name字符串,并知道它将根据当前构建的风格正确呈现。