משתמש האנדרואיד הממוצע כנראה כבר מזמן הפסיק לדאוג ל"בעיית הפיצול" של אנדרואיד. אבל הבעיה עדיין רודפת מפתחים.
פיצול היה נושא שנוי במחלוקת באנדרואיד, פשוטו כמשמעו מאז הוכרזה מערכת ההפעלה לנייד.
מלבד היותו חיבוק לטרולים לשימוש במלחמות להבות מקוונות, הגיוון שמגיע עם הפיצול נתפס כיום במידה רבה כ חיובי נטו לצרכנים של מכשירי אנדרואיד. אחרי הכל, ניתן לנו כל כך הרבה חופש בבחירת סוג המכשיר עם סוג התוכנה שאנחנו רוצים, עד שקשה לצרכן הממוצע לדאוג לפיצול. הדמיה של המגוון המדהים של מכשירי אנדרואיד מייצרת פסיפס יפהפה של הייצוג המגוון של אנדרואיד.
אבל פיצול חומרה ותוכנה אינו מהווה מפתח תוכנה מאושר. למעשה, בדיוק ההפך. פיתוח אפליקציה על פני כל כך הרבה תצורות חומרה ותוכנה שונות יכול להוות מטרד גדול בעת איתור באגים. יצרני ציוד מקורי יכולים לבצע שינויים גדולים או עדינים שיש לתת עליהם את הדעת בעת פיתוח אפליקציה, אבל אין באמת דרך קלה עבור המפתח הבודד להבטיח שהאפליקציה שלהם תפעל באופן אוניברסלי. בעוד שהצרכן הממוצע כבר מזמן שכח מהדיון על הפיצול, הנושא עדיין רודף את אנדרואיד מפתחי אפליקציות ולכאורה אין מה לעשות בקשר לזה חוץ מלמצוץ את זה ולטפל בשגיאות כשהן לְהוֹפִיעַ.
מצב הפיצול המצטער
OEM אחד במיוחד מקבל חלק גדול של שנאה על כאבי הראש שהם גורמים בעת פיתוח אפליקציה - סמסונג. מפתחים מתלוצצים על סמסונג כבר שנים, חלקם אפילו כותבים קטעים חריפים כמו "יש מקום מיוחד לסמסונג באנדרואיד Hell" המתאר באג מתסכל במיוחד שנובע ממנו מכשירי סמסונג וספריית אפליקציות התמיכה. אני רוצה להפנות את תשומת הלב לפסקה אחת במיוחד מההתלהמות של מר אמברי, שמתארת היטב מדוע למפתחים עדיין אכפת מפיצול:
אם אתה מפתח אנדרואיד, כנראה השנאה שלך למכשירי סמסונג היא חסרת גבולות. יותר ממשתמש ממוצע, שסמסונג היא שם נרדף לו טאצ'וויז המטופש ו bloatware מוגזם, אתה מתעב את סמסונג כי אין לך ברירה. בגלל זה של סמסונג נתח שוק עצום, אתה פשוט לא יכול לבחור שלא לתמוך במכשירי סמסונג. וזה מה שהכי כואב; העובדה שהבחירה הזו נלקחת ממך!
גם זו לא התלהמות מהשנים הישנות של קיומה של אנדרואיד - הפוסט הזה פורסם באמצע דצמבר אשתקד. אני אהיה מראש ואציין שאני לא בטוח אם הבעיה הזו תוקנה עדיין רשמית, עם זאת, מר. Ambri סיפק תיקון בפוסט שלו לכל מי שנתקל בהתלהמות שלו באמצעות חיפוש בגוגל של חרק. כל מה שאתה צריך לעשות הוא להשתמש ProGuard עם שורת הקוד הבודדת הבאה:
# 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 כרוכה לעתים קרובות בצלילה עמוקה בין קישורים לאחר חיפושי ניסוי וטעייה רבים בגוגל. לפעמים אפילו תמצא משתמש אחר מזכיר את אותו באג שהיה לך, אך ללא תיקון באופק. או אפילו יותר מתסכלים הם הזמנים שבהם אתה מוצא שרשור שבו הפוסטר המקורי טען שהוא מצאו תיקון אבל הם כבר מזמן נטשו את השרשור שלהם מבלי להורות לאחרים כיצד לתקן את נושא.
דוגמה לבעיית פיצול עדין
אני לא מפתח בעצמי, אבל אני מכיר מספיק את היכולות של אנדרואיד אחרי שנים של התעסקות בטאסקר כדי שהתחלתי לתכנת פסאודו את הפתרונות שלי לבעיות שהתמודדתי איתי. וכשאני לא מצליח להבין משהו, אני עושה את זה בגוגל, בדיוק כמו שכולם עושים. בזמן שהייתי בתהליך של כתיבת המאמר הקודם שלי על לחפור באפליקציית ההגדרות של הטלפון שלך לחיפוש פעילויות נסתרות, נתקלתי בבאג די מוזר שלא יכולתי להסביר. באג ייחודי למכשירי Huawei.
בכל פעם שניסיתי להתחיל פעילויות מסוימות (כגון תפריט "בדיקות" שמכיל סטטיסטיקות שימוש באפליקציה) באפליקציית ההגדרות, תמיד הייתי נתקלת בשגיאת הרשאה. במיוחד, האפליקציה שבה השתמשתי כדי להתחיל את הפעילות הייתה חסרת הרשאה huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. אף מכשיר אחר שבדקתי לא דרש הרשאות ייחודיות כדי להפעיל את פעילויות ההגדרות הללו, רק טלפונים המריצים את גרסת ה-Huawei של Android (EMUI). ניתוח של com.android.settings חשף כי פעילויות מסוימות באפליקציית ההגדרות אכן היו תחת רמת הגנה שדרשה או חתימה או הרשאת מערכת.
לרוע המזל עבורי, זה אומר שרק אפליקציות מותקנות תחת /system או אפליקציות חתומות עם אותו חתימה שכן אפליקציית ההגדרות תוכל לפתוח את הפעילויות הללו בשיטה שהייתי מנסה. כשחיפשתי בגוגל את השגיאה הזו לתשובה, (ניחשתם נכון) נתקלתי ב- חוט הצפת ערימה. המפתח שפרסם את הבעיה שלו נתקל באותה בעיה שאני נתקלתי בו (אם כי שלו היה בתהליך של פיתוח אפליקציה). הבעיה שלו נוצרה כאשר הוא ניסה להפעיל את הקוד הבא:
<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>
אם לשפוט לפי המחרוזות בכוונה ובדף האינטרנט של המפתח, הוא כנראה ניסה לאפשר למשתמש לבחור אפליקציה של צד שלישי לנגן בה מדיה מסוימת. התיקון, מסופק על ידי מפתח ותיק CommonsWare, היה די פשוט: השתמש כוונה. CreateChooser במקום ACTION_PICK_ACTIVITY. למרות זאת, למה האם עלינו ליישם את התיקון הזה? למה האם Huawei דורש את ההרשאה הזו מלכתחילה? למה האם היינו צריכים למצוא תשובה ב-StackOverflow באמצעות חיפוש ספציפי מאוד בגוגל?
פרדוקס הבחירה
כדי למצוא תשובה, CommonsWare הגישה דוח באג במעקב אחר באגים של אנדרואיד בבקשה שגוגל תבדוק את הבעיה. במיוחד, המפתח ביקש מ-Google למנוע מדרישות הרשאה לא מתועדות למנוע מאפליקציות צד שלישי לגשת ל-ACTION_PICK_ACTIVITY. על ידי כתיבה בדרישות אלה ב CTS, Huawei תיאלץ לציית לשינויים אלה.
למען האמת, עם זאת, הבאג הזה עצמו הוא ממש לא עניין גדול. למרות שאף אפליקציה אחרת שניסיתי (כגון Tasker) לא הצליחה לעקוף את ההרשאה הזו דרישה והשקת פעילויות מסוימות באפליקציית ההגדרות, לא בדיוק התאכזבתי ממנה התוצאה. אבל כשנזכרתי בהתלהמות של מר אמברי, הבנתי ששינויים קטנים כמו אלה חייבים להיות מאוד מתסכלים להתמודד איתם, במיוחד כי קטנים ככל שיהיו, הם ללא ספקלהוסיף, לפעמים מספיק כדי לגרום לכאב ראש. שינוי קטן אחד באפליקציית ההגדרות עלול לגרום לביקורת שלילית לא ראויה נגד מפתח. שינוי קטנטן אחד שמתועד בצורה גרועה ודרש ממני לסרוק באינטרנט אחר שרשור Stack Overflow. כמה באגים קטנים אחרים יש במכשירים אחרים?
תחרות מוגברת בתחום הסלולר הוכיחה את עצמה כגדולה עבור הצרכן, אך לאחר שראיתי כיצד השינויים העדינים הללו על פני כל כך הרבה קווי מוצרים שונים יכולים להשפיע על מפתחים, התחלתי להעריך את השקפת המפתחים כלפיה הִתנַפְּצוּת. זה לא שהבחירה עצמה היא הבעיה, אלא שהקהילה לא עושה מספיק כדי לקטלג את הנושאים האלה. כפי שמר אמברי הציע במאמרו, אולי מפתחי אנדרואיד צריכים גרסה משלהם caniuse.com אוֹ sdkcritic.com לאסוף את כל הבאגים הלא ברורים למסד נתונים אחד. האלטרנטיבה הנוספת היחידה היא לגרום ליצרני OEM לתעד נכון את השינויים הללו או להפסיק לבצע אותם מלכתחילה, אבל בהצלחה עם זה.
קרדיט לתמונה תכונה: OpenSignal