android - Android Groovy Gradle 重构代码以避免重复
问题描述
我有一个 android 应用程序,它从 env vars 中读取很多字段,结果 buildConfigs 块越来越大。我尝试将代码提取到一个方法中,但没有奏效。我也尝试过使用initWith
which 有点帮助但不完全。
这就是当前代码的样子 -
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))
}
解决方案
推荐阅读
- android - 如何保护我的移动应用程序的云数据库?
- c++ - 为什么 wxCrafter Hello World 程序不起作用?[C++, wxWidgets]
- json - 如何将json数据重塑为另一种格式
- javascript - 对对象数组进行排序并创建具有公共值的新数组
- laravel - 提交表单Laravel 6后意外注销
- python - 如何从 Python 函数返回多个变量
- php - 从 pdo 结果中获取值
- java - 将 if 语句转换为三元运算符 - 编译器抱怨它不是语句
- javascript - NetSuite SuiteScript 2.0:内联 HTML document.querySelector() 结果
- dns - Route 53 子域 www 未定向到站点