เหตุใดการอัปเดตแอปบางครั้งจึงทำให้ธีมของชั้นล่างเสียหาย

click fraud protection

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

เป็นเรื่องปกติ: ผู้ใช้ใช้ธีม Substratum กับโทรศัพท์ของตน จากนั้นจึงอัปเดต Slack, WhatsApp, Instagram หรือแอปอื่นๆ จาก Play Store ในภายหลัง ทันใดนั้นพวกเขาก็ไม่สามารถเปิดแอปเหล่านั้นได้จนกว่าการซ้อนทับของธีมจะถูกปิดใช้งาน ผู้ใช้ Substratum รุ่นใหม่จำนวนมากได้แสดงความคิดเห็นเกี่ยวกับปัญหานี้นับตั้งแต่เปิดตัว ธีม Substratum ไร้รูทสำหรับ Android Oreo.

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

ปัญหามักเป็นผลมาจากการรวมกันของปัจจัย: แอพของบุคคลที่สามที่มีโค้ดไม่ดี, การอัปเดตบ่อยครั้ง แอพดังกล่าวทำให้เกิดปัญหามากกว่าที่จะแก้ไขและข้อจำกัดใน Overlay Manager Service (OMS) กรอบ. ฉันได้พูดคุยกับธีมที่มีชื่อเสียงสองสามคนที่ให้ข้อมูลเชิงลึกอันมีค่าเกี่ยวกับปัญหานี้:

เจเรมี เบ็ค, ใครเป็นคนทำ คลื่นความถี่ ธีมของชั้นล่างและ เดวิด วิลสัน ของ การปกครอง ชื่อเสียง.

จากข้อมูลของผู้แข็งแกร่งของ Substratum เหล่านี้ ผู้กระทำความผิดที่เลวร้ายที่สุดบางส่วนในขอบเขตของแอปที่มีโค้ดไม่ดีนั้นอยู่ในกลุ่มที่ได้รับความนิยมมากที่สุด WhatsApp, Instagram, Slack, Facebook และ Telegram เป็นตัวอย่างที่ธีม Substratum เหล่านี้อ้างถึงเราเมื่อเล่าถึงปัญหานี้ ในความเป็นจริง David กล่าวว่าพวกเขาเป็นตัวอย่างของแอปที่ "น่ากลัว น่าขยะแขยง และน่ารังเกียจ" ซึ่งแสดงให้เห็นสีสันสดใส นักพัฒนาธีม Substratum ต้องเผชิญกับความหงุดหงิดเมื่อทำให้ผู้ใช้มีความสุขในขณะที่พวกเขาพยายามรวมประสบการณ์ Android เข้าด้วยกัน ธีมทั่วไป

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

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

นี่คือวิธีที่เดวิดอธิบาย:

สิ่งที่ "นักพัฒนา" ไร้สาระเหล่านี้ (ฉันใช้คำนั้นอย่างหลวมๆ เมื่ออธิบายตัวตลกเหล่านี้) ทำคือพวกเขาใช้รายการต่างๆ ใน เลย์เอาต์ xmls ซึ่งทำให้ยากสำหรับเราในการจัดธีมแอปให้ถูกต้องโดยไม่ต้องเพิ่ม xml เลย์เอาต์เหล่านั้นลงในโอเวอร์เลย์ของเรา

เพื่อเป็นตัวอย่าง ลองใช้ WhatsApp และดูรายการใน /res/values/colors.xml ซึ่งก็คือ #ffffffff

พวกเขาใช้ @color/white สำหรับทั้งสีข้อความและสีพื้นหลังทั่วทั้งแอป ซึ่งหมายความว่าหากธีมต้องการเปลี่ยนสี "สีขาว" เป็นสีเข้มเพื่อทำให้พื้นหลังเป็นสีเข้ม ก็จะทำให้ข้อความจำนวนมากมืดเช่นกัน ซึ่งแย่มาก

เพื่อแก้ไขข้อบกพร่องดังกล่าว ธีมจะเพิ่มเค้าโครง xmls ลงในการซ้อนทับและเปลี่ยนสีข้อความหรือสีพื้นหลัง หรือทั้งสองอย่างจาก เป็นเหมือน android: background="@color/white" ไปจนถึง android: background="@*android: color/wallpaper_dark" เพื่อทำให้พื้นหลังมืด

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

ตอนนี้ปัญหาอยู่ที่... หากธีมสร้างการซ้อนทับเพื่อให้เหมาะกับ WhatsApp 2.17.323 และ WhatsApp อัปเดตเป็น 2.17.351 (ตัวอย่าง) ดังนั้นหาก WhatsApp ในภูมิปัญญาอันไม่มีที่สิ้นสุดของพวกเขาตัดสินใจที่จะเปลี่ยนแปลง ชื่อของสตริงที่อยู่ในโอเวอร์เลย์ที่สร้างขึ้นสำหรับ 2.17.323 และสตริงนั้นไม่มีอยู่อีกต่อไปใน 2.17.351 ดังนั้นการซ้อนทับจะไม่สำเร็จ สร้าง.

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

นี่เป็นเพียงตัวอย่างหนึ่งของเกมแมวจับหนูในการอัปเดตแอปและธีมสลับกันที่ธีม Substratum เผชิญอยู่ เมื่อธีมสนับสนุนแอปของบุคคลที่สามจำนวนมาก พวกเขาจะต้องเพิ่มจำนวนเกมนี้หลายครั้งในการอัปเดตธีมแต่ละครั้ง เป็นวงจรที่ไม่มีวันสิ้นสุดในการติดตามแอปที่รองรับหลายรายการ และหวังว่าผู้ใช้ที่หงุดหงิดจะไม่ให้คะแนนธีมของตนไม่ดีระหว่างการอัปเดต เนื่องจาก Slack (ตัวอย่างอื่น) ผลักดันการอัปเดตสามครั้งไปยังแอปของพวกเขาในช่วงสองสัปดาห์นับตั้งแต่การอัปเดตครั้งล่าสุดของการสนับสนุน Slack ที่พวกเขาชื่นชอบ ธีม.

คุณสามารถทำอะไรเกี่ยวกับเรื่องนี้?

โดยส่วนตัวแล้วฉันมักจะรอ อัปเดตเป็นธีมโปรดของฉันก่อนที่ฉันจะอัปเดตแอปใดๆ ที่ฉันใช้ ที่มีธีม อย่างไรก็ตาม ไม่ใช่ทุกคนที่จะมีเวลาผลักดันการอัปเดตอย่างต่อเนื่องเพื่อให้ทันกับการอัปเดตแอปเหล่านี้ ดังนั้นระยะทางของคุณอาจแตกต่างกันไป หากคุณทนใช้แอปในสถานะที่ไม่มีธีมไม่ได้จริงๆ การรอสักสองสามชั่วโมงหรือหลายวันก็ไม่ใช่เรื่องใหญ่สำหรับคุณ หากนี่เป็นตัวทำลายข้อตกลง คุณอาจต้องการเฉพาะแอปพลิเคชันระบบธีมที่ไม่น่าจะเปลี่ยนแปลงในเร็วๆ นี้ (เช่น SystemUI หรือ Android Framework)

โปรดทราบว่าปัญหาไม่ได้เกิดจาก Substratum เองหรือธีมของ Substratum และโปรดอย่าตำหนิผู้พัฒนาธีมเมื่อมีสิ่งผิดปกติเกิดขึ้น นี่คือสาเหตุที่เอ็นจิ้นธีมบนเวอร์ชัน OEM ของ Android เช่น EMUI, Samsung Experience หรือ LG UX ไม่อนุญาตให้คุณสร้างธีมมากกว่าแอประบบและ UI ของระบบเอง หากต้องการเพลิดเพลินกับระดับการปรับแต่งที่ Substratum นำเสนอ ข้อเสียคือคุณอาจต้องรอสักครู่จึงจะเพลิดเพลินกับการอัปเดตแอปล่าสุด