首页 > 解决方案 > Android Groovy Gradle 重构代码以避免重复

问题描述

我有一个 android 应用程序,它从 env vars 中读取很多字段,结果 buildConfigs 块越来越大。我尝试将代码提取到一个方法中,但没有奏效。我也尝试过使用initWithwhich 有点帮助但不完全。

这就是当前代码的样子 -

buildTypes {
        debug {
            .
            .
            def firebaseSecondaryDev = System.getenv("FIREBASE_SECONDARY_DEV")
            buildConfigField 'String', 'firebaseSecondary', "\"$firebaseSecondaryDev\""
            buildConfigField 'String', 'APPS_FLYER_KEY', "\"$APPS_FLYER_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_DEV_KEY', "\"$RAZOR_PAY_DEV_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_PROD_KEY', "\"$RAZOR_PAY_PROD_KEY\""
            resValue("string", "truecallerKey", System.getenv("TRUE_CALLER_KEY_DEV"))
            resValue("string", "google_maps_key", System.getenv("GOOGLE_MAPS_KEY_DEV"))
            resValue("string", "google_maps_v2_key", System.getenv("GOOGLE_MAPS_KEY_V2_DEV"))
            resValue("string", "clevertap_account_id", System.getenv("CLEVERTAP_ACCOUNT_ID_DEV"))
            resValue("string", "clevertap_token", System.getenv("CLEVERTAP_TOKEN_DEV"))
            resValue("string", "branch_io_key", System.getenv("BRANCH_IO_KEY"))
        }

        staging {
            .
            .
            def firebaseSecondaryDev = System.getenv("FIREBASE_SECONDARY_DEV")
            buildConfigField 'String', 'firebaseSecondary', "\"$firebaseSecondaryDev\""
            buildConfigField 'String', 'APPS_FLYER_KEY', "\"$APPS_FLYER_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_DEV_KEY', "\"$RAZOR_PAY_DEV_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_PROD_KEY', "\"$RAZOR_PAY_PROD_KEY\""
            resValue("string", "truecallerKey", System.getenv("TRUE_CALLER_KEY_DEV"))
            resValue("string", "google_maps_key", System.getenv("GOOGLE_MAPS_KEY_STAGING"))
            resValue("string", "google_maps_v2_key", System.getenv("GOOGLE_MAPS_KEY_V2_STAGING"))
            resValue("string", "clevertap_account_id", System.getenv("CLEVERTAP_ACCOUNT_ID_DEV"))
            resValue("string", "clevertap_token", System.getenv("CLEVERTAP_TOKEN_DEV"))
            resValue("string", "branch_io_key", System.getenv("BRANCH_IO_KEY"))
        }
        release {
            .
            .
            def firebaseSecondaryDev = System.getenv("FIREBASE_SECONDARY_PROD")
            buildConfigField 'String', 'firebaseSecondary', "\"$firebaseSecondaryDev\""
            buildConfigField 'String', 'APPS_FLYER_KEY', "\"$APPS_FLYER_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_DEV_KEY', "\"$RAZOR_PAY_DEV_KEY\""
            buildConfigField 'String', 'RAZOR_PAY_PROD_KEY', "\"$RAZOR_PAY_PROD_KEY\""
            resValue("string", "truecallerKey", System.getenv("TRUE_CALLER_KEY_PROD"))
            resValue("string", "google_maps_key", System.getenv("GOOGLE_MAPS_KEY_PROD"))
            resValue("string", "google_maps_v2_key", System.getenv("GOOGLE_MAPS_KEY_V2_PROD"))
            resValue("string", "clevertap_account_id", System.getenv("CLEVERTAP_ACCOUNT_ID_DEV"))
            resValue("string", "clevertap_token", System.getenv("CLEVERTAP_TOKEN_DEV"))
            resValue("string", "branch_io_key", System.getenv("BRANCH_IO_KEY"))
        }
    }

我希望代码类似于-


    buildTypes {
        debug {
            .
            .
            setupBuildType("debug", param1, param2, ...)
        }

        staging {
            .
            .
            setupBuildType("staging", param1, param2, ...)
        }
        release {
            .
            .
            setupBuildType("release", param1, param2, ...)
        }
    }
    
    void setupBuildType() {
        def firebaseSecondaryDev = System.getenv(readValueHere)
        buildConfigField 'String', 'firebaseSecondary', readValueHere
        buildConfigField 'String', 'APPS_FLYER_KEY', readValueHere
        buildConfigField 'String', 'RAZOR_PAY_DEV_KEY', readValueHere
        buildConfigField 'String', 'RAZOR_PAY_PROD_KEY', readValueHere
        resValue("string", "truecallerKey", System.getenv(readValueHere))
        resValue("string", "google_maps_key", System.getenv(readValueHere))
        resValue("string", "google_maps_v2_key", System.getenv(readValueHere))
        resValue("string", "clevertap_account_id", System.getenv(readValueHere))
        resValue("string", "clevertap_token", System.getenv(readValueHere))
        resValue("string", "branch_io_key", System.getenv(readValueHere))
    }

标签: androidgradlegroovyrefactoring

解决方案


推荐阅读