דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. אנדרואיד - כללי
  3. עזרה הדדית - אנדרואיד
  4. בירור | איך משנים פעולה של מקש ( במקום מסך הבית שיפתח תפריט אפשרויות )

בירור | איך משנים פעולה של מקש ( במקום מסך הבית שיפתח תפריט אפשרויות )

מתוזמן נעוץ נעול הועבר עזרה הדדית - אנדרואיד
5 פוסטים 2 כותבים 64 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מ מנותק
    מ מנותק
    מזכירותי
    כתב נערך לאחרונה על ידי מזכירותי
    #1

    יש לי מכשיר LOM S9 והמקשים שלו לא מספיק נוחים
    אני מעוניין לשנות את הפונקציה של המקש השמאלי העליון, כרגע הוא מפנה למסך הבית אבל זה מיותר, כי מקש ההפעלה גם הוא מפנה למסך הבית. אני רוצה שהוא יפתח את תפריט האפשרויות בכל אפליקציה.
    איך עושים את זה?
    טוב אז כמובן שאלתי את ג'מיני וגם עשיתי חיפוש גוגל, קיבלתי מזה הרבה כלים איך להתקדם, עכשיו נשאר העבודה האמיתית - יצירת השינוי בפועל.
    אני עובד על זה כרגע ורציתי לשתף בתהליך, בעז''ה כשאסיים אני אעלה מדריך איך עשיתי את זה
    בינתיים דבר ראשון קישור לשיחה עם ג'מיני והמחקר שהוא ערך
    https://gemini.google.com/share/66eba95d9627
    ובקובץ מחקר עם ג'מיני.docx
    מחקר עם ג'מיני.pdf
    למה אני מעלה פה משהו מבינה מלאכותית? כדי שיראו שלמרות המוגבלות שלו, יש דברים שהוא כן עוזר. אז לפני שבאים ושואלים פה אתם יכולים להתחיל במחקר עצמאי ואז לבוא מוכנים.

    יאיר דניאלי תגובה 1 תגובה אחרונה
    0
    • מ מזכירותי

      יש לי מכשיר LOM S9 והמקשים שלו לא מספיק נוחים
      אני מעוניין לשנות את הפונקציה של המקש השמאלי העליון, כרגע הוא מפנה למסך הבית אבל זה מיותר, כי מקש ההפעלה גם הוא מפנה למסך הבית. אני רוצה שהוא יפתח את תפריט האפשרויות בכל אפליקציה.
      איך עושים את זה?
      טוב אז כמובן שאלתי את ג'מיני וגם עשיתי חיפוש גוגל, קיבלתי מזה הרבה כלים איך להתקדם, עכשיו נשאר העבודה האמיתית - יצירת השינוי בפועל.
      אני עובד על זה כרגע ורציתי לשתף בתהליך, בעז''ה כשאסיים אני אעלה מדריך איך עשיתי את זה
      בינתיים דבר ראשון קישור לשיחה עם ג'מיני והמחקר שהוא ערך
      https://gemini.google.com/share/66eba95d9627
      ובקובץ מחקר עם ג'מיני.docx
      מחקר עם ג'מיני.pdf
      למה אני מעלה פה משהו מבינה מלאכותית? כדי שיראו שלמרות המוגבלות שלו, יש דברים שהוא כן עוזר. אז לפני שבאים ושואלים פה אתם יכולים להתחיל במחקר עצמאי ואז לבוא מוכנים.

      יאיר דניאלי מנותק
      יאיר דניאלי מנותק
      יאיר דניאל
      כתב נערך לאחרונה על ידי יאיר דניאל
      #2

      @מזכירותי כתב בבירור | איך משנים פעולה של מקש ( במקום מסך הבית שיפתח תפריט אפשרויות ):

      איך עושים את זה?

      יש לכך כבר אפליקציה!
      קוראים לה "ButtnoS Romper" יש אותה פה בפורום

      תגובה 1 תגובה אחרונה
      0
      • מ מנותק
        מ מנותק
        מזכירותי
        כתב נערך לאחרונה על ידי מזכירותי
        #3

        בואו תראו איזה תקלה פסיכית קרה לו, ג'מיני עשה מחקר מחקר מקיף ומפורט.
        אבל תראו מה הוא לא כתב בגוף המחקר רק תחת הלשונית הרהורים.

        הבנתי שכל פתרון מתקדם, בין אם זה דרך מודול Magisk או עריכת קובץ Key Layout באופן ידני, מחייב אותי לזהות תחילה את ה-Keycode הייחודי של המקש השמאלי העליון שלך. ללא קוד זה, לא ניתן יהיה ליצור את המיפוי מחדש. לכן, אני מתכוון לחפש כלי או אפליקציה שיעזרו לך לבצע זיהוי מדויק של קוד המקש הזה.

        זיהיתי כלי זיהוי Keycode פוטנציאליים כגון (KeyEvent Display ), אך עולה מכשול משמעותי: המקש שאתה רוצה למפות מחדש מוגדר כעת כמקש בית' (Home). רוב כלי -Keycode אינם יכולים ללכוד את קוד הסריקה של מקש 'בית' או 'הפעלה' כשהוא נלחץ, מכיוון שהמערכת מעבדת את הפעולה הזו מיידית. זוהי חוליית המידע החסרה והקריטית ביותר לפתרון הבעיה שלך.

        בשל חוסר היכולת לאתר כלי 'אוטומטי' לזיהוי קוד של מקש 'בית' חסום, הגעתי למסקנה שיהיה עליך להשתמש בשיטות פיתוח מתקדמות שדורשות getevent כגון שימוש בכלי ,Root דרך מסוף הפקודה (ADB). שיטה זו מאפשרת לקרוא את לוגיקת קלט המערכת ולחלץ את קוד הסריקה הפיזי הנדרש לעריכה בקובץ ה-.kl של Magisk מודול

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

        מה אתם חושבים ג'מיני לא ידע? הוא ידע וגם ''הרהר'' על זה במהלך המחקר, אבל שכח להגיד לי את זה בסיכום.

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

        תגובה 1 תגובה אחרונה
        0
        • מ מנותק
          מ מנותק
          מזכירותי
          כתב נערך לאחרונה על ידי מזכירותי
          #4

          עדכון:
          עשיתי מה שג'מיני הציע ועם הפקודה GETEVENT תפסתי את ה scan code של המקש הזה והוא 139
          השלב הבא הוא לבדוק בנתיב הזה

          /system/usr/keylayot
          

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

          ובכן הבדיקה העלתה שמקש מס' 139 אכן מוגדר עבור תפריט, אז איפה הבעיה?
          שואלים את ג'מיני...
          הוא מציע לעשות לוג קאט logcat
          שוב פעם ADB ואז - adb logcat

          הנה הפלט
          יצא 1200 שורות זה השבע שורות הרלוונטיות.

          12-04 10:14:58.800  1344  1464 D WindowManager: interceptKeyTq keycode=82 interactive=true keyguardActive=false policyFlags=22000000
          זיהוי - מישהו נגע במקש 82 
          12-04 10:14:58.802  1344  1463 D WindowManager: interceptKeyTi keyCode=82 down=true repeatCount=0 keyguardOn=false canceled=false
          זיהוי מקש 82 נלחץ פעם אחת 
          12-04 10:14:58.803  1344  1463 D onRecentsTouch: xuyong isValidationToolsApp top is:com.android.dialer
          אימות: האפליקציה הפועלת היא חייגן 
          12-04 10:14:58.803  1344  1463 D onRecentsTouch: xuyong isValidationToolsApp top is:com.android.dialer
          אימות: האפליקציה הפועלת היא חייגן
          12-04 10:14:58.808  1582  1582 V ShadeControllerImpl: NotificationShadeWindow: com.android.systemui.statusbar.phone.NotificationShadeWindowView{a8acd6d I.E...... ......ID 0,0-480,640} canPanelBeCollapsed(): false
          בדיקה האם הסטטוס בר פתוח 
          12-04 10:14:58.809  1344  1463 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.uioverrides.QuickstepLauncher (has extras)} from uid 0
          מנהל הפעילות מחליט להפעיל את מסך הבית 
          
          

          מה עושים עם זה?
          נראה בהמשך

          תגובה 1 תגובה אחרונה
          0
          • מ מנותק
            מ מנותק
            מזכירותי
            כתב נערך לאחרונה על ידי
            #5

            הנה התשובה של ג'מיני:

            זה מצוין! התצפית שלך מאשרת את כל שרשרת הניתוח שלנו ומבודדת את הבעיה באופן מושלם.
            אם קובץ ה-Key Layout (.kl) מכיל:

            KEY 139 MENU 
            

            זה אומר שכל הדרך מהחומרה ועד לשכבת ה-Framework (הגעת לקוד 82) עובדת כשורה.
            הבעיה היא כבר לא במיפוי, אלא אך ורק במדיניות (Policy) של המערכת ברגע שקיבלה את הקוד 82.
            🧐 ניתוח הבעיה: הסטה כפויה (Policy Override)
            הבעיה שאתה רואה היא תוצאה של סדר העדיפויות שנקבע בתוך קוד השירותים של אנדרואיד (בתוך תהליך המערכת).
            כך נראית שרשרת האירועים המלאה, עם דגש על נקודת הכשל:

            • קלט גולמי: 139 נלחץ.
            • מיפוי: ה-.kl מתרגם 139 ל-Android Keycode 82 (MENU). (תקין)
            • יירוט Policy 1: WindowManagerPolicy.interceptKeyBeforeQueueing(): המערכת מקבלת 82. זה הרגע שבו הקוד של היצרן פועל.
              מה שקורה בפועל (כפי שמשתקף בלוג):
              הלוגים שלך משורות 3, 4 ו-6 מספקים את הראיה המרכזית ליירוט:
            שורה רמה תג משמעות
            3-4 D onRecentsTouch: המערכת מזהה שמקש נלחץ ומפעילה לוגיקה שמקושרת לRecents (אפליקציות אחרונות).
            xuyong isValidationToolsApp... הפניה לקוד מותאם אישית של היצרן (או גורם צד שלישי).
            6 I ActivityTaskManager: START u0 {act=...HOME...}

            במקום לעשות משהו עם Recents, הקוד המותאם אישית הזה מחליט במקום להפעיל את מסך הבית.

            המסקנה: זהו "קוד עוקף" (Override Code)
            היצרן, או מי שביצע את התאמות המערכת, החליט שהדרך שבה המקש 82 (Menu) מטופל צריכה להיות שונה בנסיבות מסוימות (אולי תמיד, או רק כאשר אפליקציה מסוימת ברקע).
            היירוט מתרחש בתוך הקוד שנקרא onRecentsTouch או בסביבתו, בתוך תהליך ה-System Server.

            🎯 היכן לשנות את הקוד עם Root
            אם אתה רוצה שהמקש יפעל כתפריט באופן תקין, עליך לבטל או לשנות את הלוגיקה שמפעילה את ה-HOME Intent כאשר היא רואה את הקוד 82.
            כאמור, הקוד שאתה מחפש נמצא בתוך קבצי ה-Framework, כנראה ב:
            או בקובץ מותאם אישית של היצרן, שנמצא גם הוא בתוך ה-Jar של שירותי המערכת (services.jar) או הרכיבים של היצרן (Vendor/MTK frameworks).
            שלבי הפעולה המדויקים עם Root:

            • איתור הקוד המותאם אישית:

              • קובץ ה-Java הרלוונטי הוא כנראה המחלקה שמכילה את הפונקציה onRecentsTouch. נסה לחפש את השם xuyong או onRecentsTouch בקוד המקור של ה-Framework.
            • הקוד הזה כנראה מופעל מתוך פונקציית הטיפול במקשים של ה-WindowManagerPolicy.

            • שינוי הלוגיקה:

              • חפש קטע קוד דומה לזה בתוך הטיפול ב-KEYCODE_MENU או KEYCODE_APP_SWITCH:
                <!-- end list -->
              // דוגמה ללוגיקה שיש לשנות
            if (keyCode == KeyEvent.KEYCODE_MENU) {
                // קריאה לפונקציה המותאמת אישית של היצרן
                if (mCustomPolicy.isValidationToolsApp(topActivity) || shouldOverrideMenuKey()) {
                    // 
            
            זהו החלק שאתה רוצה לבטל!
                    Intent homeIntent = new Intent(Intent.ACTION_MAIN);
                    homeIntent.addCategory(Intent.CATEGORY_HOME);
                    startActivity(homeIntent); // <--- זה מה שיוצר את START u0 {act=...HOME...}
                    return -1; // יירוט המקש כך שלא יגיע לאפליקציה
                }
            } 
            
            • אם אתה משנה את ה-Firmware, עליך להסיר את קטעי הקוד שיוצרים את ה-HOME Intent ולהבטיח שהמקש לא יוכרז כ"מיוֹרֵט" (כלומר, שהפונקציה תחזיר 0 או ערך שלא מונע את המשך הדיספאץ' (Dispatch) שלו לאפליקציה).

            🛠️ פעולה עם Magisk/Xposed (הדרך הריאלית)
            מאחר ששינוי קוד ה-Framework דורש דה-קומפילציה, שינוי וקומפילציה מחדש של קובצי .jar קריטיים (פעולה מסוכנת ומורכבת):
            הדרך המעשית ביותר היא להשתמש במודול Magisk/Xposed שנועד לשנות התנהגות Key Events. מודול כזה יכול "ללכוד" את הקריאה לפונקציות המדיניות (Policy Functions) ולשנות את התוצאה שלהן.
            חפש מודולים המתמחים ב:

            • "Key Mapper" או "Button Remapper" (לרמת Framework).
            • שימוש ב-Xposed / LSPosed כדי להתחבר לתוך ה-PhoneWindowManager.java ולדרוס את הלוגיקה המותאמת אישית של היצרן (הידועה בשם Hooking).
              לסיכום: המקש 139 נכון, המיפוי ל-82 נכון. היירוט שמפעיל את ה-HOME במקום את ה-MENU מתבצע על ידי קוד מדיניות מותאם אישית (Custom Policy Code) של היצרן בתוך ה-System Server. זה המקום שאתה צריך לשנות.

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

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

            תגובה 1 תגובה אחרונה
            1

            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • חוקי הפורום
            • פופולרי
            • לא נפתר
            • משתמשים
            • חיפוש גוגל בפורום
            • צור קשר