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

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

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

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

คำอธิบายโมดูล ปลั๊กอินเก่า ปลั๊กอินปัจจุบัน
โมดูลที่มีโค้ด ทรัพยากร และฟังก์ชันพื้นฐาน สำหรับประสบการณ์แบบติดตั้งหรือ Instant App 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

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

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

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

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

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

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

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

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

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

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

    ดึงดูด

    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 ซึ่งอาจทำให้คัดลอกและวาง android ได้ง่ายกว่า การบล็อก build.gradle จากโมดูลแอปก่อนหน้าไปยังแอปใหม่ build.gradle ของโมดูล แต่คุณควรใช้ความระมัดระวังเมื่อจะทำ ดังนั้น

    ดึงดูด

    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:

    ดึงดูด

    // 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 และอีก 2-3 รายการ การเปลี่ยนแปลงอื่นๆ ของ build.gradle ดังต่อไปนี้

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

    ดึงดูด

    // 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 เปลี่ยนชื่อโมดูลแอปใหม่ที่สร้างไว้ก่อนหน้านี้ ไปเป็น "แอป"

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

    ดึงดูด

    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 ของโมดูลแอปใหม่

    ดึงดูด

    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 ของโมดูลฟีเจอร์ ให้ทำเครื่องหมายโมดูลฟีเจอร์เป็น โมดูลที่ติดตั้งได้โดยการเพิ่มแท็กการแจกจ่ายแพ็กเกจที่เหมาะสมลงในส่วน ไฟล์ 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

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

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

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

    ดึงดูด

    // 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. ทำเครื่องหมายโมดูลฟีเจอร์แต่ละรายการเป็นเปิดใช้ Instant ด้วยการเพิ่มสิ่งต่อไปนี้ ไปยังไฟล์ 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 ลงในรายการโมดูลฟีเจอร์

    ดึงดูด

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

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