Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio-为Gradle中的占位符分配多个值_Android_Android Studio_Android Gradle Plugin_Android Manifest - Fatal编程技术网

Android Studio-为Gradle中的占位符分配多个值

Android Studio-为Gradle中的占位符分配多个值,android,android-studio,android-gradle-plugin,android-manifest,Android,Android Studio,Android Gradle Plugin,Android Manifest,我的项目有两个环境,一个是Prod另一个是Staging。因此,每当我必须构建任何环境时,我都必须更改多个键,如映射键、标签名和清单中的其他内容。因此,我搜索并找到了一些解决方案,占位符是其中之一 现在我要做的是在占位符中指定多个值。我可以在里面放多个值吗?是的,那么如何在里面放多个值呢。以下是占位符的代码 buildTypes { debug { manifestPlaceholders = [ google_map_key:"your_dev_key"] }

我的项目有两个环境,一个是Prod另一个是Staging。因此,每当我必须构建任何环境时,我都必须更改多个键,如映射键、标签名和清单中的其他内容。因此,我搜索并找到了一些解决方案,占位符是其中之一

现在我要做的是在占位符中指定多个值。我可以在里面放多个值吗?是的,那么如何在里面放多个值呢。以下是占位符的代码

buildTypes {
    debug {
        manifestPlaceholders = [ google_map_key:"your_dev_key"]
    }
    release {
        manifestPlaceholders = [ google_map_key:"prod_key"]
    }
}

我已经提到了构建类型和风格

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        resValue "string", "google_maps_key", "release google map key"
    }
    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        resValue "string", "google_maps_key", "debug google map key"
    }
}
productFlavors {
    alpha {
        applicationId = "com.example.alpha"
        resValue 'string', 'app_name', 'alphaapp'
        resValue "string", "maps_api_key", "XXXXXXXXXXXXXXXXXXXXX"
    }
    beta {
        applicationId = "com.example.beta"
        resValue 'string', 'app_name', 'betaapp'
        resValue "string", "maps_api_key", "XXXXXXXXXXXXXXXXXXXXXX"
    }
}

我通过添加多个占位符值解决了我的问题,代码如下。将此添加到我的模块
build.gradle

productFlavors {
        staging {
            applicationId "xxxxxxxxxxx"
            manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"]
            buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"'
        }
        prod {
            applicationId "xxxxxxxxxxx"
            manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"]
            buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"'
        }
    }
编辑: 您还可以将resValue用作注释中建议的
Emanuel Moecklin

productFlavors {
            staging {
                applicationId "xxxxxxxxxxx"
                manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"]
                buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"'
                resValue "string", "base_url", "xxxxxxxxxx"
            }
            prod {
                applicationId "xxxxxxxxxxx"
                manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"]
                buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"'
                resValue "string", "base_url", "xxxxxxxxxx"
            }
        }

您可以轻松设置/更改多个Manifests占位符值。您可以一次定义所有值(如答案中所示),也可以逐个定义

defaultConfig {
    // initialize more values
    manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"]
    // or this way
    manifestPlaceholders.google_map_key = "xxxxxxxxxx"
    manifestPlaceholders.app_label_name = "xxxxxxxxxx"
}

productFlavors {
    staging {
    }
    prod {
        // use some different value for prod
        manifestPlaceholders.google_map_key = "yyyyyyyyyy"
    }
}

很抱歉,我不知道这是否可以做到,只需编写
manifestPlaceholders=[key:“@string/value”]
,这通常是首选解决方案,但我刚刚被一个令人难以置信的恼人问题绊倒了。如果占位符值是一个数字(如15762790467376475),Gradle将其转换为浮点而不是字符串,在这种情况下,清单中的值类似于1.57627904E15)。使用resValue而不是manifestplaceholder解决了这个问题。