Android Studio - 为Gradle中的ManifestPlaceholders分配多个值

Pan*_*kaj 14 android android-manifest android-studio android-gradle-plugin

我有两个环境,我的项目一个Prod另一个是Staging.因此,每当我必须构建任何环境时,我都必须更改多个键,例如地图键,标签名称和清单中的其他内容.所以我搜索并找出一些解决方案,而manifestPlaceholders就是其中之一.

现在我想做的是在manifestPlaceholders中分配多个值.那么我可以在其中放置多个值,是的,然后如何在其中放置多个值.这是manifestPlaceholders的代码

buildTypes {
    debug {
        manifestPlaceholders = [ google_map_key:"your_dev_key"]
    }
    release {
        manifestPlaceholders = [ google_map_key:"prod_key"]
    }
}
Run Code Online (Sandbox Code Playgroud)

Pan*_*kaj 21

我通过添加多个manifestPlaceholders值来解决我的问题,如下面的代码.将此添加到我的模块中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"'
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑: 您也可以Emanuel Moecklin按照评论中的建议使用resValue .

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"
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • 这通常是首选的解决方案,但我只是惹恼了一个令人难以置信的恼人问题.如果占位符值是一个数字(如15762790467376475),Gradle将其转换为Float而不是String,在这种情况下,清单中的值将类似于1.57627904E15).使用resValue而不是manifestPlaceholders解决了这个问题. (2认同)

Rob*_*yer 10

您可以轻松设置/更改多个manifestPlaceholders值.您可以在答案中一次定义所有值,也可以逐个定义.

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"
    }
}
Run Code Online (Sandbox Code Playgroud)