Fabricated Overlay API ของ Android 12 นำธีมแบบไม่มีรูทกลับมา

click fraud protection

จำได้ไหมว่า Android 8 ทำให้การธีมอุปกรณ์ของคุณเป็นเรื่องง่ายได้อย่างไร จำได้ไหมว่ามันสนุกแค่ไหน? มันกลับมาแล้วใน Android 12 พร้อมการเปลี่ยนแปลง

มั่นคงเต็มที่ แอนดรอยด์ 12 การเปิดตัวอยู่ใกล้แค่เอื้อม และ Google ก็มีเช่นกัน โพสต์ซอร์สโค้ด ไปยัง repo AOSP มี มีอะไรใหม่ใน Android 12รวมถึงการเพิ่มทรัพยากรซ้อนทับที่เรียกว่า Fabricated Overlays API มีความหมายว่าอย่างไรเพื่อช่วยให้ระบบจัดการการเปลี่ยนแปลงแบบไดนามิกที่ใช้ วัสดุคุณ และโมเนต์อาจกลายเป็นสิ่งที่ใหญ่กว่ามาก อย่างน้อยก็จนกว่า Android 13 จะวางจำหน่าย

พื้นหลัง

Mishaal Rahman ค้นพบ API ใหม่นี้และแจ้งให้ฉันทราบ เขาใช้คำสั่งเชลล์เพื่อทดสอบค่าทรัพยากรต่างๆ ใน ​​Android 12 โดยไม่ต้องใช้ เพื่อรวบรวม APK ที่ซ้อนทับด้วยตนเอง และเขาคิดว่ามันอาจทำให้มีแนวคิดเกี่ยวกับแอปที่น่าสนใจสำหรับอุปกรณ์ที่รูทแล้ว เมื่อเขาแจ้งเรื่องนี้ให้ฉันทราบ ฉันใช้ซอร์สโค้ดสำหรับ Android 12 เยอะมาก และสังเกตเห็นบางสิ่งที่ฉันคิดว่าน่าสนใจทีเดียว ฉันทดสอบสิ่งที่ฉันพบ และตอนนี้ก็มาถึงแล้ว ปรากฎว่า Fabricated Overlay API สามารถใช้เพื่อนำธีมที่ไม่มีรูทกลับมาได้ ก่อนที่ฉันจะพูดถึงสิ่งที่เกิดขึ้นที่นี่ ฉันจะอธิบายว่าจริงๆ แล้ว Fabricated Overlays คืออะไร

Fabricated Overlays คืออะไร?

Fabricated Overlays เป็นฟีเจอร์ใหม่ที่เปิดตัวใน Android 12 คล้ายกับ Runtime Resource Overlays (RRO) แบบคลาสสิกที่ Android มีมาสองสามปีแล้ว ทั้ง RRO และ Fabricated Overlays สามารถแทนที่ทรัพยากรที่แตกต่างกันสำหรับแอปพลิเคชันที่แตกต่างกันได้ คุณสามารถเปลี่ยนบูลีนจากเท็จเป็นจริง (หรือกลับกัน) กำหนดขนาดที่คุณต้องการให้แถบสถานะเป็นและอื่นๆ

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

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

ในทางกลับกัน Fabricated Overlays สามารถแทนที่ค่าที่สามารถแสดงเป็นจำนวนเต็มได้เท่านั้น ซึ่งรวมถึงจำนวนเต็ม (duh) มิติ บูลีน และสี คุณไม่สามารถใช้สิ่งเหล่านี้เพื่อแทนที่ทรัพยากรข้อมูลดิบ โครงร่าง สตริง หรืออาร์เรย์ อย่างน้อยก็ไม่ใช่เรื่องง่าย นี่เป็นข้อจำกัดโดยพลการใน API: ยอมรับเฉพาะค่าจำนวนเต็มและหมวดหมู่ทรัพยากรตามที่กำหนดโดยคลาส TypedValue TypedValue ทำ สนับสนุน สตริงและประเภททรัพยากรอื่นๆ แต่ใช้เพื่ออ้างอิงทรัพยากรเท่านั้น ไม่ได้เก็บข้อมูลจริงไว้

อย่างไรก็ตาม ข้อจำกัดเหล่านั้นไม่ได้ใหญ่เกินไปสำหรับวัตถุประสงค์ของ Fabricated Overlays: Material You และเอฟเฟกต์ทางการเงิน Fabricated Overlays ช่วยให้ระบบสามารถสร้างและใช้สีและมิติซ้อนทับได้ทันที โดยไม่ต้องรีบูตหรือรอให้ APK รวบรวม

โดยปกติแล้ว นี่จะเป็นเพียง API ที่ยอดเยี่ยมสำหรับผู้ที่มีอุปกรณ์ที่รูทแล้วเพื่อใช้ประโยชน์ เว้นแต่ว่าจะมีช่องโหว่ที่ผู้ผลิตสร้างขึ้น (เช่นเดียวกับที่ Synergy ใช้ประโยชน์จากอุปกรณ์ Samsung) การซ้อนทับสามารถติดตั้งได้โดยบุคคลที่สามที่มีสิทธิ์การเข้าถึงรูทเท่านั้น นั่นคือส่วนที่ดีที่สุด – Google ลืมแก้ไขช่องโหว่ใน Android 12

การซ้อนทับแบบประดิษฐ์โดยไม่มีรูท

Android 8 เปิดตัว Overlay Manager Service (หรือ OMS) API ใหม่และผู้คนก็ค้นพบอย่างรวดเร็วว่า APK ที่ซ้อนทับสามารถติดตั้งเป็นแอปปกติแล้วเปิดใช้งานโดยใช้ ADB น่าเศร้าที่ Google ได้แพตช์สิ่งนี้ใน Android 9 และตั้งแต่นั้นมา เฉพาะโอเวอร์เลย์ที่เซ็นชื่อด้วยคีย์เดียวกันกับระบบเท่านั้นที่สามารถติดตั้งแบบไดนามิกได้

ปรากฎว่า Fabricated Overlays ของ Android 12 มีช่องโหว่ที่ชวนให้นึกถึงช่องโหว่ที่มีอยู่ใน Android 8: ไม่จำเป็นต้องเข้าถึงรูทหรือสิทธิ์ระดับลายเซ็น พวกเขาแค่ต้องการบางสิ่งที่ทำงานในฐานะผู้ใช้เชลล์ (เช่น ADB) เพื่อลงทะเบียน

ค่อนข้างชัดเจนว่า Google ตั้งใจให้ Fabricated Overlays สามารถเข้าถึงได้เฉพาะผู้ใช้รูทและระบบเท่านั้น มีการนำคำสั่ง ADB ไปใช้ในการสร้างและจะไม่ทำงานหากผู้ใช้ที่เรียกใช้งานไม่ใช่รูท ช่องโหว่คือการตรวจสอบจะอยู่ในคำสั่งเท่านั้น ไม่ใช่ API จริง ซึ่งหมายความว่าเราสามารถใช้ประโยชน์จากมันได้โดยทำงานเพียงเล็กน้อย

ADB บนอุปกรณ์

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

Android 11 คือสิ่งที่นำ ADB ไร้สายมาสู่โทรศัพท์และแท็บเล็ตอย่างเป็นทางการ มันซับซ้อนกว่า ADB ไร้สายแบบคลาสสิกเล็กน้อยด้วยรหัสการจับคู่และการตรวจสอบสิทธิ์ แต่ผู้ใช้สามารถเปิดใช้งานได้อย่างสมบูรณ์บนอุปกรณ์ ตราบใดที่อุปกรณ์เชื่อมต่อกับ WiFi นั่นหมายความว่าคุณสามารถเชื่อมต่อกับอุปกรณ์ของคุณผ่าน ADB จากอุปกรณ์ของคุณได้ และสิ่งที่คุณต้องมีคือ WiFi เท่านั้น การเชื่อมต่อ.

การใช้ Elevated API ในแอป

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

จะเกิดอะไรขึ้นถ้า API ไม่มีการใช้งานเชลล์ หรือการใช้งานเชลล์ขาดสิ่งที่คุณต้องการ? หากคุณใช้อุปกรณ์ที่รูทแล้ว คุณสามารถใช้สิ่งที่ต้องการได้ libRootJava. libRootJava ช่วยให้คุณโต้ตอบกับ API เฟรมเวิร์ก Android ราวกับว่าแอปของคุณทำงานในฐานะผู้ใช้รูท ซึ่งสะดวกกว่าและเร็วกว่าการรันคำสั่งเชลล์มาก เนื่องจากเป็นภาษาเดียวกันทั้งหมด และคุณไม่ต้องกังวลกับการแยกวิเคราะห์สตริงด้วยตนเอง มันมีข้อจำกัดอยู่บ้าง แต่โดยส่วนใหญ่แล้ว มันใช้งานได้ดี

libRootJava API ค่อนข้างยืดหยุ่น คุณสามารถปรับใช้ให้ทำงานในฐานะผู้ใช้เชลล์แทนรูทได้ โชคดีที่คุณไม่จำเป็นต้องทำ เพราะมีคนทำไปแล้ว และมันถูกเรียกว่า ชิซูกุ. Shizuku เกือบจะเหมือนกับการผสมผสานระหว่าง Magisk Manager และ libRootJava

แอป Shizuku Manager จะแนะนำคุณตลอดการตั้งค่ากระบวนการที่ทำงานในฐานะผู้ใช้เชลล์ที่ Shizuku สามารถเข้าถึงได้ ไลบรารี Shizuku API สามารถนำไปใช้ในแอปเพื่อให้เข้าถึง API ของระบบได้เสมือนว่าเป็นผู้ใช้เชลล์ เป็นกระบวนการแบบรวมศูนย์มากกว่า libRootJava เนื่องจากต้องตั้งค่า Shizuku เพียงครั้งเดียวก่อนที่ทุกแอปที่ใช้ไลบรารี Shizuku API จะสามารถใช้งานได้ หากคุณสนใจวิธีการทำงานของ Shizuku และวิธีผสานรวมเข้ากับแอปของคุณ ฉันมีคำแนะนำสำหรับสิ่งนั้นที่นี่.

Shizuku และภาพซ้อนทับแบบประดิษฐ์

ถึงตอนนี้คุณคงเห็นแล้วว่าเหตุการณ์นี้จะเป็นอย่างไร เราสามารถใช้บริการเช่น Shizuku เพื่อเข้าถึง Fabricated Overlays API ในฐานะผู้ใช้เชลล์ และเราสามารถใช้ฟีเจอร์ ADB ไร้สายของ Android 11 เพื่อเข้าถึงระดับเชลล์ได้บนอุปกรณ์ทั้งหมด เนื่องจากข้อจำกัดผู้ใช้รูทจะปรากฏเฉพาะในคำสั่งเชลล์ Fabricated Overlays ไม่ใช่ API จริง การรันในฐานะผู้ใช้เชลล์ก็เพียงพอที่จะใช้งานได้โดยตรง

การใช้งาน: ไลบรารีและแอปตัวอย่าง

แล้วรายละเอียดการดำเนินการล่ะ? ฉันก็เข้าใจเรื่องนั้นเหมือนกัน

ในการเตรียมการนี้ผมได้ทำทั้ง ไลบรารี่และแอปตัวอย่างที่ใช้งานได้เต็มรูปแบบ โดยใช้ไลบรารีนั้น

ห้องสมุดมีไว้เพื่อความสะดวกเป็นส่วนใหญ่ มันล้อม API ของระบบที่ซ่อนอยู่บางส่วน และให้วิธีการที่สะดวกในการจัดการสิทธิ์ Shizuku แก่คุณ นอกจากนี้ยังมีความยืดหยุ่น ดังนั้นคุณจึงสามารถจัดเตรียมอินสแตนซ์ IOverlayManager API ของคุณเองได้ หากคุณมีวิธีอื่นในการเรียกคืน

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

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

นี่คือภาพหน้าจอบางส่วนจากแอปนี้ ซึ่งต้องขอบคุณ Mishaal Rahman

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

บทสรุป

Fabricated Overlays API ใหม่ใน Android 12 ค่อนข้างดี ส่วนใหญ่เป็นเพราะไม่จำเป็นต้องรูท อาจไม่ซับซ้อนเท่ากับ RRO APK เต็มรูปแบบ แต่ให้ความยืดหยุ่นมากกว่ามากโดยไม่ต้องเข้าถึงรูท

ลองใช้แอป Fabricate Overlay บน GitHub

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

แน่นอนว่าคุณไม่ควรคาดหวังว่าฟีเจอร์นี้จะคงอยู่ได้นาน Google ไม่ชอบการซ้อนทับของบุคคลที่สาม ดังนั้นสิ่งนี้เกือบจะได้รับการแก้ไขอย่างแน่นอนเมื่อ Android 13 เปิดตัว ในระหว่างนี้ จงสนุกไปกับมันในขณะที่มันคงอยู่!