| Key concepts | Set up your development environment | Build an RE SDK | Consume the RE SDK | Testing, and building for distribution |
หัวข้อสำคัญ
ส่วนนี้จะอธิบายสถาปัตยกรรมรันไทม์ของ SDK, วิธีติดตั้ง SDK ที่เปิดใช้รันไทม์, ความเข้ากันได้แบบย้อนหลัง และวิธีย้ายข้อมูล SDK ที่มีอยู่ไปยังรันไทม์ของ SDK
อภิธานศัพท์
- SDK ที่เปิดใช้รันไทม์ (RE SDK): SDK ที่สร้างขึ้นเพื่อเรียกใช้ในสภาพแวดล้อมรันไทม์ของ SDK และสื่อสารกับแอปผ่านการสื่อสารระหว่างกระบวนการ (IPC)
- SDK ที่รับรู้รันไทม์ (RA SDK): SDK ที่ไม่ได้เปิดใช้รันไทม์ ซึ่งลิงก์กับแอปแบบคงที่ ซึ่งอาจมีโค้ด SDK ที่มีอยู่ รวมถึงโค้ดใหม่เพื่อเรียกใช้ SDK ที่เปิดใช้รันไทม์
- ซึ่งบางครั้งเรียกว่า linked แบบคงที่หรือ SDK แบบคงที่
- Shim: ไลบรารี Jetpack ที่ช่วยสรุปการสื่อสารในกระบวนการต่างๆ หรือการสื่อสารระหว่างกระบวนการ (IPC) และรักษาอินเทอร์เฟซ SDK ของแอปเดียวกัน
สถาปัตยกรรมรันไทม์ของ SDK
รันไทม์ของ SDK ใช้โมเดลประเภทไคลเอ็นต์-เซิร์ฟเวอร์
ความแตกต่างหลักๆ คือ "ไคลเอ็นต์" (แอป) และ "เซิร์ฟเวอร์" (SDK ที่เปิดใช้รันไทม์) จะทำงานในอุปกรณ์เดียวกัน และการสื่อสารนี้จะเกิดขึ้นในกระบวนการต่างๆ
เราจึงสร้างไลบรารีและเครื่องมือ Jetpack ต่อไปนี้เพื่อช่วยลดความซับซ้อนของการผสานรวมแอปกับ SDK ภายใน SDK Runtime
- ไลบรารี Shim: ไลบรารี Wrapper (หรือ Shim) ช่วยสรุป การสื่อสารในกระบวนการต่างๆ หรือการสื่อสารระหว่างกระบวนการ (IPC) นอกจากนี้ยัง ช่วยรักษาอินเทอร์เฟซแอป-SDK ให้เหมือนเดิม
- ไลบรารี Backcompat: ไลบรารีนี้จัดการความเข้ากันได้แบบย้อนหลัง เพื่อให้มั่นใจว่า SDK ของคุณจะเข้ากันได้ไม่ว่า SDK Runtime จะพร้อมใช้งานหรือไม่ก็ตาม
- ไลบรารี UI: เรายังมีไลบรารีเพื่อจัดการการนำเสนอจากระยะไกล เช่น การดึงข้อมูล UI จาก SDK ที่เปิดใช้รันไทม์ หรือการปรับขนาดและ การจัดวางมุมมองใหม่
การเปลี่ยนแปลงขั้นตอนการติดตั้ง
เมื่อสร้าง SDK ที่เปิดใช้รันไทม์ใน Android Studio หรือเครื่องมืออื่นๆ คุณจะสร้าง Android SDK Bundle (ASB) ซึ่งเป็นรูปแบบการเผยแพร่สำหรับ SDK ที่เปิดใช้รันไทม์
bundletool จะประมวลผล ASB เพื่อสร้าง APK สำหรับ SDK ที่เปิดใช้รันไทม์ ซึ่ง APK ที่แยกต่างหากนี้จะมีโค้ด SDK แต่ไม่มีโค้ดแอป
ไฟล์ Manifest ของแอปจะประกาศทรัพยากร Dependency ในชื่อและเวอร์ชันของ SDK ที่เปิดใช้รันไทม์ และแอปโปรแกรมติดตั้งจะแก้ไขทรัพยากร Dependency นี้
เมื่อโปรแกรมติดตั้งจัดหา APK ของ SDK แล้ว การติดตั้งจะเริ่มต้นด้วย การติดตั้ง APK ของ SDK เมื่อสำเร็จแล้ว ระบบจะติดตั้ง APK ของแอป
ขั้นตอนจะแตกต่างออกไปหากติดตั้งแอปใน Android 13 และเวอร์ชันก่อนหน้า รวมถึงใน อุปกรณ์ที่ไม่รองรับรันไทม์ของ SDK ในสถานการณ์นี้ ร้านค้าจะติดตั้ง APK เดียวที่มีทั้ง SDK ที่เปิดใช้รันไทม์และโค้ดของแอป ดูข้อมูลเพิ่มเติมได้ที่ส่วนการจัดจำหน่าย
เมื่อใดก็ตามที่แอปใช้ SDK นี้ในเวอร์ชันที่ใช้งานจริง App Store จะสร้าง APK ของ SDK ที่ถูกต้องจาก ASB นี้และติดตั้ง
ความเข้ากันได้แบบย้อนหลัง
เนื่องจากมีการเปิดตัวรันไทม์ของ SDK ใน Android 14 เราจึงต้องรองรับ เวอร์ชันก่อนหน้าโดยไม่เพิ่มค่าใช้จ่ายสำหรับนักพัฒนา SDK หรือแอป
เราได้เปิดตัวไลบรารี Jetpack ที่สามารถเรียกใช้ SDK ที่เปิดใช้รันไทม์ได้อย่างราบรื่นโดยไม่คำนึงถึงการรองรับรันไทม์ของ SDK ในอุปกรณ์ เพื่อจัดการความเข้ากันได้แบบย้อนหลังใน Android 13 และเวอร์ชันก่อนหน้า
การทำตามคู่มือนี้จะทำให้ SDK ที่เปิดใช้รันไทม์ของคุณเข้ากันได้แบบย้อนหลังโดยค่าเริ่มต้น และคุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม
เราจะไฮไลต์การดำเนินการที่เชื่อมต่อกับการทำงานร่วมกันแบบย้อนหลังในขั้นตอนที่เกี่ยวข้อง แต่โดยทั่วไปแล้ว คุณควรตรวจสอบว่าได้ประกาศการขึ้นต่อกันที่ถูกต้อง และใช้คลาส *Compat เมื่อใดก็ตามที่เกี่ยวข้อง
ย้ายข้อมูล SDK ที่มีอยู่
หากมี SDK ที่คุณต้องการย้ายข้อมูลไปยังรันไทม์ คุณไม่จำเป็นต้องรีแฟกเตอร์โค้ดเบสทั้งหมดในคราวเดียว แต่สามารถเลือกย้ายตรรกะ SDK ที่มีอยู่ทีละรายการไปยัง SDK ใหม่ที่เปิดใช้รันไทม์ได้
เราขอแนะนำ 3 ระยะต่อไปนี้ในการย้ายข้อมูล SDK ที่มีอยู่ไปยัง SDK Runtime
- สร้าง SDK ที่เปิดใช้รันไทม์ระยะเปลี่ยนผ่านพร้อมกับ SDK แบบหนาที่รับรู้รันไทม์ซึ่งเป็นคู่กัน ซึ่งจะช่วยให้คุณย้ายตรรกะทางธุรกิจจาก SDK ที่มีอยู่ได้ทีละน้อย และมีแพลตฟอร์มการทดสอบสำหรับการทดสอบ A/B
- ย้ายตรรกะทางธุรกิจของ SDK ที่มีอยู่ทั้งหมดไปยังสถานะที่เสถียรพร้อมกับ SDK ที่ทำงานรันไทม์แบบบางที่เทียบเท่ากันเพื่ออำนวยความสะดวกในการย้ายข้อมูลแอป
- สนับสนุนแอปที่สนใจด้วยการย้ายข้อมูลทั้งหมดเพื่อใช้ SDK ที่เปิดใช้รันไทม์โดยตรงโดยไม่ต้องใช้ SDK ที่รับรู้รันไทม์แบบบาง
ระยะที่ 1 - ระยะเปลี่ยนผ่าน: SDK ที่รับรู้รันไทม์แบบหนา
คุณเริ่มต้นได้โดยเลือกที่จะเก็บตรรกะทางธุรกิจบางอย่างไว้ใน SDK ที่รับรู้รันไทม์ เราเรียก SDK นี้ว่า SDK ที่รับรู้รันไทม์แบบหนาหรือ Wrapper ในแอป
แนวทางนี้ช่วยให้คุณเก็บความสามารถทั้งหมดหรือบางส่วนของ SDK ไว้ใน ไลบรารีแอปแบบคงที่ พร้อมกับ SDK ที่เปิดใช้รันไทม์ที่สร้างขึ้นใหม่
ซึ่งจะช่วยให้คุณค่อยๆ ย้ายข้อมูล Use Case ไปยัง SDK ที่เปิดใช้รันไทม์ และทดสอบ SDK ที่เปิดใช้รันไทม์กับ SDK ที่มีอยู่ได้
ในระยะนี้ นักพัฒนาแอปไม่จำเป็นต้องเปลี่ยนแปลงวิธีการใช้ SDK ของคุณ เนื่องจากไลบรารีแอปแบบคงที่ (SDK ที่รับรู้รันไทม์) ของคุณจะทำงานที่จำเป็นต่อการใช้ SDK ที่รับรู้รันไทม์
ระยะที่ 2 - สถานะคงที่: SDK ที่รับรู้รันไทม์แบบบาง
ซึ่งแตกต่างจาก SDK ที่รับรู้ถึงรันไทม์แบบหนา, Wrapper แบบบาง หรือ SDK ที่รับรู้ถึงรันไทม์แบบบาง (RA_SDK แบบบาง) ซึ่งมีเพียงการแปล API และโค้ดการเรียก SDK ที่เปิดใช้รันไทม์ ใน SDK ของไลบรารีที่ลิงก์แบบคงที่
ในขั้นตอนนี้ คุณควรย้ายโค้ด SDK ทั้งหมดออกจาก SDK ไลบรารีแอปแบบคงที่และไปยัง SDK ที่เปิดใช้รันไทม์
นักพัฒนาแอปไม่ต้องทำการเปลี่ยนแปลงใดๆ จากเฟส 1 เนื่องจาก SDK ที่รับรู้รันไทม์แบบบางในแอปจะจัดการการเรียกไปยัง SDK ที่เปิดใช้รันไทม์ภายในรันไทม์ของ SDK
ระยะที่ 3 - การย้ายข้อมูลทั้งหมด
ในระยะสุดท้ายนี้ คุณได้ย้ายความสามารถทั้งหมดของ SDK ไปยัง SDK ที่เปิดใช้รันไทม์ และนำไลบรารีแบบคงที่ทั้งหมดออกจากแอปแล้ว
ณ จุดนี้ ไคลเอ็นต์แอปของคุณไม่จำเป็นต้องรวมไลบรารีไว้ใน บิลด์อีกต่อไป แต่เพียงแค่แสดงรายการทรัพยากร Dependency ของ SDK ในไฟล์ Manifest และรวม การเรียก SDK ไว้ในโค้ดแอป
ระบบจะกำหนดเส้นทางการเรียก SDK ผ่านรันไทม์ของ SDK ซึ่งจะโหลด SDK ที่เปิดใช้รันไทม์โดยอัตโนมัติ
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมการพัฒนา