หน้านี้อธิบายการตั้งค่าแอปที่มีประโยชน์ในbuild.gradle.kts
ไฟล์
ระดับโมดูล นอกเหนือจากการให้ภาพรวมของพร็อพเพอร์ตี้ที่สําคัญซึ่งตั้งค่าไว้ในไฟล์ build.gradle.kts
แล้ว คุณยังดูวิธีต่อไปนี้ได้ด้วย
- เปลี่ยนรหัสแอปพลิเคชันสำหรับการกำหนดค่าบิลด์ที่แตกต่างกัน
- ปรับเนมสเปซอย่างปลอดภัยโดยไม่เกี่ยวข้องกับรหัสแอปพลิเคชัน
ตั้งค่ารหัสแอปพลิเคชัน
แอป Android ทุกแอปจะมีรหัสแอปพลิเคชันที่ไม่ซ้ำกันซึ่งคล้ายกับชื่อแพ็กเกจ Java หรือ Kotlin เช่น com.example.myapp รหัสนี้เป็นตัวระบุที่ไม่ซ้ำของแอปในอุปกรณ์และใน Google Play Store
รหัสแอปพลิเคชันจะกำหนดโดยพร็อพเพอร์ตี้ applicationId
ในไฟล์ build.gradle.kts
ของโมดูล ดังที่แสดงที่นี่ อัปเดตค่าของ applicationId
โดยแทนที่ com.example.myapp
ด้วยรหัสแอป
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" minSdk = 15 targetSdk = 24 versionCode = 1 versionName = "1.0" } ... }
Groovy
android { defaultConfig { applicationId "com.example.myapp" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... }
แม้ว่ารหัสแอปพลิเคชันจะดูเหมือนชื่อแพ็กเกจ Kotlin หรือ Java แบบดั้งเดิม แต่กฎการตั้งชื่อรหัสแอปพลิเคชันจะเข้มงวดกว่าเล็กน้อย ดังนี้
- โดยต้องมีอย่างน้อย 2 กลุ่ม (จุดอย่างน้อย 1 จุด)
- แต่ละกลุ่มต้องขึ้นต้นด้วยตัวอักษร
- อักขระทั้งหมดต้องเป็นตัวอักษรและตัวเลขคละกันหรือขีดล่าง [a-zA-Z0-9_]
เมื่อคุณสร้างโปรเจ็กต์ใหม่ใน Android Studio ระบบจะกำหนดชื่อแพ็กเกจที่คุณเลือกไว้ในระหว่างการตั้งค่าให้กับ applicationId
โดยอัตโนมัติ ในทางเทคนิคแล้ว คุณสลับพร็อพเพอร์ตี้ 2 รายการนี้แยกกันได้นับจากนี้เป็นต้นไป แต่เราไม่แนะนํา
เราขอแนะนำให้ทำดังนี้เมื่อตั้งค่ารหัสแอปพลิเคชัน
- คงรหัสแอปพลิเคชันไว้ให้เหมือนกับเนมสเปซ การแยกความแตกต่างระหว่างพร็อพเพอร์ตี้ 2 รายการนี้อาจทำให้สับสนได้ แต่คุณก็ไม่ต้องกังวลหากใช้ชื่อเดียวกัน
- อย่าเปลี่ยนรหัสแอปพลิเคชันหลังจากที่เผยแพร่แอปแล้ว หากคุณเปลี่ยนรหัสดังกล่าว Google Play Store จะถือว่าการอัปโหลดครั้งต่อๆ ไปเป็นแอปใหม่
- กำหนดรหัสแอปพลิเคชันอย่างชัดเจน หากไม่ได้กำหนดรหัสแอปพลิเคชันอย่างชัดเจนโดยใช้พร็อพเพอร์ตี้
applicationId
ระบบจะใช้ค่าเดียวกับเนมสเปซโดยอัตโนมัติ ซึ่งหมายความว่าการเปลี่ยนเนมสเปซจะเปลี่ยนรหัสแอปพลิเคชัน ซึ่งปกติแล้วไม่ใช่สิ่งที่คุณต้องการ
เปลี่ยนรหัสแอปพลิเคชันสำหรับการทดสอบ
โดยค่าเริ่มต้น เครื่องมือสร้างจะใช้รหัสแอปพลิเคชันกับ APK การทดสอบเพื่อรวบรวมข้อมูลโดยใช้รหัสแอปพลิเคชันของตัวแปรการสร้างที่ระบุต่อท้ายด้วย .test
ตัวอย่างเช่น APK ทดสอบสำหรับตัวแปรบิลด์ com.example.myapp.free
มีรหัสแอปพลิเคชัน com.example.myapp.free.test
แม้ว่าจะไม่จำเป็นต้องทำ แต่คุณเปลี่ยนรหัสแอปพลิเคชันได้ด้วยการกําหนดพร็อพเพอร์ตี้ testApplicationId
ในบล็อก defaultConfig
หรือ productFlavor
ตั้งค่าเนมสเปซ
โมดูล Android ทุกโมดูลจะมีเนมสเปซ ซึ่งใช้เป็นชื่อแพ็กเกจ Kotlin หรือ Java สำหรับคลาส R
และ BuildConfig
ที่สร้างขึ้น
เนมสเปซจะกำหนดโดยพร็อพเพอร์ตี้ namespace
ในไฟล์ build.gradle.kts
ของโมดูล ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ namespace
จะตั้งค่าเป็นชื่อแพ็กเกจที่คุณเลือกไว้เมื่อสร้างโปรเจ็กต์ในตอนแรก
Kotlin
android { namespace = "com.example.myapp" ... }
Groovy
android { namespace "com.example.myapp" ... }
ขณะสร้างแอปเป็นแพ็กเกจแอปพลิเคชันสุดท้าย (APK) เครื่องมือสร้างของ Android จะใช้เนมสเปซเป็นเนมสเปซสำหรับR
คลาสที่สร้างขึ้นของแอป ซึ่งจะใช้เข้าถึงทรัพยากรของแอป
เช่น ในไฟล์บิลด์ก่อนหน้า ระบบจะสร้างคลาส R
ที่
com.example.myapp.R
ชื่อที่คุณตั้งค่าให้กับพร็อพเพอร์ตี้ namespace
ของไฟล์ build.gradle.kts
ควรตรงกับชื่อแพ็กเกจพื้นฐานของโปรเจ็กต์เสมอ ซึ่งเป็นที่เก็บกิจกรรมและโค้ดแอปอื่นๆ คุณอาจมีแพ็กเกจย่อยอื่นๆ ในโปรเจ็กต์ได้ แต่ไฟล์เหล่านั้นต้องนําเข้าคลาส R
โดยใช้เนมสเปซจากพร็อพเพอร์ตี้ namespace
โปรดใช้เนมสเปซเดียวกันกับรหัสแอปพลิเคชันเพื่อให้เวิร์กโฟลว์ง่ายขึ้น เนื่องจากค่าเริ่มต้นจะเป็นเช่นนั้น
เปลี่ยนเนมสเปซ
ในกรณีส่วนใหญ่ คุณควรใช้เนมสเปซและรหัสแอปพลิเคชันเดิมตามค่าเริ่มต้น อย่างไรก็ตาม คุณอาจต้องเปลี่ยนเนมสเปซในบางจุดหากกำลังจัดระเบียบโค้ดใหม่หรือเพื่อหลีกเลี่ยงการชนกันของเนมสเปซ
ในกรณีเหล่านี้ ให้เปลี่ยนเนมสเปซโดยอัปเดตพร็อพเพอร์ตี้ namespace
ในไฟล์ build.gradle.kts
ของโมดูลโดยไม่เกี่ยวข้องกับรหัสแอปพลิเคชัน ก่อนที่จะดำเนินการดังกล่าว โปรดตรวจสอบว่าได้กำหนดรหัสแอปพลิเคชันอย่างชัดเจนแล้ว เพื่อไม่ให้การเปลี่ยนเนมสเปซเปลี่ยนรหัสแอปพลิเคชันด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่เนมสเปซส่งผลต่อรหัสแอปพลิเคชันได้ที่ตั้งค่ารหัสแอปพลิเคชัน
หากคุณตั้งชื่อ namespace
กับ Gradle applicationId
แตกต่างกัน เครื่องมือสร้างจะคัดลอกรหัสแอปพลิเคชันลงในไฟล์ Manifest สุดท้ายของแอปเมื่อสร้างเสร็จ
ดังนั้น หากคุณตรวจสอบไฟล์ AndroidManifest.xml
หลังจากการบิลด์ ระบบจะตั้งค่าแอตทริบิวต์ package
เป็นรหัสแอปพลิเคชัน แอตทริบิวต์ package
ของไฟล์ Manifest ที่ผสานคือที่ที่ Google Play Store และแพลตฟอร์ม Android มองหาเพื่อระบุแอปของคุณ
เปลี่ยนเนมสเปซสําหรับการทดสอบ
เนมสเปซเริ่มต้นของชุดแหล่งที่มา androidTest
และ test
คือเนมสเปซหลัก โดยจะมีการเพิ่ม .test
ต่อท้าย ตัวอย่างเช่น หากพร็อพเพอร์ตี้ namespace
ในไฟล์ build.gradle
คือ com.example.myapp
ระบบจะตั้งค่าเนมสเปซการทดสอบเป็น com.example.myapp.test
โดยค่าเริ่มต้น
หากต้องการเปลี่ยนเนมสเปซสําหรับการทดสอบ ให้ใช้พร็อพเพอร์ตี้ testNamespace
ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Kotlin
android { namespace = "com.example.myapp" testNamespace = "com.example.mytestapp" ... }
Groovy
android { namespace "com.example.myapp" testNamespace "com.example.mytestapp" ... }
ข้อควรระวัง: อย่าตั้งค่า testNamespace
และ namespace
เป็นค่าเดียวกัน ไม่เช่นนั้นจะเกิดข้อขัดแย้งของเนมสเปซ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบได้ที่ทดสอบแอปใน Android