ה-API של Fabricated Overlay של אנדרואיד 12 מחזיר נושאים חסרי שורשים

זוכר איך אנדרואיד 8 הקל על עיצוב המכשיר שלך? זוכרים כמה כיף זה היה? ובכן, זה חזר לאנדרואיד 12, עם טוויסט.

האורווה המלאה אנדרואיד 12 השחרור ממש מעבר לפינה, ולגוגל יש אפילו פרסם את קוד המקור לריפו ה-AOSP שלו. יש הרבה חדש באנדרואיד 12, כולל תוספת לשכבות-על של משאבים הנקראות שכבות-על מפוברקות. מה היה אמור כ-API כדי לעזור למערכת לנהל את השינויים הדינמיים בשימוש חומר אתה ומונט עשוי להפוך למשהו הרבה יותר גדול - לפחות עד שחרור אנדרואיד 13.

רקע כללי

מישאל רחמן גילה את ה-API החדש הזה והביא אותו לידיעתי. הוא השתמש בפקודת המעטפת בשביל זה כדי לבדוק ערכי משאבים שונים באנדרואיד 12 בלי צורך להדר באופן ידני חבילות APK של שכבת-על, והוא חשב שזה עשוי להוות רעיון מעניין לאפליקציה למכשירים שורשיים. כשהוא הביא את תשומת ליבי לזה, הסתכלתי רבות על קוד המקור של אנדרואיד 12 ושמתי לב למשהו שלדעתי די מעניין. בדקתי את מה שמצאתי, ועכשיו אנחנו כאן -- כפי שמתברר, ניתן להשתמש ב-API של Fabricated Overlay כדי להחזיר נושאים חסרי שורשים. לפני שאתחיל יותר מדי במה שקורה כאן, אסביר מה הן בעצם שכבות על מפוברקות.

מהן שכבות על מפוברקות?

שכבות על מפוברקות הן תכונה חדשה שהוצגה באנדרואיד 12. הם דומים ל-RROs (Runtime Resource Overlays) הקלאסיים שיש לאנדרואיד כבר כמה שנים. הן RROs והן שכבות על מפוברקות יכולות לעקוף משאבים שונים עבור יישומים שונים. אתה יכול לשנות ערך בוליאני מ-false ל-true (או להיפך), להגדיר כמה גדול אתה רוצה ששורת המצב תהיה, וכן הלאה.

עם זאת, לשכבות על מפוברקות יש כמה הבדלים בולטים מ-RROs. ראשית, אינך צריך ליצור APK שכבת-על ולאחר מכן להתקין אותו. במקום זאת, אתה פשוט תגיד לאנדרואיד אילו ערכים אתה רוצה לשנות עבור איזו אפליקציה והיא דואגת לרשום את השינויים שלך כשכבת-על שתוכל לאחר מכן להפעיל.

הם גם קצת יותר מוגבלים מ-RROs. לפני אנדרואיד 11, RROs יכלו לעקוף כמעט כל משאב: בוליאנים, מספרים שלמים, ממדים, תכונות, פריסות ואפילו קבצי נתונים גולמיים. אנדרואיד 11 ביצעה כמה שינויים באופן שבו פועלים RRO, מה שהפך את הפריסות לעקוף כבר לא ממש מעשיות, למרות שזה הפך את ה-RRO ליציבים יותר באופן כללי.

לעומת זאת, שכבות על מפוברקות יכולות לעקוף רק ערכים שניתן לייצג כמספרים שלמים. זה כולל מספרים שלמים (דוה), ממדים, בוליאנים וצבעים. אתה לא יכול להשתמש בהם כדי לעקוף משאבי נתונים גולמיים, פריסות, מחרוזות או מערכים - לפחות לא בקלות. זוהי מגבלה שרירותית במקצת ב-API: הוא מקבל רק ערכי מספרים שלמים וקטגוריות משאבים כפי שהוגדרו על ידי המחלקה TypedValue. TypedValue כן תמיכה מחרוזות ושאר סוגי המשאבים, אבל רק כדי להתייחס למשאב שלהם, לא להחזיק את הנתונים האמיתיים שלהם.

עם זאת, המגבלות הללו אינן עניין גדול מדי למטרה המיועדת של שכבות על מפוברקות: חומר אתה והשפעות כספיות. שכבות-על מפוברקות מקלות על המערכת ליצור ולהחיל שכבות-על של צבע וממדים תוך כדי תנועה, ללא צורך לאתחל מחדש או להמתין להידור של APK.

כעת, בדרך כלל, זה יהיה רק ​​עוד API מסודר שאנשים עם מכשירים שורשיים יוכלו לנצל. אלא אם כן ישנה פרצה שנוצרה על ידי היצרן (כמו זו ש-Synergy מנצלת במכשירי סמסונג), שכבות-על יכולות להיות מותקנות רק על ידי צדדים שלישיים עם גישת שורש. עם זאת, זה החלק הטוב ביותר - גוגל שכחה לתקן חור באנדרואיד 12.

שכבות מיוצרות ללא שורש

אנדרואיד 8 הציגה את ה-API החדש של Overlay Manager Service (או OMS), ואנשים די מהר גילו שניתן להתקין חבילות שכבת-על כאפליקציות רגילות ולאחר מכן להפעיל אותן באמצעות ADB. למרבה הצער, גוגל תיקנה את זה באנדרואיד 9, ומאז ניתן להתקין באופן דינמי רק שכבות על חתומות באותו מפתח כמו המערכת.

כפי שמתברר, לשכבות העל המיוצרות של אנדרואיד 12 יש פרצה שמזכירה את זו שקיימת באנדרואיד 8: הן אינן זקוקות לגישה לשורש או להרשאות ברמת החתימה. הם רק צריכים משהו שרץ בתור משתמש המעטפת (כלומר, ADB) כדי לרשום אותם.

זה די ברור שגוגל התכוונה לכך ששכבות על מפוברקות יהיו נגישות רק למשתמשי השורש והמערכת. יש מימוש פקודת ADB ליצירת אותם, והוא לא יפעל אם המשתמש המבצע אינו root. הפרצה היא שהבדיקה היא רק בפקודה, לא ממשי ה-API, מה שאומר שאנחנו יכולים לנצל את זה עם קצת עבודה.

ADB במכשיר

כבר זמן רב, לאנדרואיד יש תכונת ADB אלחוטית. זה מאפשר למחשב (או כל דבר עם ADB בינארי וגישה לרשת) להתחבר למכשיר באופן אלחוטי. זה מיועד בעיקר למכשירי אנדרואיד שאין להם חיבורי USB נגישים למשתמש, כמו שעונים חכמים וטלוויזיות. יתר על כן, לפני אנדרואיד 11, היית צריך חיבור ADB קווי כדי להפעיל את מצב אל - חוטי.

אנדרואיד 11 הוא מה שהביא רשמית ADB אלחוטי לטלפונים וטאבלטים. זה קצת יותר מסובך מה-ADB האלחוטי הקלאסי, עם קודי התאמה ואימות, אבל זה יכול להיות מופעל על ידי המשתמש לחלוטין במכשיר, כל עוד המכשיר מחובר ל-WiFi. זה אומר שאפשר להתחבר למכשיר שלך דרך ADB מהמכשיר שלך, וכל מה שאתה צריך זה WiFi חיבור.

שימוש בממשקי API מוגברים באפליקציה

יש הרבה סיבות שאולי תרצה להשתמש בממשקי API מוגבלים באפליקציה שלך. בדרך כלל, זה בגלל שהם מספקים פונקציונליות מיוחדת שאתה צריך. כל עוד ל-API שאתה צריך יש מימוש פקודת מעטפת, זה די קל להשתמש בו מאפליקציה. כל מה שאתה צריך לעשות הוא ליצור תהליך מעטפת בתור root (או ADB), להריץ את הפקודה הנכונה ולנתח את התוצאה, אם בכלל.

מה אם ל-API אין יישום מעטפת, או שחסר ביישום מעטפת משהו שאתה צריך? אם אתה משתמש במכשיר שורשי, אתה יכול להשתמש במשהו כמו libRootJava. libRootJava מאפשר לך לקיים אינטראקציה עם ממשקי API של מסגרת Android כאילו האפליקציה שלך פועלת כמשתמש השורש. זה גם נוח יותר וגם מהיר יותר מהפעלת פקודות מעטפת, מכיוון שהכל באותה שפה, ואתה לא צריך לדאוג לניתוח מחרוזות באופן ידני. יש לו כמה מגבלות, אבל לרוב זה עובד מצוין.

ה-API של libRootJava די גמיש. אתה יכול להתאים אותו להפעלה כמשתמש המעטפת במקום כשורש. למרבה המזל, אתה לא חייב, כי מישהו כבר עשה את זה, וזה נקרא שיזוקו. Shizuku הוא כמעט כמו שילוב של Magisk Manager ו-libRootJava.

אפליקציית Shizuku Manager מנחה אותך בהגדרת תהליך הפועל כמשתמש המעטפת שאליו Shizuku יכול לגשת. ניתן ליישם את ספריית ה-API של Shizuku באפליקציות כדי לאפשר להם לגשת לממשקי API של המערכת כאילו היו משתמש המעטפת. זהו תהליך הרבה יותר מרכזי מאשר libRootJava, מכיוון שצריך להגדיר את Shizuku רק פעם אחת לפני שכל אפליקציה המיישמת את ספריית ה-API של Shizuku יכולה להשתמש בה. אם אתה מעוניין כיצד Shizuku עובד וכיצד אתה יכול לשלב אותו באפליקציה שלך, יש לי כאן מדריך לזה.

שיזוקו ושכבות על מפוברקות

עד עכשיו, אתה כנראה יכול לראות לאן זה הולך. אנחנו יכולים להשתמש בשירות כמו Shizuku כדי לגשת ל-API של Fabricated Overlays כמשתמש המעטפת, ואנחנו יכולים להשתמש בתכונת ה-ADB האלחוטית של אנדרואיד 11 כדי לקבל גישה ברמת מעטפת, הכל במכשיר. מכיוון שהגבלת משתמש השורש קיימת רק בפקודת המעטפת של Fabricated Overlays ולא ב-API בפועל, די בהפעלה כמשתמש המעטפת כדי להשתמש בו ישירות.

יישום: ספרייה ואפליקציה לדוגמה

מה לגבי פרטי היישום? ובכן, גם אני סיפקתי אותך לזה.

כהכנה לכך, הכנתי גם א ספרייה ואפליקציית דוגמה מתפקדת במלואה באמצעות אותה ספרייה.

הספרייה עצמה היא בעיקר מטעמי נוחות. זה עוטף כמה ממשקי ה-API של המערכת הנסתרים ונותן לך כמה שיטות נוחות לטיפול בהרשאות Shizuku. זה גם גמיש, כך שאתה יכול לספק מופע משלך של IoverlayManager API אם יש לך דרך אחרת לאחזר אותו.

האפליקציה לדוגמה מראה כיצד תוכל ליישם את הספרייה באמצעות Shizuku. זוהי גם אפליקציה פונקציונלית ושימושית לחלוטין. העמוד הראשי מציג שכבות-על מיוצרות הרשומות כעת שנוצרו באמצעותו, מקובצות לפי אפליקציית יעד. אתה יכול להפעיל, להשבית ולמחוק אותם גם משם.

הקשה על כפתור "הוסף שכבת על" בתחתית תוביל אותך לרשימה של כל האפליקציות שניתנות לשכבת-על. חפש או גלול כדי למצוא את זה שאתה צריך והקש עליו. לאחר מכן תוכל ללחוץ על כפתור "הוסף" בתחתית המסך כדי להציג את רשימת המשאבים שניתן לעקוף באפליקציה זו. בחר משאב, הגדר את הערך שלו וחזור על כמה ערכים שתרצה לשנות. לחץ על כפתור "שמור", הזן שם, אשר, ואתה תוחזר למסך הראשי, כעת מציג את שכבת העל החדשה, מוכנה להפעלה.

הנה כמה צילומי מסך מהאפליקציה, הודות למשעל רחמן.

כהערה צדדית, יש לי גם אפליקציית מנהל שכבות כללית בשם... מנהל שכבות. האפליקציה המורכבת מראש עצמה היא זמין רק בפטראון שלי, אבל ה קוד המקור זמין באופן חופשי לכל מי שרוצה לקמפל או לשנות אותו.

סיכום

ה-API החדש של Fabricated Overlays באנדרואיד 12 הוא די נהדר, בעיקר בגלל שהוא לא צריך שורש. זה אולי לא מתוחכם כמו APK RRO מלא, אבל זה נותן לך הרבה יותר גמישות ללא גישת שורש.

בדוק את אפליקציית Fabricate Overlay ב-GitHub

אם יש לך מכשיר עם אנדרואיד 12 ואתה רוצה לנסות את זה, בדוק את מאגר GitHub המקושר למעלה. לקטע מהדורות יהיה APK להורדה ולהשתמש. הספרייה צריכה להיות קלה לכלול באפליקציה שלך באמצעות JitPack.

כמובן, אתה לא צריך לצפות שהתכונה הזו תישאר לאורך זמן. גוגל ממש לא אוהבת שכבות על של צד שלישי, אז זה כמעט בהחלט יתוקן כאשר אנדרואיד 13 ישוחרר. אבל בינתיים, תהנו מזה כל עוד זה נמשך!