Package Name — คืออะไร reverse domain notation และข้อกำหนด

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-17 เวลาอ่าน: 8 นาที

Package Name คือตัวระบุเฉพาะของแอปพลิเคชัน Android ที่อิงจากการเขียนชื่อโดเมนแบบย้อนกลับ (reverse domain notation) ระบบใช้เพื่อแยกแยะแอปพลิเคชันบนอุปกรณ์ของผู้ใช้ ใน Google Play สำหรับการระบุผลิตภัณฑ์ และในบริการ Firebase สำหรับเชื่อมโยงการกำหนดค่าโครงการทั้งหมด ตามAndroid Developer Documentation Package Name ยังคงไม่เปลี่ยนแปลงตลอดวงจรชีวิตของแอปพลิเคชันหลังการเผยแพร่

สาระสำคัญ

  • Package Name — ตัวระบุระดับโลกของแอป Android ในรูปแบบ reverse domain
  • รูปแบบ ใช้โดเมนของบริษัทในลำดับย้อนกลับ: com.example.app
  • ความเป็นเอกลักษณ์ Google Play ตรวจสอบเมื่อเผยแพร่ — ห้ามมีชื่อซ้ำ
  • การเปลี่ยนแปลง Package Name หลังเผยแพร่ไม่สามารถทำได้หากไม่สร้างแอปใหม่
  • Application ID ใน build.gradle สอดคล้องกับ Package Name และกำหนดค่าแยกต่างหาก

Package Name ใน Android คืออะไร

Package Name คือสตริงเฉพาะที่ Android ใช้ในการระบุแอปพลิเคชันในระดับระบบปฏิบัติการ โดยสอดคล้องกับฟิลด์ package ในไฟล์ AndroidManifest.xml และฟิลด์ applicationId ในไฟล์ build.gradle ของโมดูลแอป หากไม่มี Package Name ที่ไม่ซ้ำกัน จะไม่สามารถติดตั้งแอปพลิเคชันบนอุปกรณ์ของผู้ใช้ได้

วัตถุประสงค์ของ Package Name

บนอุปกรณ์ Package Name ทำหน้าที่เป็นคีย์สำหรับจัดการแอปพลิเคชัน: ระบบจะเก็บข้อมูล การตั้งค่า และแคชของแต่ละแอปในไดเรกทอรี /data/data/[packageName] แอปสองตัวที่มีตัวระบุเดียวกันไม่สามารถอยู่ร่วมกันได้ — เมื่อพยายามติดตั้งแอปซ้ำ ระบบจะเสนอให้ลบแอปที่มีอยู่ออก

Package Name และ Application ID

ใน Android Gradle Plugin เวอร์ชัน 0.11+ มีการแยกระหว่าง Package Name (ในแมนิเฟสต์) และ Application ID (ใน build.gradle) Application ID คือตัวระบุจริงของแอปพลิเคชันสำหรับระบบและ Google Play Package Name ในแมนิเฟสต์ใช้สำหรับการแก้ไขทรัพยากรและการสร้างคลาส R ขอแนะนำให้คงค่าไว้เหมือนกันเพื่อความเรียบง่าย

groovy
// build.gradle (Module: app)
android {
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 24
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

ฟิลด์ applicationIdSuffix อนุญาตให้เพิ่มคำต่อท้ายใน Application ID สำหรับการกำหนดค่าการ build ที่แตกต่างกัน เวอร์ชันดีบักสามารถมีตัวระบุเป็น com.example.app.debug ซึ่งทำให้สามารถติดตั้งควบคู่ไปกับเวอร์ชันโปรดักชันเพื่อการทดสอบแบบขนานได้

กฎการตั้งชื่อ Package Name

Google Play กำหนดกฎที่เข้มงวดสำหรับ Package Name ที่ต้องปฏิบัติตามเมื่อเผยแพร่ ตัวระบุต้องไม่ซ้ำกันในระดับร้านค้าทั้งหมด ตรงตามข้อกำหนดทางไวยากรณ์ และไม่ละเมิดนโยบายการใช้เครื่องหมายการค้า

ข้อกำหนดทางไวยากรณ์

Package Name สามารถมีได้เฉพาะตัวอักษรละติน (A-Z, a-z) ตัวเลข (0-9) จุด (.) และขีดล่าง (_) ความยาวสูงสุดคือ 150 ตัวอักษร แต่ละส่วนระหว่างจุดต้องขึ้นต้นด้วยตัวอักษร ยัติภังค์ ช่องว่าง และอักขระพิเศษถูกห้ามโดยกฎของ Google Play

ข้อกำหนดค่าตัวอย่าง
อักขระที่อนุญาตตัวอักษรละติน ตัวเลข จุด ขีดล่างcom.example.my_app
ความยาวสูงสุด150 ตัวอักษรcom.example.verylongappname
จุดเริ่มต้นของส่วนเฉพาะตัวอักษรcom — ไม่ใช่ 3com
ต้องห้ามยัติภังค์ ช่องว่าง อักษรซีริลลิกcom.ผู้ใช้-domain — ข้อผิดพลาด
ความเป็นเอกลักษณ์ระดับโลกใน Google Playตรวจสอบเมื่อสร้าง

ข้อกำหนดด้านความเป็นเอกลักษณ์

ความเป็นเอกลักษณ์ ของ Package Name เป็นข้อกำหนดสัมบูรณ์ของ Google Play Store หากแอปอื่นใช้ตัวระบุที่เลือกไว้แล้ว การเผยแพร่จะถูกปฏิเสธ Google ไม่ปล่อยตัวระบุของแอปที่ถูกลบ ดังนั้นการเลือก Package Name แรกจึงเป็นการตัดสินใจที่สำคัญสำหรับทุกโปรเจกต์ของนักพัฒนา

Reverse domain notation และข้อตกลง

Reverse domain notation คือมาตรฐานการตั้งชื่อที่ชื่อโดเมนของบริษัทถูกเขียนในลำดับย้อนกลับ: com.example แทน example.com ระบบดังกล่าวรับประกันความเป็นเอกลักษณ์ระดับโลกของตัวระบุ เนื่องจากชื่อโดเมนแต่ละชื่อมีความเฉพาะตัวโดยนิยาม

คำนำหน้ามาตรฐาน

นักพัฒนามักใช้คำนำหน้าที่สอดคล้องกับ TLD ของโดเมน: com สำหรับองค์กรเชิงพาณิชย์ org สำหรับองค์กรไม่แสวงหาผลกำไร io สำหรับโปรเจกต์เทคโนโลยี net สำหรับบริการและโซลูชันเครือข่าย สำหรับโปรเจกต์ส่วนตัว สามารถใช้ com.github.username หรือ com.email ได้

  • com.company.app — รูปแบบมาตรฐานสำหรับแอปเชิงพาณิชย์
  • org.company.app — สำหรับโปรเจกต์ไม่แสวงหาผลกำไรและโอเพนซอร์ส
  • io.company.app — เป็นที่นิยมในหมู่สตาร์ทอัพและผลิตภัณฑ์ SaaS
  • com.github.username — สำหรับโปรเจกต์ส่วนตัวบน GitHub

ข้อตกลงสำหรับโปรเจกต์หลายแพลตฟอร์ม

สำหรับแอปที่เผยแพร่บน iOS และ Android ขอแนะนำให้ใช้ตัวระบุเดียวกันบนทั้งสองแพลตฟอร์ม ซึ่งช่วยลดความซับซ้อนในการรวมระบบกับ Firebase, AppsFlyer, Adjust และระบบวิเคราะห์อื่นๆ ที่เชื่อมโยงกับตัวระบุโปรเจกต์ ตัวอย่างเช่น com.mycompany.myapp จะเป็น Bundle ID บน iOS และ Package Name บน Android

การกำหนดค่า Package Name ในโปรเจกต์ Android

การกำหนดค่า Package Name ในโปรเจกต์ Android รวมถึงการเปลี่ยน applicationId ใน build.gradle และโครงสร้างไดเรกทอรีของโค้ด Java/Kotlin ที่เกี่ยวข้อง Android Studio มีเครื่องมือสำหรับการรีแฟกเตอร์ Package Name แต่สำหรับโปรเจกต์ที่ซับซ้อน ขอแนะนำให้ย้ายข้อมูลแบบทีละขั้นตอน

โครงสร้างไดเรกทอรีและ Package Name

kotlin
// เส้นทางไฟล์สอดคล้องกับ Package Name
// com/example/myapp/MainActivity.kt

package com.example.myapp

import android.os.Bundle
import androidx.activity.ComponentActivity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

ใน Kotlin และ Java Package Name ในไฟล์ต้นฉบับต้องสอดคล้องกับโครงสร้างไดเรกทอรี เมื่อเปลี่ยน Package Name ใน build.gradle จำเป็นต้องย้ายไฟล์ไปยังไดเรกทอรีที่เกี่ยวข้องและอัปเดตคำประกาศ package และ import ทั้งหมด Android Studio สามารถทำสิ่งนี้ได้โดยอัตโนมัติผ่าน Refactor -> Move แต่สำหรับโปรเจกต์ขนาดใหญ่ที่มีไฟล์นับสิบ ขอแนะนำให้ตรวจสอบผลลัพธ์หลังการรีแฟกเตอร์

หากโปรเจกต์ใช้ Data Binding, View Binding หรือ Hilt การเปลี่ยน Package Name จะกระทบกับคลาสที่ถูกสร้างขึ้นด้วย คลาส Binding ถูกสร้างขึ้นบนพื้นฐานของ Package Name ของโมดูลและไดเรกทอรี layout หลังจากเปลี่ยนตัวระบุแล้ว จะต้อง build โปรเจกต์ใหม่เพื่ออัปเดตลิงก์ที่สร้างขึ้นทั้งหมด ขอแนะนำให้ทำ clean build หลังจากเปลี่ยน Package Name เพื่อป้องกันข้อผิดพลาดจากลิงก์เก่าที่ถูกแคชไว้

ใน Gradle 7.0+ มีการสนับสนุน namespace ใน build.gradle ซึ่งแทนที่ package ใน AndroidManifest.xml เพื่อวัตถุประสงค์ในการสร้างคลาส R และทรัพยากร โดยที่ applicationId ยังคงเป็นตัวระบุจริงของแอปพลิเคชันสำหรับระบบและ Google Play ซึ่งทำให้สามารถมี applicationId และ namespace ที่แตกต่างกัน ซึ่งมีประโยชน์สำหรับโมดูลไลบรารีที่ namespace ถูกกำหนดไว้คงที่ ในขณะที่ตัวระบุสาธารณะสามารถเปลี่ยนแปลงได้เมื่อ build

สำหรับโปรเจกต์ที่มี สถาปัตยกรรมแบบโมดูล การเปลี่ยน Package Name ของโมดูลหนึ่งอาจกระทบต่อ imports ในโมดูลอื่น หากโมดูล data มีแพ็กเกจ com.example.data และโมดูล domain ใช้คลาสของมัน หลังจากเปลี่ยนตัวระบุแล้ว ให้อัปเดต imports ในทุกโมดูลที่ขึ้นต่อกัน ปลั๊กอิน Gradle ของ Android เวอร์ชัน 8.0+ ทำให้กระบวนการนี้ง่ายขึ้นด้วยการสร้าง namespace อัตโนมัติจาก build.gradle

การตรวจสอบ Package Name ผ่านโค้ด

สามารถรับ Application ID ปัจจุบันได้ผ่านคลาส BuildConfig: BuildConfig.APPLICATION_ID ซึ่งสะดวกสำหรับตรรกะแบบมีเงื่อนไขในโค้ด การผูกกับสภาพแวดล้อม หรือการแสดงตัวระบุในหน้าจอดีบัก BuildConfig ถูกสร้างขึ้นโดยอัตโนมัติตาม build.gradle

kotlin
// การรับ Application ID ใน runtime
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)

println("App version: ${appInfo.versionName} (${appInfo.versionCode})")
println("Package: $packageName")

การเปลี่ยน Package Name หลังการเผยแพร่

การเปลี่ยน Package Name หลังจากเผยแพร่แอปใน Google Play เป็นการดำเนินการที่หมายถึงการสร้างผลิตภัณฑ์ใหม่ทั้งหมด ระบบไม่อนุญาตให้อัปเดตแอปที่มีอยู่ด้วย Package Name อื่น ดังนั้นการตัดสินใจเปลี่ยนตัวระบุจึงเทียบเท่ากับการเริ่มโปรเจกต์ใหม่ในร้านค้า

ผลกระทบของการเปลี่ยน Package Name

เมื่อเปลี่ยน Package Name จะสูญเสีย: เรตติ้งและรีวิวทั้งหมด สถิติการติดตั้ง การรวมระบบกับ Google Services (หากไม่ได้ย้าย) ลิงก์ไปยังโปรเจกต์ Firebase (ต้องสร้าง google-services.json ใหม่) ผู้ใช้จะไม่ได้รับการอัปเดตอัตโนมัติ — พวกเขาจะเห็นแอปใหม่ในร้านค้า

  • เรตติ้งและรีวิว — ยังคงอยู่กับแอปเก่า ไม่สามารถย้ายได้
  • สถิติการติดตั้ง — เริ่มต้นใหม่สำหรับ Package Name ใหม่
  • โปรเจกต์ Firebase — ต้องการการกำหนดค่า google-services.json ใหม่และการตั้งค่าบริการทั้งหมดใหม่
  • ผู้ใช้ — ไม่ได้รับการอัปเดตอัตโนมัติ ต้องแจ้งให้ทราบแยกต่างหาก

เมื่อใดที่การเปลี่ยน Package Name สมเหตุสมผล

การเปลี่ยน Package Name อาจสมเหตุสมผลเมื่อมีการรีแบรนด์บริษัท การย้ายแอปไปยังบัญชีนักพัฒนาอื่น หรือเมื่อสร้างเวอร์ชันแยกต่างหากสำหรับภูมิภาคอื่น ไม่ว่าในกรณีใด ก่อนการเปลี่ยนขอแนะนำให้แจ้งผู้ใช้ผ่านแอปเก่าและเตรียมแผนการย้ายข้อมูลพร้อมการโอนย้ายข้อมูล หากไม่มีแผนการย้ายข้อมูล ผู้ใช้จะสูญเสียการเข้าถึงคอนเทนต์ที่ซื้อแล้ว การสมัครสมาชิก และข้อมูลที่บันทึกไว้ของแอป การย้ายข้อมูลรวมถึงการโอนย้ายฐานข้อมูลและไฟล์ผ่าน SharedPreferences หรือ Room

ก่อนเปลี่ยน Package Name ตรวจสอบให้แน่ใจว่าตัวระบุใหม่ไม่ซ้ำกันและสอดคล้องกับกฎการตั้งชื่อ สร้างแอปใหม่ใน Google Play ด้วย Package Name ใหม่และเผยแพร่เป็นผลิตภัณฑ์แยกต่างหาก ในคำอธิบายของแอปเก่า ให้ใส่ลิงก์ไปยังแอปใหม่ พิจารณาความเป็นไปได้ในการใช้ Google Play Custom Store Listing เพื่อเปลี่ยนเส้นทางผู้ใช้

คำถามที่พบบ่อย

สามารถใช้ยัติภังค์หรือขีดล่างใน Package Name ได้หรือไม่?

ใน Package Name อนุญาตให้ใช้ขีดล่าง (_) แต่ไม่ใช่ยัติภังค์ (-) ขีดล่างใช้น้อยแต่ก็ใช้ได้: com.example.my_app ยัติภังค์ถูกห้ามโดยกฎของ Google Play และจะทำให้เกิดข้อผิดพลาดเมื่อเผยแพร่ ขอแนะนำให้ใช้เฉพาะจุดเป็นตัวคั่นส่วน

Package Name แตกต่างจาก Application ID ใน build.gradle อย่างไร?

Package Name คือตัวระบุใน AndroidManifest.xml ที่ใช้สำหรับการแก้ไขทรัพยากรและการสร้างคลาส R Application ID คือฟิลด์ใน build.gradle ที่กำหนดตัวระบุของแอปพลิเคชันสำหรับระบบและ Google Play Store ขอแนะนำให้คงค่าไว้เหมือนกัน แต่สามารถแตกต่างกันได้เมื่อใช้ applicationIdSuffix

วิธีเลือก Package Name ที่ถูกต้องสำหรับโปรเจกต์ใหม่?

ใช้ reverse domain notation ของบริษัทหรือชื่อผู้ใช้ของคุณ: com.domain.appname ตรวจสอบให้แน่ใจว่าตัวระบุไม่ซ้ำกันใน Google Play หลีกเลี่ยงคำทั่วไป (todo, test, app) และตรวจสอบว่าตัวระบุไม่ได้ถูกใช้โดยนักพัฒนาอื่นผ่านการค้นหาใน Google Play

สามารถเปลี่ยน Package Name ก่อนเผยแพร่ใน Google Play ได้หรือไม่?

ได้ ก่อนเผยแพร่ใน Google Play สามารถเปลี่ยน Package Name ได้โดยไม่มีผลกระทบ หลังจากเปลี่ยนแล้ว จะต้องสร้าง google-services.json ใหม่ อัปเดตโครงสร้างไดเรกทอรี และตรวจสอบ imports ทั้งหมด Android Studio มีเครื่องมือ Refactor -> Move สำหรับทำให้กระบวนการเป็นอัตโนมัติ

Package Name เกี่ยวข้องกับการเซ็นชื่อแอปพลิเคชันอย่างไร?

Package Name ร่วมกับใบรับรองการเซ็นชื่อสร้างคู่ที่ใช้ระบุแอปพลิเคชันใน Google Play แม้ว่าแอปสองตัวจะมี Package Name ต่างกัน แอปเหล่านั้นก็สามารถเซ็นชื่อด้วยคีย์เดียวกันได้ การเปลี่ยนใบรับรองการเซ็นชื่อสามารถทำได้ผ่าน Key Rotation ใน Play Console โดยไม่สูญเสียตัวระบุ

สรุป

  • Package Name — ตัวระบุเฉพาะของแอป Android ในรูปแบบ reverse domain notation
  • กฎการตั้งชื่อ — ตัวอักษรละติน ตัวเลข จุด ขีดล่าง สูงสุด 150 ตัวอักษร
  • Reverse domain รับประกันความเป็นเอกลักษณ์ระดับโลก: com.company.appname
  • Application ID ใน build.gradle สอดคล้องกับ Package Name และสามารถมีคำต่อท้ายการ build ได้
  • การเปลี่ยนแปลง หลังเผยแพร่ไม่สามารถทำได้ — แอปใหม่จะสูญเสียเรตติ้งและรีวิว
  • Android Studio มีเครื่องมือรีแฟกเตอร์สำหรับการเปลี่ยนอย่างปลอดภัยก่อนเผยแพร่
  • คำแนะนำ — เลือกตัวระบุที่มีความหมายก่อนเผยแพร่ หลีกเลี่ยงชื่อทั่วไปและชื่อที่ถูกใช้แล้ว

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม