กำหนดค่าโมดูลแอป

หน้านี้อธิบายการตั้งค่าแอปที่มีประโยชน์ใน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