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 ที่เปิดใช้รันไทม์ (SDK ซ้ำ): SDK ที่สร้างขึ้นเพื่อให้เรียกใช้ในรันไทม์ของ SDK ได้ สภาพแวดล้อมและสื่อสารกับแอปผ่านการสื่อสารระหว่างกระบวนการ (IPC)
- SDK ที่รับรู้รันไทม์ (RA SDK): SDK ที่ไม่ได้เปิดใช้รันไทม์และลิงก์กับแอป
แบบคงที่ ซึ่งอาจรวมถึงโค้ด SDK ที่มีอยู่ ตลอดจนโค้ดใหม่เพื่อเรียกใช้ SDK ที่เปิดใช้รันไทม์
- ซึ่งในบางครั้งเรียกว่า SDK แบบคงที่หรือ SDK แบบคงที่
- Shim: ไลบรารี Jetpack ที่ช่วยให้การสื่อสารแบบนามธรรม กระบวนการหรือการสื่อสารระหว่างกระบวนการ (IPC) และคงสภาพเดิม อินเทอร์เฟซ SDK ของแอป
สถาปัตยกรรมรันไทม์ของ SDK
รันไทม์ของ SDK ใช้ ประเภทclient-server ของรุ่น
ความแตกต่างหลักๆ ก็คือ "ลูกค้า" (app) และ "เซิร์ฟเวอร์" (runtime-enabled SDK) ทำงานบนอุปกรณ์เดียวกัน และการสื่อสารนี้จะเกิดขึ้นในกระบวนการต่างๆ
เราได้สร้างสิ่งต่อไปนี้ขึ้นเพื่อช่วยรับมือกับความท้าทายเหล่านี้ ไลบรารีและเครื่องมือของ Jetpack ที่ช่วยลดความซับซ้อน การผสานรวม SDK ของแอปภายในรันไทม์ของ SDK:
- ไลบรารี Shim: ไลบรารี Wrapper (หรือ shim) ช่วยสร้างนามธรรม การสื่อสารระหว่างกระบวนการหรือการสื่อสารระหว่างกระบวนการ (IPC) และ ช่วยรักษาอินเทอร์เฟซ SDK ของแอปเดิมไว้
- ไลบรารี Backcompat: ไลบรารีนี้จัดการความเข้ากันได้แบบย้อนหลัง ซึ่งทำให้ ตรวจสอบว่า SDK ใช้งานร่วมกันได้ไม่ว่ารันไทม์ของ SDK จะ พร้อมใช้งานหรือไม่
- ไลบรารี UI: เรายังมีไลบรารีสำหรับจัดการการนำเสนอระยะไกล เช่น การดึงข้อมูล UI จาก SDK ที่เปิดใช้รันไทม์ หรือการปรับขนาดและรีเลย์ ครั้ง
![ภาพรวมทางสถาปัตยกรรมของรันไทม์ของ SDK](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/private-advertising/sdk-runtime/developer-guide/key-concepts/SDKRT_overview_diagram.png?authuser=7&hl=th)
การเปลี่ยนแปลงขั้นตอนการติดตั้ง
เมื่อคุณสร้าง SDK ที่เปิดใช้รันไทม์ใน Android Studio หรือเครื่องมืออื่นๆ คุณจะ สร้าง Android SDK Bundle (ASB) ซึ่งเป็นรูปแบบการเผยแพร่สำหรับ SDK ที่เปิดใช้รันไทม์
bundletool ประมวลผล ASB เพื่อสร้าง APK สำหรับ SDK ที่เปิดใช้รันไทม์ โดย APK ที่แยกต่างหากนี้ประกอบด้วย มีโค้ด SDK แต่ไม่มีโค้ดของแอป
ไฟล์ Manifest ของแอปประกาศทรัพยากร Dependency ของชื่อ SDK ที่เปิดใช้รันไทม์ และเวอร์ชัน และ Dependency นี้มีการแก้ไขโดยแอปโปรแกรมติดตั้ง
เมื่อโปรแกรมติดตั้งได้มาจาก SDK APK การติดตั้งจะเริ่มต้นด้วย การติดตั้ง SDK APK หลังจากอัปโหลดสำเร็จ ก็ลองติดตั้ง APK ของแอปได้เลย
ขั้นตอนจะแตกต่างออกไปหากติดตั้งแอปใน Android 13 และเวอร์ชันก่อนหน้า และใน อุปกรณ์ที่ไม่รองรับรันไทม์ของ SDK ในสถานการณ์นี้ Store จะติดตั้ง APK เดียวที่มีทั้ง SDK ที่เปิดใช้รันไทม์และโค้ดของแอป อ่านส่วนการเผยแพร่เพื่อดูข้อมูลเพิ่มเติม
เมื่อใดก็ตามที่แอปใช้ SDK นี้ในเวอร์ชันที่ใช้งานจริง App Store จะสร้าง SDK APK ที่ถูกต้องจาก ASB นี้และติดตั้ง
ความเข้ากันได้แบบย้อนหลัง
เมื่อมีการเปิดตัวรันไทม์ของ SDK ใน Android 14 เราจึงจําเป็นต้องรองรับ เวอร์ชันก่อนหน้าโดยไม่ต้องเพิ่มค่าใช้จ่ายสำหรับ SDK หรือนักพัฒนาแอป
เราได้เปิดตัวไลบรารี Jetpack ที่เรียกใช้ SDK ที่เปิดใช้รันไทม์ได้อย่างราบรื่น ไม่ว่าอุปกรณ์จะรองรับรันไทม์ของ SDK หรือไม่ก็ตาม เพื่อรองรับความเข้ากันได้แบบย้อนหลังใน Android 13 และเวอร์ชันก่อนหน้า
การปฏิบัติตามคู่มือนี้ทำให้ SDK ที่เปิดใช้รันไทม์ใช้งานได้แบบย้อนหลังโดยค่าเริ่มต้น คุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม
เราจะไฮไลต์การดำเนินการที่เชื่อมโยงกับความเข้ากันได้แบบย้อนหลังในขั้นตอนที่เกี่ยวข้อง แต่โดยทั่วไปแล้ว คุณควรตรวจสอบว่าได้ประกาศทรัพยากร Dependency ที่ถูกต้องและกำลังใช้คลาส *Compat
ทุกครั้งที่เกี่ยวข้อง
ย้ายข้อมูล SDK ที่มีอยู่
หากคุณมี SDK อยู่แล้วและต้องการย้ายข้อมูลไปยังรันไทม์ เพื่อเปลี่ยนโครงสร้างภายในโค้ดเบสทั้งหมดในครั้งเดียว แต่คุณเลือกย้ายข้อมูลตรรกะ SDK ที่มีอยู่อย่างต่อเนื่องไปยัง SDK ใหม่ที่เปิดใช้รันไทม์ได้
เราขอแนะนำให้ใช้ 3 ระยะต่อไปนี้เพื่อย้ายข้อมูล SDK ที่มีอยู่ไปยัง SDK เวลาทำงาน:
- การสร้างระยะเวลาการเปลี่ยนผ่าน SDK ที่เปิดใช้รันไทม์ รวมถึง SDK ที่รับรู้ถึงรันไทม์ซึ่งมีความหนาเหมือนกัน ซึ่งจะช่วยให้คุณย้ายข้อมูลตรรกะทางธุรกิจจาก SDK ที่มีอยู่ไปทีละส่วนได้ และให้แพลตฟอร์มการทดสอบสำหรับการทดสอบ A/B
- ย้ายตรรกะทางธุรกิจของ SDK ที่มีอยู่ทั้งหมดไปยังสถานะที่คงที่เป็นเวลานานด้วย SDK ที่รับรู้รันไทม์บางส่วนซึ่งคู่กัน เพื่อช่วยให้การย้ายข้อมูลแอปง่ายขึ้น
- รองรับแอปที่สนใจด้วยการย้ายข้อมูลอย่างเต็มรูปแบบเพื่อใช้ SDK ที่เปิดใช้รันไทม์โดยตรงโดยไม่ต้องใช้ SDK ที่รับรู้รันไทม์ได้บาง
ระยะที่ 1 - ระยะเวลาการเปลี่ยนผ่าน: SDK ที่รับรู้รันไทม์แบบ Thick
คุณเริ่มต้นด้วยการเลือกเก็บตรรกะทางธุรกิจบางส่วนไว้ใน SDK แบบรับรู้รันไทม์ได้ เราเรียกสิ่งนี้ว่า SDK ที่รับรู้รันไทม์แบบหนาหรือ Wrapper ในแอป
วิธีนี้ช่วยให้คุณรักษาความสามารถของ SDK บางส่วนหรือทั้งหมดไว้ในส่วน ไลบรารีแอปแบบคงที่ ควบคู่ไปกับ SDK ที่เปิดใช้รันไทม์ที่สร้างขึ้นใหม่
วิธีนี้ช่วยให้คุณค่อยๆ ย้ายข้อมูล Use Case ไปยังรันไทม์ที่เปิดใช้รันไทม์ได้ SDK และทดสอบ SDK ที่เปิดใช้รันไทม์กับ SDK ที่มีอยู่
ในระยะนี้ นักพัฒนาแอปไม่จำเป็นต้องเปลี่ยนแปลงสิ่งใด ใช้ SDK ของคุณ เนื่องจากเป็นไลบรารีแอปแบบคงที่ (SDK ที่รับรู้ถึงรันไทม์) ของคุณซึ่งจะทำงาน ที่จำเป็นต่อการใช้ SDK ที่รับรู้รันไทม์
![แอปนี้จะเรียก SDK แบบคงที่ที่รับรู้ถึงรันไทม์ภายในตัวเอง ซึ่งสามารถมีเลเยอร์การแปลเพื่อเรียกใช้ SDK ที่เปิดใช้รันไทม์ รวมถึงตรรกะทางธุรกิจอื่นๆ ภายใน SDK นั้น](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/private-advertising/sdk-runtime/developer-guide/key-concepts/thick_wrapper.png?authuser=7&hl=th)
ระยะที่ 2 - คงที่: SDK ที่รับรู้รันไทม์แบบ Thin
ไม่เหมือนกับ SDK ที่รู้จักรันไทม์แบบหนา, Wrapper แบบ Thin หรือ SDK ที่รับรู้รันไทม์แบบบาง (RA_SDK บาง) มีเฉพาะการแปล API และการเรียก SDK ที่เปิดใช้รันไทม์ ใน SDK ไลบรารีที่ลิงก์แบบคงที่ของคุณ
ในขั้นตอนนี้ คุณควรได้ย้ายข้อมูลโค้ด SDK ทั้งหมดออกจาก SDK ของไลบรารีแอปแบบคงที่และอยู่ใน SDK ที่เปิดใช้รันไทม์
นักพัฒนาแอปไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ ตั้งแต่ระยะที่ 1 เนื่องจากในแอปของคุณ Thin ที่รับรู้ถึงรันไทม์จะจัดการการเรียกใช้ SDK ที่เปิดใช้รันไทม์ภายใน SDK รันไทม์
![แอปเรียกใช้ SDK แบบคงที่ภายในตัวซึ่งมีเฉพาะเลเยอร์การแปล](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/private-advertising/sdk-runtime/developer-guide/key-concepts/thin_wrapper.png?authuser=7&hl=th)
ระยะที่ 3 - การย้ายข้อมูลเต็มรูปแบบ
ในระยะสุดท้ายนี้ คุณได้ย้ายข้อมูลความสามารถทั้งหมดของ SDK ไปยัง SDK ที่เปิดใช้รันไทม์ และนำไลบรารีแบบคงที่ทั้งหมดออกจากแอป
ในขั้นตอนนี้ ไคลเอ็นต์แอปของคุณไม่จำเป็นต้องรวมไลบรารีของคุณใน ในบิลด์ของตน แต่แสดงเฉพาะทรัพยากร Dependency ของ SDK ในไฟล์ Manifest และรวม การเรียก SDK ในโค้ดของแอป
ระบบกำหนดเส้นทางการเรียก SDK ไปยังรันไทม์ของ SDK โดยที่ ระบบจะโหลด SDK ที่เปิดใช้รันไทม์โดยอัตโนมัติ
![สถาปัตยกรรมของระยะการย้ายข้อมูลโดยสมบูรณ์ ซึ่งโค้ดโฆษณาของแอปจะเรียกใช้ SDK ที่เปิดใช้รันไทม์โดยตรง](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/private-advertising/sdk-runtime/developer-guide/key-concepts/no_wwrapper.png?authuser=7&hl=th)