@נחלס-דון זה שוקל כ200 מ"ב (בזיפ), איך לשלוח לך?
רק רציתי להראות שזה תוכנה שאני משתמש בה בפועל ולא סתם דוחף לך קישור אל הלא נודע...
@נחלס-דון זה שוקל כ200 מ"ב (בזיפ), איך לשלוח לך?
רק רציתי להראות שזה תוכנה שאני משתמש בה בפועל ולא סתם דוחף לך קישור אל הלא נודע...
@נוחעם-FM הזאת של התשלומים..
הוספתי קובץ לעריכת BIT, זה לא בדיוק הכשרה, אבל מאפשר התקנה שלא מהחנות.
זה כרגע נסיוני, ולא כולל ביטול בקשת עדכונים. בעזרת ד' אולי מאוחר יותר.
לא באתי להחליף את דוד חזן, פשוט לפעמים אין לי גישה למתמחים טופ...
בהמשך למדריך הישן שלי כאן, כעת לפני מעבר שלי לדאמבדוריד, היה חשוב לי שתהיה האפשרות הזו.

כמובן שהעריכה על אחריותכם וכו', תגבו הכל וכו'.
אה, וכמובן שצריכה להיות לכם היכולת לערוך את הסיסטם, מה שמשיגים בעזרת RO2RW, חפשו על זה בפורום.
עוד דבר, אני לא דובר סמאלית, כמובן שזה AI..
החלפת הפרופילים תעבוד בכל מקום שממשק המערכת (systemui בלעז) הוא התהליך הקדמי (בforeground), דהיינו במסך הנעילה ובכל מקום שתפתחו את חלון ההתראות (זה שמושכים למטה..).
האפליקציה הנערכת היא הsystemui, שנמצאת בנתיב:
system/system_ext/priv-app/SystemUI
השינויים:
# --- התחלת הוספה מתוקנת ---
# 1. יצירת IntentFilter
new-instance v2, Landroid/content/IntentFilter;
const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
invoke-direct {v2, v3}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
# 2. יצירת הרסיבר
# v0 הוא 'this' (VolumeDialogImpl)
new-instance v3, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
invoke-direct {v3, v0}, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;-><init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
# 3. השגת ה-Context בצורה בטוחה
# p1 הוא הפרמטר הראשון של הבנאי (Context)
# נעביר אותו ל-v4 כדי להשתמש בו (כי v1 כבר "מלוכלך")
move-object v4, p1
# 4. רישום הרסיבר
# v4 = Context
# v3 = Receiver
# v2 = Filter
# v5 = Flags (0x2 = RECEIVER_EXPORTED)
const/4 v5, 0x2
invoke-virtual {v4, v3, v2, v5}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
# --- סוף הוספה ---
מראה מקום בספויילר:
.method public constructor <init>(Landroid/content/Context;Lcom/android/systemui/plugins/VolumeDialogController;Lcom/android/systemui/statusbar/policy/AccessibilityManagerWrapper;Lcom/android/systemui/statusbar/policy/DeviceProvisionedController;Lcom/android/systemui/statusbar/policy/ConfigurationController;Lcom/android/systemui/media/dialog/MediaOutputDialogFactory;Lcom/android/internal/jank/InteractionJankMonitor;Lcom/android/systemui/dagger/DaggerReferenceGlobalRootComponent$ReferenceSysUIComponentImpl$SwitchingProvider$12;Lcom/android/systemui/statusbar/policy/DevicePostureController;Landroid/os/Looper;Lcom/android/systemui/dump/DumpManager;Ldagger/Lazy;Lcom/android/systemui/statusbar/VibratorHelper;Lcom/android/systemui/util/time/SystemClock;)V
.registers 25
move-object v0, p0
move-object v1, p1
move-object/from16 v2, p9
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
# הרבה קוד באמצע...
.line 62
:cond_179
iput-object v3, v0, Lcom/android/systemui/volume/VolumeDialogImpl;->mDevicePostureControllerCallback:Lcom/android/systemui/volume/VolumeDialogImpl$$ExternalSyntheticLambda2;
:goto_17b
# --- התחלת הוספה מתוקנת ---
# 1. יצירת IntentFilter
new-instance v2, Landroid/content/IntentFilter;
const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
invoke-direct {v2, v3}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
# 2. יצירת הרסיבר
# v0 הוא 'this' (VolumeDialogImpl)
new-instance v3, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
invoke-direct {v3, v0}, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;-><init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
# 3. השגת ה-Context בצורה בטוחה
# p1 הוא הפרמטר הראשון של הבנאי (Context)
# נעביר אותו ל-v4 כדי להשתמש בו (כי v1 כבר "מלוכלך")
move-object v4, p1
# 4. רישום הרסיבר
# v4 = Context
# v3 = Receiver
# v2 = Filter
# v5 = Flags (0x2 = RECEIVER_EXPORTED)
const/4 v5, 0x2
invoke-virtual {v4, v3, v2, v5}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
# --- סוף הוספה ---
return-void
:array_17c
.array-data 4
0x0
0x3f800000 # 1.0f
.end array-data
:array_184
.array-data 4
0x3f800000 # 1.0f
0x0
.end array-data
.end method
.method public final toggleRingerMode()V
.registers 6
# 1. איפוס טיימר (משתמשים ב-p0)
invoke-virtual {p0}, Lcom/android/systemui/volume/VolumeDialogImpl;->rescheduleTimeoutH()V
# 2. בדיקה שה-State קיים
iget-object v0, p0, Lcom/android/systemui/volume/VolumeDialogImpl;->mState:Lcom/android/systemui/plugins/VolumeDialogController$State;
if-nez v0, :get_current_mode
return-void
:get_current_mode
# 3. קריאת המצב הנוכחי לתוך v0
iget v0, v0, Lcom/android/systemui/plugins/VolumeDialogController$State;->ringerModeInternal:I
# נשתמש ב-v1 כדי להחזיק את המצב החדש שנרצה להגדיר
# הגדרת קבועים להשוואה (v2=1 רטט, v3=2 רגיל)
const/4 v2, 0x1
const/4 v3, 0x2
# --- לוגיקה (רגיל -> רטט -> שקט -> רגיל) ---
# אם המצב הנוכחי הוא רגיל (2), נרצה לעבור לרטט (1)
if-ne v0, v3, :check_vibrate
move v1, v2
goto :apply_change
:check_vibrate
# אם המצב הנוכחי הוא רטט (1), נרצה לעבור לשקט (0)
if-ne v0, v2, :set_normal
const/4 v1, 0x0
goto :apply_change
:set_normal
# אחרת (שקט או לא ידוע), נחזור לרגיל (2)
move v1, v3
:apply_change
# 4. ביצוע השינוי באמצעות הפונקציה הפנימית של המחלקה
invoke-virtual {p0, v1}, Lcom/android/systemui/volume/VolumeDialogImpl;->setRingerMode(I)V
return-void
.end method
.class public Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
.super Landroid/content/BroadcastReceiver;
.field final synthetic this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
.method public constructor <init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
.registers 2
iput-object p1, p0, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;->this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
invoke-direct {p0}, Landroid/content/BroadcastReceiver;-><init>()V
return-void
.end method
.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
.registers 4
# קריאה לפונקציה הראשית שכתבנו קודם
iget-object v0, p0, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;->this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
invoke-virtual {v0}, Lcom/android/systemui/volume/VolumeDialogImpl;->toggleRingerMode()V
return-void
.end method
# 1. בדיקה: האם זה סולמית (18)?
invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I
move-result v0
const/16 v1, 0x12
if-ne v0, v1, :original_code
# 2. בדיקה: האם זו לחיצה (DOWN=0)?
invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I
move-result v0
const/4 v1, 0x1
# אם זה UP, נבלע את המקש
if-eqz v0, :check_locked
return v1
:check_locked
# 3. בדיקה: האם המכשיר נעול?
invoke-virtual {p0}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
move-result-object v0
const-string v2, "keyguard"
invoke-virtual {v0, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Landroid/app/KeyguardManager;
# אם לא נעול -> לך לקוד המקורי (אל תשלח שידור)
invoke-virtual {v2}, Landroid/app/KeyguardManager;->isKeyguardLocked()Z
move-result v2
if-nez v2, :do_broadcast
goto :original_code
:do_broadcast
# 4. שליחת Broadcast
new-instance v2, Landroid/content/Intent;
const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
invoke-direct {v2, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v3, "com.android.systemui"
invoke-virtual {v2, v3}, Landroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
sget-object v3, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v0, v2, v3}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
return v1
:original_code
מראה מקום בספויילר:
.method public final dispatchKeyEvent(Landroid/view/KeyEvent;)Z
.registers 11
# תחילת הוספה
# 1. בדיקה: האם זה סולמית (18)?
invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I
move-result v0
const/16 v1, 0x12
if-ne v0, v1, :original_code
# 2. בדיקה: האם זו לחיצה (DOWN=0)?
invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I
move-result v0
const/4 v1, 0x1
# אם זה UP, נבלע את המקש
if-eqz v0, :check_locked
return v1
:check_locked
# 3. בדיקה: האם המכשיר נעול?
invoke-virtual {p0}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
move-result-object v0
const-string v2, "keyguard"
invoke-virtual {v0, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Landroid/app/KeyguardManager;
# אם לא נעול -> לך לקוד המקורי (אל תשלח שידור)
invoke-virtual {v2}, Landroid/app/KeyguardManager;->isKeyguardLocked()Z
move-result v2
if-nez v2, :do_broadcast
goto :original_code
:do_broadcast
# 4. שליחת Broadcast
new-instance v2, Landroid/content/Intent;
const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
invoke-direct {v2, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v3, "com.android.systemui"
invoke-virtual {v2, v3}, Landroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
sget-object v3, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v0, v2, v3}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
return v1
:original_code
# עד כאן
.line 1
iget-object v0, p0, Lcom/android/systemui/shade/NotificationShadeWindowView;->mInteractionEventHandler:Lcom/android/systemui/shade/NotificationShadeWindowViewController$1;
בהצלחה!
@kasnik מחילה שכתבתי באופן לא מובן, כוונתי, ידוע לי שיש מישהו שמסנן ווצאפ, והוא משתמש בgb, על אני שואל למה הוא לא עורך את הרגיל לשימוש כמכשיר מקושר, האם לא ניתן לערוך את הרגיל, הווצאפ מזהה את העריכה?
@מגנוס-קרלסן כוונתי הייתה שהאפליקציה מחלצת קובץ APK מתוך המכשיר..
בכל מקרה התוכנה תומכת בכל סוגי הAPK למיניהם, שכן היא משתמשת בAPKEDITOR.
@שלמה-רביב כל אפליקציה לגופה, זה תלוי במה אומרים לתוכנה לעשות (ע"י קובץ ההכשרה). לדוגמה הספוטיפיי, זה פשוט חוסם את כל התמונות ע"פ המדריך שלי.
אפשר גם לכאורה להסיר דפדפנים פנימיים.
בעזרת ד'
לפניכם תוכנה די פשוטה, שהינה בסיס להכשרת אפליקציות מבוססות עדכונים (כמו ספוטיפיי לדוג').
את התוכנה כמובן פיתח AI, אני רק תיווכתי...

אם יש לכם JAVA אתם יכולים להוריד את הגרסה הזאת:
להורדה
אם אתם לא יודעים מה זה JAVA תורידו את הגרסה הזאת:
להורדה
אם אתם לא יודעים מה זה JAVA אבל בכל זאת רוצים להוריד גרסה ששוקלת טיפה פחות אז אתם יכולים להוריד JAVA מכאן.
קבצי הכשרה:
Spotify
Metrolist
BIT (לא בדיוק הכשרה, פשוט מאפשר התקנה שלא מהחנות)
למעוניינים, אפליקציה לחילוץ APK.
על תכולת התוכנה:
התוכנה היא בעצם סקריפט של פייתון, ומשתמשת בAPKTOOL, APKEDITOR וב-UBER-SIGNER.
למעשה התוכנה יותר בשבילי, ואסביר:
העליתי כאן בעבר אפליקציות ללא תמונות כמו ספוטיפיי או מטרוליסט, עם חצי הדרכה איך לעשות את ההכשרה.
עם הזמן, הפסקתי להשתמש במטרוליסט, וכך גם קצב העדכונים מצידי..
ומכאן הגיע הרעיון להנגיש את ההכשרה למשתמש הפשוט, או הלא פשוט רק שאין לו זמן לעשות את ההכשרה וכו', וכך גם זה מוריד מעלי את הצורך לערוך ולהעלות כל פעם.
התוכנה חצי אוטומטית, כיוון שבאופן ראשוני צריך לדעת (לא המשתמש, מי שיוצר את קובץ העריכה) איך בכלל עורכים ידנית את האפליקציה, ואחרי שיוצרים קובץ פאצ' (עם AI כמובן), כל הגרסאות הבאות יוכלו להיות מוכשרות באופן אוטומטי (כמובן בהנחה שלא השתנו הנתיבים המוחלטים שבתוך האפליקציה, מה שבדרך כלל לא אמור לקרות).
כרגע יש לי שני קבצי הכשרה שמבוססות על המדריכים שלי, לספוטיפיי (כן, יש כאלה שמשלמים על פרימיום..) ולמטרוליסט.
אך כמובן אני מאוד אשמח שתעלו רעיונות לעוד אפליקציות מבוססות עדכונים, או שתשתפו בעריכות קבועות שאתם יודעים לעשות באפליקציות שכאלה, כדי שניצור עוד קבצי הכשרה.
בהצלחה!
נ.ב
האמת היא שגם התחלתי לבנות (AI) אפליקציה שתעשה זאת, אך נתקעתי בשלב החתימה. כל העריכה עובדת, אבל צריך לחתום ידנית. די הרמתי ידיים, מי שירצה להמשיך אותה, יבורך.
אני מתלבט גם אולי לנסות ליצור קבצי פאצ' ללאקי פאצ'ר או לREVANCED מנג'ר, אם מישהו התעסק עם זה פעם אשמח לשמוע.
כהתחלה חשבתי אולי על וואצפ, למרות שיש מישהו שכבר עושה את זה, אבל בשביל ההנגשה, שאלתי לפני שאני ניגש לזה, שכן אין לי וואצפ בכלל: האם ידוע לכם למה הוא לא עורך את הוואצפ הרגיל לשימוש כמכשיר מקושר? וכן אשמח לדעת איזה דברים צריך להכשיר. תודה.
מתלבט אם לפתוח נושא חדש, אשמח לשמוע אם נצרך.
כיוון שאני כבר פחות משתמש עם metrolist, גם פחות דחוף לי להוציא גרסאות חדשות...
אבל כיוון שכן מבקשים ממני, אז פניתי לAI הקרוב לביתי, והוא פיתח תוכנה שאפשר להכשיר על ידה את האפליקציה (מבוסס פייתון ומשתמש בAPKTOOL).
למעשה התוכנה היא בסיס להכשרת אפליקציות מבוססות עדכונים, כך שחוץ ממטרוליסט, היא עובדת גם על ספוטיפיי (תתפלאו אבל יש אנשים שמשלמים על פרימיום אז זה רלוונטי להם..) שיש לי אליו גם כן מדריך, וחשבתי גם אולי לנסות לסנן את הוואטסאפ (GB), ובכללי כל אפליקציה שיש לה עדכונים מידי פעם.
בעיקרון ניסיתי גם לבנות אפליקציה שתעשה את זה, אבל נתקעתי בשלב חתימת האפליקציה הערוכה (כל העריכה עובדת ואם אני חותם עם MT אז זה עובד).
למעשה, להעלות לכאן את התוכנה או לפתוח שרשור חדש? וכן אשמח לשמוע על עצם הרעיון לתוכנה כבסיס להכשרת עוד אפליקציות.
תודה רבה.
@עניו-כמשה זכור לי שבעבר האתר הזה עזר לי (זה נראה לי אותו מפתח שהביאו לעיל, רק דרך הcmd עם כמה פעולות מקדימות).
בהצלחה.
@ילד אאל"ט עם mtk client לא צריך סקאטר.
@tcbr10 זה הלאונצ'ר המקורי של הדוב?
@tcbr10 אולי תעלה לכאן את הלאונצ'ר המובנה, ננסה בלי נדר להתחקות אחרי הטריגר.
ויתכן שזה לא נקלט כיוון שלכאו' הלחיצה עוברת דרך הSYSTEMUI ללאונצ'ר, ויכול להיות שיש החרגה בסיסטם עצמו לשם האפליקציה של הלאונצ'ר...
ואם יש לך כח לעשות זאת בעצמך, אז זה בעצם סוג של הנדסה הפוכה עם AI STUDIO, אם אתה מעוניין אנסה להסביר את מה שאני הייתי עושה.
@קראנץ-ונילה תנסה קודם להתקין את האפליקציה הראשונה (1), מסתבר שזה עבד ל@אביגדור-ברמן בלי השלב השני.
@אביגדור-ברמן
egg.zip
תתקין את האפליקציה שנקראת 1.
תרשם עם המספר (זה מצריך סמס...)
כעת אמור לעבוד, אבל בלי מפות.
אם חשוב לך המפות, אז, דרך המעדכן אפליקציות תעשה הורדה ידנית (התקנה דרך רוט!).
אחרי זה, אל תפתח את האפלקיציה, דרך MT מנג'ר או עורך רוט אחר, תנווט לDATA/APP ותכנס לתיקייה של האפליקציה. תעתיק את האפליקציה השניה (base), לשם (אמור להחליף את base.apk שם). אל תפעיל את האפליקציה, תפעיל מחדש את הטלפון.
אמור לעבוד. בהצלחה.
@אביגדור-ברמן זה לא יעזור, צריך לערוך אותה אחרי התקנה..
עריכה: יכול להיות שכן יש דרך, בלי נדר אבדוק.
הצלחתי להפעיל את האפליקצייה בלי גוגל פליי.
בעזרת הסרטון כאן, הצלחתי להכנס לאפליקציה. אבל, האפליקיציה עצמה לא מזהה את שירותי גוגל, כך שהמפה לא עובדת. באפליקציות אחרות שזה קורה, משום מה התקנה דרך אורורה סטור (או מעדכן אפליקציות אם תרצו), עם ROOT, פותרת את הבעיה של זיהוי שירותי גוגל, (אם תכנסו להגדרות, פרטי אפליקציה תראו שכתוב שזה מותקן דרך גוגל פליי). אבל אז אנחנו חוזרים לאותה בעיה, שבמסך הפתיחה עדיין האפליקציה טוענת שאין גוגל פליי וכו'. אז מה שעשיתי, זה לערוך את האפליקציה (ע"פ הסרטון דלעיל) ישר בdata/app ולא חתמתי (לא בדקתי אם זה קריטי), ואחרי הפעלה מחדש (אילוץ עצירה לא עזר) זה עבד כולל המפה.
אני לא יודע אם העריכה פוגעת ביכולת התשלום.
בהצלחה.