ผู้ใช้ Android โดยเฉลี่ยอาจเลิกสนใจ "ปัญหาการกระจายตัว" ของ Android มานานแล้ว แต่ปัญหายังคงหลอกหลอนนักพัฒนาอยู่
การกระจายตัวเป็นปัญหาที่ถกเถียงกันใน Android นับตั้งแต่มีการประกาศระบบปฏิบัติการมือถือ
นอกเหนือจากการเป็นกระบองสำหรับโทรลล์เพื่อใช้ในสงครามเปลวไฟออนไลน์แล้ว ความหลากหลายที่มาพร้อมกับการแยกส่วนยังถูกมองว่าเป็น ผลบวกสุทธิต่อผู้บริโภค ของอุปกรณ์ Android ท้ายที่สุดแล้ว เราได้รับอิสระอย่างมากในการเลือกประเภทของอุปกรณ์ที่มีซอฟต์แวร์ประเภทที่เราต้องการ ซึ่งเป็นเรื่องยากสำหรับผู้บริโภคทั่วไปที่จะสนใจเกี่ยวกับการกระจายตัวของข้อมูล การแสดงภาพอุปกรณ์ Android ที่หลากหลายอย่างไม่น่าเชื่อทำให้เกิดภาพโมเสคที่สวยงามของการเป็นตัวแทนที่หลากหลายของ Android
แต่การกระจายตัวของฮาร์ดแวร์และซอฟต์แวร์ไม่ได้ช่วยให้นักพัฒนาซอฟต์แวร์มีความสุข ในความเป็นจริงค่อนข้างตรงกันข้าม การพัฒนาแอปโดยใช้การกำหนดค่าฮาร์ดแวร์และซอฟต์แวร์ที่แตกต่างกันมากมายสามารถพิสูจน์ได้ว่าเป็นปัญหาสำคัญเมื่อทำการดีบัก OEM สามารถทำการเปลี่ยนแปลงที่สำคัญหรือเปลี่ยนแปลงเล็กน้อยซึ่งจำเป็นต้องคำนึงถึงเมื่อพัฒนาแอป แต่ไม่มีวิธีที่ง่ายสำหรับนักพัฒนาแต่ละรายเพื่อให้แน่ใจว่าแอปของพวกเขาจะทำงานในระดับสากล ในขณะที่ผู้บริโภคโดยเฉลี่ยลืมไปนานแล้วเกี่ยวกับการอภิปรายเรื่องการกระจายตัว แต่ปัญหายังคงหลอกหลอน Android นักพัฒนาแอปและดูเหมือนจะไม่มีอะไรต้องทำอะไรนอกจากดูดมันและจัดการกับข้อผิดพลาดที่เกิดขึ้น ปรากฏ.
สถานะขออภัยของการกระจายตัว
OEM รายหนึ่งได้รับความเกลียดชังเป็นส่วนใหญ่จากความปวดหัวที่เกิดขึ้นขณะพัฒนาแอป นั่นคือ Samsung นักพัฒนาโวยวายเกี่ยวกับ Samsung มาหลายปีแล้ว บางคนถึงกับเขียนบทความที่น่ารังเกียจเช่น "มีสถานที่พิเศษสำหรับ Samsung ใน Android Hell" ซึ่งอธิบายถึงจุดบกพร่องที่น่าหงุดหงิดอย่างยิ่งที่เกิดขึ้น อุปกรณ์ Samsung และไลบรารีแอพที่รองรับ. ฉันอยากจะดึงความสนใจไปที่หนึ่งย่อหน้าโดยเฉพาะจากคำโวยวายของ Mr. Ambri ซึ่งสรุปได้ดีมากว่าเหตุใดนักพัฒนาจึงยังคงสนใจเรื่องการแตกแฟรกเมนต์:
หากคุณเป็นนักพัฒนา Android ความเกลียดชังอุปกรณ์ Samsung ของคุณอาจไม่มีขอบเขต เป็นมากกว่าผู้ใช้ทั่วไปที่มีความหมายเหมือนกันกับ Samsung Touchwiz โง่ๆ และ โบลต์แวร์มากเกินไปคุณดูถูก Samsung เพราะคุณไม่มีทางเลือก เพราะของซัมซุง ส่วนแบ่งการตลาดขนาดใหญ่คุณไม่สามารถเลือกที่จะไม่รองรับอุปกรณ์ Samsung ได้ และนั่นคือสิ่งที่เจ็บปวดที่สุด ความจริงที่ว่าตัวเลือกนี้ถูกพรากไปจากคุณ!
นี่ไม่ใช่คำพูดโวยวายจากการดำรงอยู่ของ Android ในสมัยก่อน - โพสต์นี้เผยแพร่เมื่อกลางเดือนธันวาคมปีที่แล้ว ฉันจะแจ้งล่วงหน้าและแจ้งว่าฉันไม่แน่ใจว่าปัญหานี้ได้รับการแก้ไขอย่างเป็นทางการแล้วหรือยัง Ambri ได้จัดเตรียมการแก้ไขในโพสต์ของเขาสำหรับใครก็ตามที่สะดุดกับคำโวยวายของเขาผ่านการค้นหาของ Google บั๊ก สิ่งที่คุณต้องทำคือใช้ โปรการ์ด ด้วยโค้ดบรรทัดเดียวต่อไปนี้:
# Samsung ruining all nice things-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;}
มันก็ไม่ได้แย่ขนาดนั้นใช่ไหมล่ะ? ปัญหาคือว่าการแก้ไขนี้ถูกดึงออกจาก Stack Overflow อย่าเข้าใจฉันผิด Stack Overflow เป็นเว็บไซต์ที่ยอดเยี่ยม แต่ไม่ใช่แหล่งที่เหมาะสำหรับการค้นหาการแก้ไขสำหรับแอปของคุณ การค้นหาบางอย่างบน Stack Overflow มักจะเกี่ยวข้องกับการเจาะลึกผ่านลิงก์ต่างๆ หลังจากค้นหาด้วย Google แบบลองผิดลองถูกหลายครั้ง บางครั้งคุณจะพบว่ามีผู้ใช้รายอื่นพูดถึงจุดบกพร่องแบบเดียวกับที่คุณพบ แต่ไม่มีวิธีแก้ไข หรือที่น่าหงุดหงิดยิ่งกว่านั้นคือเวลาที่คุณพบกระทู้ที่ผู้โพสต์ต้นฉบับอ้างสิทธิ์ พบวิธีแก้ไขแล้ว แต่พวกเขาก็ละทิ้งกระทู้ของตนไปนานแล้วโดยไม่ได้แนะนำวิธีแก้ไขแก่ผู้อื่น ปัญหา.
ตัวอย่างของปัญหาการกระจายตัวที่ละเอียดอ่อน
ฉันไม่ใช่นักพัฒนาซอฟต์แวร์ด้วยตัวเอง แต่ฉันคุ้นเคยกับความสามารถของ Android มากพอหลังจากแก้ไขใน Tasker มาหลายปีจนฉันได้เริ่มเขียนโปรแกรมหลอกเพื่อแก้ไขปัญหาที่ฉันเผชิญ และเมื่อฉันไม่สามารถเข้าใจบางสิ่งบางอย่างได้ ฉันจะ Google ค้นหามัน เช่นเดียวกับคนอื่นๆ ขณะที่ฉันกำลังเขียนบทความเรื่องที่แล้วเกี่ยวกับ ค้นหาแอพการตั้งค่าในโทรศัพท์ของคุณเพื่อค้นหากิจกรรมที่ซ่อนอยู่ฉันเจอข้อผิดพลาดที่ค่อนข้างแปลกซึ่งฉันไม่สามารถอธิบายได้ จุดบกพร่องเฉพาะในอุปกรณ์ Huawei
เมื่อใดก็ตามที่ฉันพยายามเริ่มกิจกรรมบางอย่าง (เช่น เมนู "การทดสอบ" ที่มีสถิติการใช้งานแอป) ภายในแอปการตั้งค่า ฉันมักจะพบกับข้อผิดพลาดในการอนุญาตเสมอ โดยเฉพาะอย่างยิ่งแอปที่ฉันใช้เริ่มกิจกรรมขาดการอนุญาต huawei.android.permission HW_SIGNATURE_OR_SYSTEM ไม่มีอุปกรณ์อื่นใดที่ฉันทดสอบต้องได้รับสิทธิ์พิเศษในการเปิดกิจกรรมการตั้งค่าเหล่านี้ มีเพียงโทรศัพท์ที่ใช้ Android เวอร์ชันของ Huawei (EMUI) บทวิเคราะห์ของ com.android.settings เปิดเผยว่ากิจกรรมบางอย่างภายในแอปการตั้งค่าอยู่ภายใต้ระดับการป้องกันที่จำเป็นต้องมี ลายเซ็นหรือการอนุญาตของระบบ.
น่าเสียดายสำหรับฉัน นี่หมายความว่าเฉพาะแอปที่ติดตั้งภายใต้ /system หรือแอปที่ลงนามด้วยสิ่งเดียวกัน ลายเซ็นเนื่องจากแอปการตั้งค่าจะสามารถเปิดกิจกรรมเหล่านี้ได้โดยใช้วิธีที่ฉันเป็น กำลังพยายาม เมื่อฉันค้นหาคำตอบในข้อผิดพลาดนี้ใน Google ฉัน (คุณคงเดาได้) ก็เจอ เธรดล้นกอง. นักพัฒนาซอฟต์แวร์ที่โพสต์ปัญหาของเขาพบปัญหาเดียวกันกับที่ฉันทำ (แม้ว่าเขาจะอยู่ในขั้นตอนการพัฒนาแอปจริง ๆ ก็ตาม) ปัญหาของเขาเกิดขึ้นเมื่อเขาพยายามเรียกใช้โค้ดต่อไปนี้:
<span >Intentspan><span > mainIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_MAINspan><span >,span><span >nullspan><span >);span><span >mainIntentspan><span >.span><span >addCategoryspan><span >(span><span >Intentspan><span >.span><span >CATEGORY_LAUNCHERspan><span >);span><span >Intentspan><span > pickIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_PICK_ACTIVITYspan><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_TITLEspan><span >,span><span >"Pick App to Play in"span><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_INTENTspan><span >,span><span > mainIntentspan><span >);span><span >thisspan><span >.span><span >startActivityForResultspan><span >(span><span >pickIntentspan><span >,span><span > REQUEST_PICK_APPLICATIONspan><span >);span>
เมื่อพิจารณาจากสตริงในเจตนาและหน้าเว็บของนักพัฒนา เขาน่าจะพยายามอนุญาตให้ผู้ใช้เลือกแอปของบุคคลที่สามเพื่อเล่นสื่อบางอย่าง การแก้ไขนี้จัดทำโดยนักพัฒนาที่มีประสบการณ์ คอมมอนส์แวร์ค่อนข้างง่าย: การใช้งาน เจตนา. สร้างตัวเลือก แทน ACTION_PICK_ACTIVITY. อย่างไรก็ตาม, ทำไม เราควรต้องใช้การแก้ไขนี้หรือไม่? ทำไม Huawei ต้องได้รับอนุญาตนี้ตั้งแต่แรกหรือไม่? ทำไม เราจำเป็นต้องค้นหาคำตอบบน StackOverflow โดยใช้การค้นหาโดย Google โดยเฉพาะหรือไม่
ความขัดแย้งแห่งทางเลือก
เพื่อหาคำตอบว่า CommonsWare ยื่นรายงานข้อผิดพลาด บนตัวติดตามบั๊กของ Android โดยขอให้ Google ตรวจสอบปัญหานี้ โดยเฉพาะอย่างยิ่ง นักพัฒนาขอให้ Google ระงับข้อกำหนดการอนุญาตที่ไม่มีเอกสารในการยับยั้งแอปของบุคคลที่สามไม่ให้เข้าถึง ACTION_PICK_ACTIVITY โดยเขียนไว้ในข้อกำหนดเหล่านี้ใน ซีทีเอสHuawei จะถูกบังคับให้ปฏิบัติตามการเปลี่ยนแปลงเหล่านี้
พูดตามตรง ข้อผิดพลาดนี้ไม่ใช่เรื่องใหญ่อะไร แม้ว่าจะไม่มีแอปอื่นใดที่ฉันลองใช้ (เช่น Tasker) ก็สามารถหลีกเลี่ยงการอนุญาตนี้ได้ ข้อกำหนดและเปิดตัวกิจกรรมบางอย่างภายในแอปการตั้งค่าฉันไม่ผิดหวังเลย ผลลัพธ์ แต่เมื่อนึกถึงคำโวยวายของคุณแอมบรี ฉันก็ตระหนักว่าการเปลี่ยนแปลงเล็กๆ น้อยๆ เช่นนี้คงน่าหงุดหงิดใจมากที่ต้องรับมือ โดยเฉพาะ เพราะแม้จะเล็กแค่ไหน ไม่ต้องสงสัยเลยเพิ่มขึ้นบางครั้งก็เพียงพอที่จะทำให้ปวดหัวได้ การเปลี่ยนแปลงเล็กๆ น้อยๆ ในแอปการตั้งค่าอาจส่งผลให้เกิดการตรวจสอบเชิงลบต่อนักพัฒนาที่ไม่สมควรได้รับ การเปลี่ยนแปลงเล็กๆ น้อยๆ อย่างหนึ่งที่มีการบันทึกไว้ค่อนข้างไม่ดี และทำให้ฉันต้องค้นหาเธรด Stack Overflow บนอินเทอร์เน็ต มีข้อบกพร่องเล็กๆ น้อยๆ อีกกี่ตัวในอุปกรณ์อื่น?
การแข่งขันที่เพิ่มขึ้นในพื้นที่อุปกรณ์เคลื่อนที่ได้พิสูจน์แล้วว่าเป็นผลดีต่อผู้บริโภค แต่หลังจากที่ได้เห็นว่าการเปลี่ยนแปลงเล็กๆ น้อยๆ เหล่านี้เปลี่ยนแปลงไปอย่างไร สายผลิตภัณฑ์ต่างๆ มากมายสามารถส่งผลกระทบต่อนักพัฒนาได้ ฉันซาบซึ้งในมุมมองของนักพัฒนาที่มีต่อ การกระจายตัว ไม่ใช่ว่าตัวเลือกนั้นเป็นปัญหา ไม่ใช่ว่าชุมชนไม่ได้ดำเนินการเพียงพอที่จะจัดทำรายการปัญหาเหล่านี้ ดังที่ Mr. Ambri แนะนำไว้ในบทความของเขา บางทีนักพัฒนา Android อาจจำเป็นต้องมีเวอร์ชันของตนเอง caniuse.com หรือ sdkcritic.com เพื่อรวบรวมจุดบกพร่องที่คลุมเครือทั้งหมดไว้ในฐานข้อมูลเดียว ทางเลือกอื่นเพียงอย่างเดียวคือการให้ OEM บันทึกการเปลี่ยนแปลงเหล่านี้อย่างถูกต้องหรือหยุดทำตั้งแต่แรก ขอให้โชคดีกับสิ่งนั้น
เครดิตรูปภาพคุณสมบัติ: โอเพ่นซิกแนล