ลดขนาด Instant App

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

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

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

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

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

แยกออกเป็นโมดูลฟีเจอร์หลายโมดูล

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

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

แนวทางปฏิบัติแนะนำ

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

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

อัปเดตทรัพยากรของแอป

แอปบางแอป โดยเฉพาะแอปที่มีประวัติฐานของโค้ดยาวนาน จะมีทรัพยากรที่ไบนารีของแอปไม่ได้ใช้อีกต่อไป เมื่อมองหาวิธีทำให้โมดูลของแอปมีขนาดเล็กลง ให้พิจารณาแหล่งที่มาทั่วไปของโค้ดที่ไม่จำเป็นต่อไปนี้

ลดขนาดไฟล์ของรูปภาพ

คุณสามารถลดขนาดรวมของ Drawable ของแอปได้อย่างมากโดยใช้ รูปแบบไฟล์ WebP แทน PNG Google Play Instant รองรับ WebP อย่างสมบูรณ์ รวมถึงความโปร่งใสและการบีบอัดแบบไม่สูญเสียข้อมูล คุณภาพของรูปภาพจึงยังคงเหมือนเดิม

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

นำภาษาที่ไม่ได้ใช้ออก

หากแอปของคุณรองรับหลายภาษา ให้ลดทรัพยากรที่แปลเป็นภาษาท้องถิ่นให้ได้มากที่สุด ขั้นตอนนี้มีประโยชน์อย่างยิ่งหากคุณใช้ไลบรารี "App Compat" เช่น android.support.v7.appcompat ไลบรารีนี้มีข้อความในหลายภาษา ซึ่งแอปของคุณอาจไม่รองรับบางภาษา

ดูข้อมูลเพิ่มเติมได้ที่วิธีนำทรัพยากรทางเลือกที่ไม่ได้ใช้ออก โดยเฉพาะภาษาที่ไม่ได้ใช้

นำไฟล์พิเศษออก

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

  1. กด Control+Alt+Shift+I (Command+Alt+Shift+I ใน Mac OS)
  2. ในกล่องโต้ตอบที่ปรากฏขึ้น ให้พิมพ์ "unused resources"
  3. เลือกตัวเลือกทรัพยากรที่ไม่ได้ใช้ เพื่อเริ่มกระบวนการตรวจสอบการใช้ทรัพยากร

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

นำไลบรารีที่ไม่ได้ใช้ออก

เมื่อแอปมีขอบเขตกว้างขึ้น แอปอาจมีทรัพยากรที่ต้องใช้จำนวนมากอย่างน่าประหลาดใจ โดยเฉพาะทรัพยากรที่ต้องใช้ประเภทใดประเภทหนึ่งต่อไปนี้

  • ไลบรารีแบบเนทีฟ: ไลบรารีที่มีโค้ดแบบเนทีฟที่ Instant App ไม่เคยเรียกใช้
  • ทรัพยากรที่ต้องใช้แบบชั่วคราว: ไลบรารีที่ไลบรารีที่นำเข้าของแอปต้องใช้

Android Studio มีเครื่องมือที่มีประโยชน์หลายอย่างสำหรับการระบุทรัพยากรที่ต้องใช้ที่ไม่จำเป็นในโปรเจ็กต์ของแอป

ไลบรารีภายนอก

มุมมองโปรเจ็กต์ ของ Android Studio มีส่วนไลบรารีภายนอก

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

ตัววิเคราะห์ APK

คุณสามารถใช้เครื่องมือตัววิเคราะห์ APK เพื่อเปรียบเทียบ บิลด์ต่างๆ รวมถึงบิลด์ของ Instant App

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

<feature_module>/build.gradle

ดึงดูด

dependencies {
    implementation('some-important-but-large-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Kotlin

dependencies {
    implementation('some-important-but-large-library') {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับการลดขนาดการนำเข้ารวมของทรัพยากร Dependency ที่แอปต้องใช้ได้ที่คู่มือการจัดการทรัพยากร Dependency ของ Gradle

ใช้การส่งชิ้นงานผ่านระบบคลาวด์

หากต้องการลดขนาดลงอีก คุณอาจต้องใช้การส่งชิ้นงานผ่านระบบคลาวด์