Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเปลี่ยน Package Name ใน Android Studio

ภาพรวม

การเปลี่ยน Package Name (Application ID) ใน Android Studio ต้องทำให้ถูกต้องทั้ง **Source Code** และ **Build Configuration** เพื่อไม่ให้เกิด Error หรือ Conflict บน Play Store

ขั้นตอนแบบ Visual (Refactor - แนะนำ)

1. เปิด Project View เป็น "Project" (ไม่ใช่ Android)

ซ้ายบน → Dropdown เลือก Project (แทน Android) → จะเห็นโครงสร้างโฟลเดอร์จริง

2. Refactor Package Name

  1. ขยายโฟลเดอร์: app → src → main → java → com.example.oldpackage
  2. Right-click ที่โฟลเดอร์ package สุดท้าย (เช่น com.example.myapp)
  3. เลือก Refactor → Rename (หรือกด Shift+F6)
  4. Dialog ปรากฏ → เลือก Rename package (ไม่ใช่ Rename directory)
  5. พิมพ์ Package Name ใหม่ (เช่น com.newcompany.newapp) → Refactor
  6. รอ Refactoring Preview → ตรวจสอบไฟล์ที่จะเปลี่ยน → Do Refactor

3. อัปเดต applicationId ใน build.gradle

หลัง Refactor แล้ว ให้เปิด build.gradle (Module: app) ตรวจสอบ:

android {
    defaultConfig {
        applicationId "com.newcompany.newapp" // ต้องตรงกับ Package Name ใหม่
        minSdkVersion 21
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }
}

สำคัญ: Refactor ไม่ได้แก้ applicationId ให้อัตโนมัติ ต้องแก้เอง

4. Clean & Rebuild

Build → Clean Project
Build → Rebuild Project

ขั้นตอนทางเลือก: เปลี่ยนด้วยตนเอง (Manual)

หาก Refactor ไม่ได้ผล ลองทำ Manual:

  1. เปลี่ยนชื่อโฟลเดอร์ใน src/main/java/ ให้ตรง Package ใหม่
  2. แก้ `package` statement ในทุกไฟล์ .java/.kt
  3. แก้ `applicationId` ใน build.gradle
  4. แก้ `namespace` ใน build.gradle (AGP 7.3+)
  5. แก้ `android:authorities` ใน Manifest (สำหรับ FileProvider, ContentProvider)
  6. Clean & Rebuild

ไฟล์ที่ต้องตรวจสอบหลังเปลี่ยน

ไฟล์สิ่งที่ต้องตรวจสอบ
AndroidManifest.xmlpackage attribute (legacy), authorities
build.gradle (app)applicationId, namespace
google-services.jsonpackage_name (ถ้าใช้ Firebase)
proguard-rules.proKeep rules ที่อ้าง package
Test files (androidTest, test)Package declaration

กรณีพิเศษ: ใช้ Namespace แยกจาก Application ID (AGP 7.3+)

android {
    namespace 'com.company.library'      // สำหรับ R class, BuildConfig
    defaultConfig {
        applicationId 'com.company.app'  // สำหรับ Play Store, Install
    }
}

ปกติจะเหมือนกัน แต่ Library Module อาจแยกได้

Troubleshooting

  • R class not found: Clean Project → Rebuild → File → Invalidate Caches / Restart
  • Manifest merger failed: ตรวจสอบ authorities, permission names ที่มี package name เก่า
  • Firebase/Google Services error: ดาวน์โหลด google-services.json ใหม่จาก Console
  • Play Store rejects: applicationId ต้องไม่ซ้ำกับแอปอื่น และไม่สามารถเปลี่ยนได้หลังอัปโหลดครั้งแรก

Best Practices

  • ใช้ Reverse Domain Name: com.companyname.appname
  • ตัวพิมพ์เล็กทั้งหมด, ไม่มีช่องว่าง, ไม่ขึ้นต้นด้วยตัวเลข
  • ตัดสินใจ Package Name ตั้งแต่ต้นโปรเจกต์ (ยากต่อการเปลี่ยนหลัง Release)
  • เก็บ Package Name ไว้ใน `gradle.properties` เพื่ออ้างอิงง่าย

สรุป

ใช้ **Refactor → Rename → Rename package** ใน Project View แล้วแก้ `applicationId` ใน build.gradle ให้ตรงกัน → Clean/Rebuild → ตรวจสอบ Manifest และ google-services.json