ย้ายข้อมูล Instant App เพื่อรองรับ Android App Bundle

คำเตือน: Google Play Instant จะไม่มีให้บริการอีกต่อไป ตั้งแต่เดือนธันวาคม 2025 เป็นต้นไป คุณจะไม่สามารถเผยแพร่ Instant Apps ผ่าน Google Play ได้ และ Instant API ของบริการ Google Play ทั้งหมดจะหยุดทำงาน Play จะไม่แสดงแอปด่วนต่อผู้ใช้โดยใช้กลไกใดๆ อีกต่อไป

เราทำการเปลี่ยนแปลงนี้ตามความคิดเห็นของนักพัฒนาแอปและการลงทุนอย่างต่อเนื่อง เพื่อปรับปรุงระบบนิเวศตั้งแต่เปิดตัว Google Play Instant

เราขอแนะนำให้นักพัฒนาแอปนำผู้ใช้ไปยัง แอปหรือเกมปกติของตนโดยใช้ Deep Link เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังเส้นทางหรือฟีเจอร์ที่เฉพาะเจาะจงเมื่อเกี่ยวข้อง เพื่อเพิ่มประสิทธิภาพในการเพิ่มผู้ใช้อย่างต่อเนื่อง

หากยังคงใช้ปลั๊กอิน Android Gradle ฟีเจอร์ที่เลิกใช้งานแล้ว (com.android.feature) สำหรับโมดูล Android Instant App คุณจะต้อง ย้ายข้อมูลไปใช้ปลั๊กอินแอปฐาน (com.android.application) และ ปลั๊กอินฟีเจอร์แบบไดนามิก (com.android.dynamic-feature)

ในปลั๊กอิน Android Gradle 3.3.0 ขึ้นไป ปลั๊กอินแอปฐานจะรองรับ ประสบการณ์การใช้งานด่วน กล่าวคือ หากโมดูลแอปฐานเป็นไปตาม ข้อกำหนดในการเป็นประสบการณ์ทันที คุณจะได้รับประโยชน์โดยอัตโนมัติ จากนั้นคุณจะใส่ฟีเจอร์เพิ่มเติมที่ผู้ใช้ดาวน์โหลดได้ตามต้องการเป็น ประสบการณ์ทันทีโดยใช้ปลั๊กอินฟีเจอร์แบบไดนามิกได้ การตั้งค่านี้ช่วยให้รองรับทั้งประสบการณ์การใช้งานแอปที่ติดตั้งและแอป Instant ได้ง่ายขึ้นจากโปรเจ็กต์เดียว และช่วยให้คุณได้รับประโยชน์จากการเผยแพร่ด้วย Android App Bundle

ตารางต่อไปนี้อธิบายปลั๊กอินที่คุณจะย้ายข้อมูลได้ดีขึ้น

คำอธิบายโมดูล ปลั๊กอินเดิม ปลั๊กอินปัจจุบัน
โมดูลที่มีโค้ด ทรัพยากร และฟังก์ชันพื้นฐาน สำหรับประสบการณ์การใช้งานแอปที่ติดตั้งหรือแอป Instant com.android.feature (พร้อม baseFeature = true) com.android.application

หมายเหตุ: โมดูลนี้มีข้อมูลทั้งหมดในไฟล์ Manifest และ ข้อมูลการลงนามที่จำเป็นต่อการสร้างและแพ็กเกจแอปเป็น Android App Bundle หรือ APK

ฟีเจอร์เพิ่มเติมแบบแยกส่วนที่ผู้ใช้ดาวน์โหลดได้ตามต้องการ com.android.feature com.android.dynamic-feature (มี dist:instant="true" และ dist:onDemand="false" ในไฟล์ Manifest ของโมดูล)
โค้ดและทรัพยากรสำหรับฟีเจอร์ที่ใช้ได้เฉพาะในแอปเวอร์ชันที่ติดตั้ง เท่านั้น com.android.application com.android.dynamic-feature (พร้อม dist:instant="false" และ dist:onDemand="false" ในไฟล์ Manifest ของโมดูล)

หน้านี้จะแสดงวิธีย้ายข้อมูลโปรเจ็กต์ Instant App ที่มีอยู่เพื่อสร้าง Android App Bundle ที่เปิดใช้ Instant นอกจากนี้ยังอธิบายวิธีสร้าง ทดสอบ และ เผยแพร่ Android App Bundle ที่เปิดใช้ค้นหาทันใจด้วย

หากคุณกำลังสร้างประสบการณ์แบบใช้งานได้ทันทีใหม่สำหรับแอป โปรดอ่านสร้างโมดูลฟีเจอร์ที่เปิดใช้ Instant แทน

ทําความเข้าใจการเปลี่ยนแปลง

เมื่อย้ายข้อมูลโปรเจ็กต์ไปใช้ปลั๊กอินฟีเจอร์แบบไดนามิกแทน Android App Bundle จะเป็นวิธีใหม่ในการสร้างและเผยแพร่ แอปของคุณ ซึ่งช่วยให้การจัดจำหน่าย APK ที่เพิ่มประสิทธิภาพแก่ผู้ใช้ ง่ายขึ้นอย่างมาก

App Bundle ช่วยให้การจัดจำหน่ายง่ายขึ้นด้วยการแพ็กเกจโค้ดที่คอมไพล์แล้วและทรัพยากรทั้งหมดของแอปเพื่ออัปโหลด แต่จะเลื่อนการสร้างและลงนาม APK ไปยัง Google Play จากนั้นโมเดลการนำส่งแอปแบบใหม่ของ Google Play จะใช้ App Bundle เพื่อสร้างและนำส่ง APK ที่เพิ่มประสิทธิภาพสำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละราย เพื่อให้ผู้ใช้ดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จำเป็นในการเรียกใช้แอปของคุณ คุณจึงไม่ต้องสร้าง ทำ Signing และจัดการ APK หลายรายการเพื่อรองรับอุปกรณ์ต่างๆ อีกต่อไป และผู้ใช้จะได้รับการดาวน์โหลดที่มีขนาดเล็กลงและเพิ่มประสิทธิภาพมากขึ้น

เมื่อใช้ปลั๊กอินฟีเจอร์ที่เลิกใช้งานแล้ว การสร้างแอป Instant ต้อง สร้างโมดูลฟีเจอร์พื้นฐานซึ่งมีโค้ดและทรัพยากรที่ใช้ร่วมกัน สำหรับโมดูลทั้งหมด รวมถึงโมดูลแอป Instant ส่วนโค้ดที่เหลือ รวมอยู่ในโมดูลฟีเจอร์ที่ไม่ใช่โมดูลฐานหลายโมดูล ซึ่งมีจุดแรกเข้า สำหรับประสบการณ์แบบใช้งานได้ทันที สำหรับแอปเวอร์ชันที่ติดตั้งแล้ว โปรเจ็กต์ของคุณอาจมีโมดูลแอปแยกต่างหาก ซึ่งมีโค้ดและ กิจกรรมที่จำเป็นสำหรับแอปที่ติดตั้งเท่านั้น

เมื่อย้ายข้อมูลแอปให้รองรับ Android App Bundle โมดูลแอปจะ กลับมามีบทบาทเป็นโมดูลฐาน และคุณจะจัดระเบียบประสบการณ์การใช้งานเพิ่มเติมที่ติดตั้งหรือ แบบใช้งานได้ทันทีเป็นโมดูลฟีเจอร์ กล่าวคือ ตอนนี้โปรเจ็กต์ของคุณจะคล้ายกับโปรเจ็กต์แอปมาตรฐานมากขึ้น โดยมีโมดูลพื้นฐานที่เปิดใช้ Instant App และสามารถรวมประสบการณ์แบบใช้งานได้ทันทีแบบแยกโมดูลเพิ่มเติมได้

หากต้องการย้ายข้อมูลโปรเจ็กต์ Instant App ที่มีอยู่และใช้รูปแบบการจัดจำหน่ายที่เพิ่มประสิทธิภาพมากขึ้นของ Android App Bundle ให้ทำตามขั้นตอนที่อธิบายไว้ในส่วน ด้านล่าง

แปลงโมดูลฟีเจอร์ฐานเป็นโมดูลแอป

ก่อนอื่นคุณต้องแก้ไขไฟล์ build.gradle ของโมดูลฟีเจอร์ฐานก่อน ที่จะแปลงเป็นโมดูลแอปหลัก โดยทำดังนี้

  1. ลบbaseFeature trueบรรทัด
  2. นำทรัพยากร Dependency ที่ใช้การกำหนดค่าทรัพยากร Dependency feature หรือ application ออก

    Groovy

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
  3. ย้าย applicationId พร้อมกับการกำหนดค่าสคริปต์บิลด์อื่นๆ ที่คุณ คาดว่าจะอยู่ในโมดูลแอปฐานจากโมดูล com.android.application ปัจจุบันไปยังโมดูล com.android.feature ตัวอย่างบางส่วนแสดงอยู่ด้านล่าง สำหรับขั้นตอนนี้ การคัดลอกและวางบล็อกของ build.gradle จากโมดูลแอปก่อนหน้าลงในไฟล์ build.gradle ของโมดูลแอปใหม่ อาจง่ายกว่า ทั้งนี้ขึ้นอยู่กับbuild.gradleการตั้งค่า androidเฉพาะของคุณ อย่างไรก็ตาม คุณควรระมัดระวังเมื่อดำเนินการดังกล่าว

    Groovy

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
  4. ทําเครื่องหมายโมดูลฟีเจอร์เป็นโมดูลที่เปิดใช้ทันทีโดยเพิ่มแท็กการกระจายชุดที่เหมาะสมลงในไฟล์ Manifest ดังที่แสดงด้านล่าง

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. แปลงโมดูลฟีเจอร์เป็นโมดูลแอปฐานโดยเปลี่ยนประเภทปลั๊กอินเป็น com.android.application ดังนี้

    Groovy

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }

แปลงโมดูลแอปเดิมเป็นโมดูลฟีเจอร์ที่ติดตั้ง

หากไม่มีโค้ดหรือทรัพยากรในโมดูลแอปเก่า คุณก็สามารถ ลบโมดูลนั้นได้เลย เนื่องจากขั้นตอนที่คุณทำในส่วนก่อนหน้าได้แปลงโมดูลฟีเจอร์ เป็นโมดูลแอปฐานของแอปแล้ว

อย่างไรก็ตาม หากคุณมีโค้ดและทรัพยากรในโมดูลแอปเดิมที่แสดงถึง ฟังก์ชันการทำงานที่คุณต้องการให้ผู้ใช้ใช้งานได้เมื่อติดตั้งแอป ให้ทำตามขั้นตอนในส่วนนี้เพื่อแปลงโมดูลแอปเป็นโมดูลฟีเจอร์

การสร้างฟีเจอร์โมดูลเกี่ยวข้องกับการเปลี่ยนประเภทปลั๊กอินจาก com.android.application เป็น com.android.dynamic-feature พร้อมกับการเปลี่ยนแปลงbuild.gradleอื่นๆ อีก 2-3 รายการ ดังนี้

  1. เปลี่ยนประเภทปลั๊กอินจาก com.android.application เป็น com.android.dynamic-feature

    Groovy

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
  2. ตามที่อธิบายไว้ในส่วนก่อนหน้า ให้ตรวจสอบว่าคุณได้ย้ายการกำหนดค่าบิลด์ที่ปลั๊กอิน com.android.application ต้องการไปยังโมดูลแอปฐานแล้ว เช่น กฎ applicationId หรือ proguardFiles

  3. เปลี่ยนชื่อโมดูลเป็น "installed_feature" หรือชื่ออื่นที่คล้ายกันดังนี้

    1. เปิดแผงโปรเจ็กต์โดยเลือกดู > หน้าต่างเครื่องมือ > โปรเจ็กต์จากแถบเมนู
    2. คลิกขวาที่โมดูลฟีเจอร์ แล้วเลือกจัดระเบียบใหม่ > เปลี่ยนชื่อ
    3. ในกล่องโต้ตอบที่ปรากฏขึ้น ให้เลือกเปลี่ยนชื่อโมดูล แล้วคลิกตกลง
    4. ป้อนชื่อใหม่สำหรับโมดูล แล้วคลิกตกลง
  4. เช่นเดียวกับขั้นตอนที่ 3 ให้เปลี่ยนชื่อโมดูลแอปใหม่ที่คุณสร้างในส่วนก่อนหน้าเป็นชื่อที่สื่อความหมาย เช่น "app"

  5. เพิ่มการอ้างอิงการติดตั้งใช้งานในโมดูล "app" ในไฟล์ build.gradle ของฟีเจอร์ โมดูล ดังที่แสดงด้านล่าง

    Groovy

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
  6. เพิ่มฟีเจอร์ลงในไฟล์ build.gradle ของโมดูลแอปใหม่

    Groovy

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
  7. ในไฟล์ Manifest ของโมดูลฟีเจอร์ ให้ทําเครื่องหมายโมดูลฟีเจอร์เป็น โมดูลที่ติดตั้งได้โดยการเพิ่มแท็กการกระจาย App Bundle ที่เหมาะสมลงใน ไฟล์ Manifest

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

แปลงโมดูลฟีเจอร์อื่นๆ เป็นโมดูลฟีเจอร์ที่พร้อมใช้งาน Instant

หากแยกฟังก์ชันการทำงานเพิ่มเติมของแอปออกเป็นฟีเจอร์หลายโมดูล คุณจะต้องทำตามขั้นตอนในส่วนนี้เพื่อแปลงโมดูลเหล่านั้นเป็นฟีเจอร์โมดูลที่เปิดใช้ทันที

สำหรับโมดูลฟีเจอร์ที่เหลือแต่ละโมดูลในโปรเจ็กต์ ให้ทำดังนี้เพื่อแปลง เป็นฟีเจอร์ที่เปิดใช้ทันที

  1. เปลี่ยนประเภทปลั๊กอินในไฟล์ build.gradle เป็น com.android.dynamic-feature ดังที่แสดงด้านล่าง

    Groovy

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
  2. ทำเครื่องหมายโมดูลฟีเจอร์แต่ละโมดูลว่าเปิดใช้ทันทีได้โดยเพิ่มข้อมูลต่อไปนี้ ลงในไฟล์ Manifest

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. เพิ่มโมดูลฟีเจอร์ลงในไฟล์ build.gradle ของโมดูลแอปพลิเคชันใหม่ ซึ่งเป็นที่ที่คุณเพิ่ม installed_feature ลงในรายการโมดูลฟีเจอร์

    Groovy

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }

สร้าง ทดสอบ และเผยแพร่ App Bundle ใหม่ที่เปิดใช้ Instant

หลังจากทำตามขั้นตอนในหน้านี้แล้ว โปรเจ็กต์จะสร้างอาร์ติแฟกต์เดียว ซึ่งก็คือ Android App Bundle ที่คุณใช้เผยแพร่ทั้งเวอร์ชันที่ติดตั้งและเวอร์ชันแบบใช้งานได้ทันทีของแอปไปยัง Google Play Console และเปิดตัวแยกกันสำหรับแทร็กแบบใช้งานได้ทันทีและแทร็กที่ติดตั้งได้ นอกจากนี้ App Bundle ยังช่วยให้คุณได้รับประโยชน์จากการนำส่ง APK ที่เพิ่มประสิทธิภาพสำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละราย ดังนั้นผู้ใช้จะดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จำเป็นต่อการเรียกใช้แอปของคุณเท่านั้น นั่นหมายความว่าคุณไม่ต้องสร้าง ลงนาม และจัดการ APK หลายรายการเพื่อรองรับอุปกรณ์ต่างๆ อีกต่อไป และผู้ใช้จะได้รับการดาวน์โหลดที่มีขนาดเล็กลงและเพิ่มประสิทธิภาพมากขึ้น

หากต้องการเริ่มสร้างและทดสอบ App Bundle ที่เปิดใช้ Instant ให้ไปที่ สร้าง App Bundle