美文网首页Android开发
Android 在.gradle中获取productFlavor

Android 在.gradle中获取productFlavor

作者: 薛定谔的猫QAQ | 来源:发表于2021-08-16 19:52 被阅读0次

    同事突然问能不能在app.gradle中获取buildConfigField设置的值,因为想要在输出包名的时候,带上这里面的参数,所以就研究了一下

    buildConfigField("int", "APP_PLATFORM", "1")
    

    基本上都是Java的东西,运用反射取拿到指定的值,一开始就是通过一个值不断的获取内部变量,知道get到一个变量就是

    [APP_PLATFORM:ClassFieldImpl@21acde]
    

    看到了胜利的曙光,直接上代码

    这是输出包名
     applicationVariants.all { variant ->
            if (variant.buildType.name == 'release') {
                variant.outputs.all { output ->
                    def value = getBuildConfigFieldValue(variant,"APP_PLATFORM")
                    outputFileName = "${variant.flavorName}_${variant.buildType.name}_v${variant.versionName}_${value}.apk"
                }
            }
        }
    
    这是风味的代码
    // 渠道包定义
        productFlavors {
    
            test {
                applicationId = "com.example.test"
                versionCode 13000
                versionName '1.3.0'
                buildConfigField("int", "APP_PLATFORM", "1")
            }
    
            huawei {
                applicationId = "com.example.huawei"
                versionCode 13000
                versionName '1.3.0'
                buildConfigField("int", "APP_PLATFORM", "2")
            }
    
    获取 buildConfigField的值的代码,记得放在app.gradle的最外层
    def static String getBuildConfigFieldValue(def variant, def fiedName) {
        def properties = variant.productFlavors[0].properties
        def name = properties.get("name")
        if (name != variant.flavorName) {
            return ""
        }
        def configs = properties.get("buildConfigFields")
        def address = null
        for (Map.Entry<String, Object> item : configs) {
            def key = item.key
            if (key == fiedName) {
                address = item.value
            }
        }
        if (address == null) return ""
        def field = address.getClass().getDeclaredField("value")
        field.setAccessible(true)
        return field.get(address)
    }
    

    这样就大功告成了

    相关文章

      网友评论

        本文标题:Android 在.gradle中获取productFlavor

        本文链接:https://www.haomeiwen.com/subject/ebrvbltx.html