Build Config รวมถึงพารามิเตอร์บิลด์: ประเภทบิลด์ แฟลกคอมไพล์ คีย์เซ็นชื่อ และเวอร์ชัน SDK ที่กำหนดว่าแอปพลิเคชันจะถูกสร้างสำหรับสภาพแวดล้อมต่างๆ อย่างไร ตาม Android Developers Guide (2026) ระบบบิลด์ Gradle รองรับ Product Flavors และ Build Types สำหรับการกำหนดค่าที่ยืดหยุ่น Build Config จะทำให้การสลับระหว่าง debug และ release เป็นอัตโนมัติโดยไม่ต้องเปลี่ยนแปลงโค้ดด้วยตนเอง
ประเด็นสำคัญ
Build Config คือชุดของการตั้งค่าที่กำหนดกระบวนการคอมไพล์ สร้าง และบรรจุภัณฑ์ของแอปพลิเคชันมือถือ การกำหนดค่าบิลด์รวมถึงการเลือกแพลตฟอร์มเป้าหมาย เวอร์ชัน SDK ขั้นต่ำ แฟลกการเพิ่มประสิทธิภาพ คีย์เซ็นชื่อ และตัวแปรสภาพแวดล้อม
โปรเจกต์มือถือสมัยใหม่ไม่ค่อยมีการกำหนดค่าบิลด์เพียงอย่างเดียว โดยปกติแล้วจะมี หลายแบบ: debug (สำหรับการพัฒนาพร้อมดีบัก), release (สำหรับโปรดักชันพร้อมการเพิ่มประสิทธิภาพ), staging (สำหรับการทดสอบด้วยข้อมูลจริง) และ flavor ต่างๆ (ตัวอย่าง, เต็ม, เวอร์ชันองค์กร)
ตาม Gradle Build Tool Survey (2025) โปรเจกต์ Android โดยเฉลี่ยใช้การกำหนดค่าบิลด์ที่แตกต่างกัน 3.2 รายการ ในขณะที่โปรเจกต์ iOS ใช้ 2.8 รายการ แต่ละการกำหนดค่าสามารถมีแฟลกคอมไพล์ ใบรับรองเซ็นชื่อ และ URL เซิร์ฟเวอร์ของตนเองได้
งานหลักของ Build Config คือทำให้การสลับระหว่างการกำหนดค่าเหล่านี้เป็นอัตโนมัติ แทนที่จะเปลี่ยน URL เซิร์ฟเวอร์หรือแฟลกดีบักด้วยตนเอง นักพัฒนาเลือก Build Variant ที่ต้องการใน IDE และระบบบิลด์จะใช้ พารามิเตอร์ ที่เกี่ยวข้องโดยอัตโนมัติ
การตั้งค่า Build Config ที่เหมาะสมส่งผลกระทบอย่างมากต่อความปลอดภัยของแอปพลิเคชัน: บิลด์ debug รวมถึงล็อกโดยละเอียด ตัวตรวจสอบฐานข้อมูล และจุดสิ้นสุดการดีบักที่ต้องแยกออกจากไบนารี release อย่างเด็ดขาด Gradle แก้ปัญหานี้ผ่าน Build Types: debug สามารถมีแฟลก debuggable true ส่วน release — minifyEnabled true พร้อม ProGuard iOS บรรลุผลเดียวกันผ่าน Swift Active Compilation Conditions ซึ่งโค้ดภายใน #if DEBUG จะไม่ถูกคอมไพล์ในการกำหนดค่า release
Android ใช้ระบบบิลด์ Gradle พร้อมแนวคิดหลักสองประการ: Build Types และ Product Flavors การรวมกันของทั้งสองก่อให้เกิด Build Variants — แต่ละรูปแบบมีการกำหนดค่าบิลด์ที่สมบูรณ์ของตนเอง
Build Type คือการกำหนดค่าที่กำหนดว่าแอปพลิเคชันถูกสร้างขึ้นอย่างไร โดยค่าเริ่มต้น Gradle จะสร้างสองประเภท: debug (พร้อมดีบัก, ไม่มีการบดบัง) และ release (พร้อม ProGuard/R8, เซ็นชื่อสำหรับเผยแพร่) นักพัฒนาสามารถเพิ่มประเภทของตนเองได้: staging, benchmark, qa
// build.gradle.kts
android {
buildTypes {
debug {
isDebuggable = true
buildConfigField("String", "API_URL", "\"http://dev.api.com\"")
}
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
buildConfigField("String", "API_URL", "\"https://prod.api.com\"")
}
}
}
Product Flavors อนุญาตให้สร้างเวอร์ชันต่างๆ ของแอปพลิเคชันเดียวกันจากโค้ดเบสเดียว ตัวอย่างเช่น: เวอร์ชันฟรีพร้อมโฆษณา, เวอร์ชันเสียเงินไม่มีโฆษณา และเวอร์ชันองค์กรพร้อมฟีเจอร์เพิ่มเติม แต่ละ flavor สามารถมี applicationId, ทรัพยากร และการพึ่งพา SDK ของตนเองได้
android {
productFlavors {
register("demo") {
applicationId = "com.example.app.demo"
versionNameSuffix = "-demo"
}
register("full") {
applicationId = "com.example.app"
versionNameSuffix = ""
}
}
}
สำหรับแต่ละ Build Variant Gradle จะสร้างคลาส BuildConfig พร้อมฟิลด์การกำหนดค่า นักพัฒนาเพิ่มฟิลด์ที่กำหนดเองผ่าน buildConfigField ในขณะที่ฟิลด์มาตรฐาน (DEBUG, APPLICATION_ID, BUILD_TYPE, VERSION_CODE, FLAVOR) ถูกสร้างขึ้นโดยอัตโนมัติ
// การใช้ BuildConfig ในโค้ด
class NetworkModule {
fun createApiClient(): ApiClient {
return if (BuildConfig.DEBUG) {
ApiClient(
baseUrl = BuildConfig.API_URL,
interceptor = HttpLoggingInterceptor()
)
} else {
ApiClient(baseUrl = BuildConfig.API_URL)
}
}
}
BuildConfig ยังอนุญาตให้เปิดหรือปิดการทำงานในเวลาบิลด์อีกด้วย ตัวอย่างเช่น คุณสามารถเพิ่มฟิลด์ FEATURE_CHAT_ENABLED และเปิดแชทเฉพาะในเวอร์ชันเต็มของแอปพลิเคชัน โดยไม่ต้องตรวจสอบขณะรันไทม์และตัวดำเนินการแบบมีเงื่อนไขในโค้ด
สำหรับการดีบักคำขอเครือข่าย BuildConfig พร้อมฟิลด์ DEBUG อนุญาตให้แนบ HttpLoggingInterceptor ใน OkHttp โดยอัตโนมัติเฉพาะบิลด์ debug เท่านั้น สิ่งนี้รับประกันว่าจะไม่มีคำขอ HTTP ใดๆ ถูกบันทึกในโปรดักชัน แม้ว่านักพัฒนาจะลืมลบการบันทึกก่อนสร้างบิลด์ release ก็ตาม
ในระบบนิเวศ iOS Build Config ถูกจัดการผ่าน Xcode Build Settings — ตารางพารามิเตอร์ที่แต่ละพารามิเตอร์สามารถมีค่าต่างกันสำหรับการกำหนดค่าที่แตกต่างกัน (Debug, Release, Staging)
โดยค่าเริ่มต้น Xcode จะสร้างสองการกำหนดค่า: Debug (สำหรับการพัฒนา, ไม่มีการเพิ่มประสิทธิภาพ) และ Release (สำหรับโปรดักชัน, พร้อมการเพิ่มประสิทธิภาพ -Os) นักพัฒนาสามารถเพิ่มการกำหนดค่าของตนเองผ่านเมนู Project > Info > Configurations
สำหรับแต่ละการกำหนดค่า Build Settings จะถูกกำหนดค่า: แฟลกคอมไพเลอร์ (OTHER_SWIFT_FLAGS, GCC_PREPROCESSOR_DEFINITIONS), โค้ดเซ็นชื่อ (CODE_SIGN_IDENTITY), โปรไฟล์การจัดเตรียม และ entitlement Xcode เขียนการตั้งค่าเหล่านี้ลงในไฟล์ project.pbxproj
เพื่อการจัดการ Build Settings ที่สะดวก นักพัฒนา iOS ใช้ไฟล์ .xcconfig — ไฟล์ข้อความที่มีพารามิเตอร์ในรูปแบบ KEY = VALUE ซึ่งคล้ายกับ .env สำหรับ Xcode: ค่าจะเชื่อมต่อกับโปรเจกต์และแทนที่การตั้งค่าใน project.pbxproj
// Debug.xcconfig
BUNDLE_ID_SUFFIX = .debug
API_BASE_URL = http://localhost:8080
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
CODE_SIGN_IDENTITY = Apple Development
// Release.xcconfig
BUNDLE_ID_SUFFIX =
API_BASE_URL = https://api.production.com
SWIFT_ACTIVE_COMPILATION_CONDITIONS =
CODE_SIGN_IDENTITY = Apple Distribution
พารามิเตอร์ Build Config บางส่วนไปอยู่ใน Info.plist — ไฟล์แมนิเฟสต์ของแอปพลิเคชัน iOS ผ่าน Info.plist จะกำหนดค่า URL schemes, สิทธิ์ (กล้อง, ไมโครโฟน), โหมดพื้นหลัง และการกำหนดค่าเข้าสู่ระบบบริการของบุคคลที่สาม
ค่าจาก xcconfig สามารถแทนที่ใน Info.plist ผ่านไวยากรณ์ $(VARIABLE_NAME) ตัวอย่างเช่น $(API_BASE_URL) ใน Info.plist จะขยายตามการกำหนดค่าบิลด์ที่ใช้งานอยู่ ซึ่งจะรวมศูนย์การจัดการ พารามิเตอร์สภาพแวดล้อม สำหรับแพลตฟอร์ม Apple ทั้งหมด
ในโปรเจกต์สมัยใหม่ Build Config ผสานรวมกับระบบการรวมต่อเนื่อง: GitLab CI, GitHub Actions, Bitrise, CircleCI แต่ละไปป์ไลน์สามารถแทนที่พารามิเตอร์ Build Config ผ่าน ตัวแปรสภาพแวดล้อม ของระบบ CI/CD
สำหรับ Android ไปป์ไลน์ CI จะเรียกใช้ Gradle พร้อมกับ Build Variant ที่ระบุ: ./gradlew assembleFullRelease พารามิเตอร์เซ็นชื่อจะถูกส่งผ่านตัวแปร CI: STORE_PASSWORD, KEY_ALIAS Gradle อ่านค่าจากสภาพแวดล้อมรันไทม์และแทนที่ใน build.gradle.kts
// build.gradle.kts — การอ่านจากตัวแปร CI
android {
signingConfigs {
register("release") {
storeFile = file(System.getenv("KEYSTORE_PATH") ?: "debug.keystore")
storePassword = System.getenv("STORE_PASSWORD") ?: ""
keyAlias = System.getenv("KEY_ALIAS") ?: "key"
keyPassword = System.getenv("KEY_PASSWORD") ?: ""
}
}
}
สำหรับ iOS CI ใช้ xcodebuild พร้อมแฟลกการกำหนดค่า: -configuration Release ใบรับรองเซ็นชื่อถูกส่งผ่าน CI secrets และโปรไฟล์ผ่าน Apple Developer Portal API หรือ Fastlane match
เครื่องมือ Fastlane ทำให้การจัดการ Build Config เป็นอัตโนมัติ: สร้าง xcconfig, อัปเดตเวอร์ชันใน Info.plist, เซ็นชื่อ IPA ที่สร้างแล้ว และอัปโหลดไปยัง App Store Connect Fastlane gym (บิลด์) และ match (เซ็นชื่อ) เป็นมาตรฐานของไปป์ไลน์ CI iOS
ตาม Bitrise Build Report (2025) โปรเจกต์ที่มี Build Config ตั้งค่าใน CI ช่วยลดเวลาในการกำหนดค่าบิลด์ด้วยตนเองได้ 73% และลดข้อผิดพลาดในการเซ็นชื่อลง 89% Build Config แบบอัตโนมัติเป็นองค์ประกอบบังคับของไปป์ไลน์ที่พร้อมสำหรับโปรดักชัน
อีกประเด็นสำคัญคือ การกำหนดพารามิเตอร์เวอร์ชัน ผ่าน Build Config Gradle อนุญาตให้อ่าน versionCode และ versionName จากตัวแปร CI และแทนที่ใน build.gradle.kts แบบไดนามิก ซึ่งช่วยลดความไม่สอดคล้องของเวอร์ชันระหว่างนักพัฒนา ใน iOS งานที่คล้ายกันได้รับการแก้ไขผ่าน agvtool (Apple Generic Versioning Tool) ซึ่งสามารถเพิ่มหมายเลขบิลด์ตามแท็ก git หรือหมายเลขบิลด์ใน CI
คำถามที่พบบ่อย
Build Type (debug, release) กำหนด วิธีการ สร้างแอปพลิเคชัน: มีหรือไม่มีดีบัก มีหรือไม่มีการเพิ่มประสิทธิภาพ Product Flavor (ตัวอย่าง, เต็ม) กำหนด เวอร์ชันใด ที่ถูกสร้าง: applicationId, SDK, ทรัพยากรที่ต่างกัน การรวมกันของทั้งสองเรียกว่า Build Variant
ผ่านเมธอด buildConfigField ใน build.gradle.kts ฟิลด์จะถูกเพิ่มไปยังคลาส BuildConfig ที่สร้างขึ้นโดยอัตโนมัติและพร้อมใช้งานในโค้ดเป็น BuildConfig.ชื่อ_ฟิลด์ สำหรับสตริง ค่าจะต้องถูกห่อด้วยเครื่องหมายคำพูดที่ถูก Escape
ผ่าน ไฟล์ .xcconfig — หนึ่งไฟล์ต่อสภาพแวดล้อม ใน Project > Info > Configurations เพิ่มการกำหนดค่า Debug/Staging/Release แต่ละรายการอ้างอิง xcconfig ของตนเอง ค่าจะถูกแทนที่ใน Info.plist ผ่านไวยากรณ์ $(VAR_NAME)
BuildConfig แยก การกำหนดค่าบิลด์ ออกจากตรรกะของแอปพลิเคชัน แฟลกในโค้ดต้องการการเปลี่ยนแปลงด้วยตนเองและการคอมไพล์ใหม่เมื่อเปลี่ยนสภาพแวดล้อม BuildConfig เปลี่ยนพารามิเตอร์ทั้งหมดโดยอัตโนมัติเมื่อเลือก Build Variant ใน IDE หรือ CI
ได้ Gradle อนุญาตให้ระบุการพึ่งพาสำหรับ flavor เฉพาะ: demoImplementation และ fullImplementation เวอร์ชันตัวอย่างสามารถรวมไลบรารีการวิเคราะห์ในขณะที่เวอร์ชันเต็มอาจไม่รวม ซึ่งช่วยลดขนาด APK สำหรับ flavor ต่างๆ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม