להורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!
-
@lilo159 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
@צול-גאה @שלום053 בינתיים עד שאפתח נושא:
זה קישור ליוטיוב מיוזיק ללא תמונות למחשבמסתבר שזה חסום לי.
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.4.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 # להוסיף לפני שורה 1 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # עד כאן .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # (!javascriptשימו לב לשורה שאחרי ה) להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector('footer');if(footer)footer.remove();const langSelector=document.querySelector('[jscontroller=\"xiZRqc\"]');if(langSelector)langSelector.remove();const guestModeDiv=document.querySelector('.RDsYTb');if(guestModeDiv)guestModeDiv.remove();document.querySelectorAll('ytmusic-player-page, ytmusic-player-bar[slot=\"player-bar\"], #mini-guide, #guide, ytmusic-nav-bar .left-content, ytmusic-nav-bar .center-content').forEach(element=>{element.style.setProperty('display','none','important')});const navBarRight=document.querySelector('ytmusic-nav-bar .right-content');if(navBarRight){navBarRight.style.setProperty('margin-left','auto','important')}const popup=document.querySelector('tp-yt-iron-dropdown');if(popup&&popup.style.display!=='none'){const header=popup.querySelector('ytd-active-account-header-renderer');if(header)header.style.setProperty('display','none','important');popup.querySelectorAll('yt-multi-page-menu-section-renderer').forEach(section=>{if(!section.querySelector('a[href=\"/logout\"]')){section.style.setProperty('display','none','important')}else{section.querySelectorAll('ytd-compact-link-renderer').forEach(item=>{if(!item.contains(section.querySelector('a[href=\"/logout\"]'))){item.style.setProperty('display','none','important')}})}})}const immersiveBackground=document.querySelector('#background.immersive-background');if(immersiveBackground){immersiveBackground.style.setProperty('display','none','important')}const chipContainer=document.querySelector('ytmusic-chip-cloud-renderer');if(chipContainer){chipContainer.style.setProperty('display','none','important')}const allShelves=document.querySelectorAll('ytmusic-carousel-shelf-renderer');allShelves.forEach((shelf,index)=>{if(index===0){const carousel=shelf.querySelector('#ytmusic-carousel');if(carousel)carousel.style.setProperty('display','none','important');const header=shelf.querySelector('ytmusic-carousel-shelf-basic-header-renderer');if(header){const strapline=header.querySelector('.strapline');if(strapline)strapline.style.setProperty('display','none','important');const buttonGroup=header.querySelector('#button-group');if(buttonGroup)buttonGroup.style.setProperty('display','none','important')}const navButtons=shelf.querySelector('.button-group.style-scope.ytmusic-carousel-shelf-renderer');if(navButtons)navButtons.style.setProperty('display','none','important')}else{shelf.style.setProperty('display','none','important')}});const tastebuilder=document.querySelector('ytmusic-tastebuilder-shelf-renderer');if(tastebuilder){tastebuilder.style.setProperty('display','none','important')}const titleElement=document.querySelector('ytmusic-carousel-shelf-renderer yt-formatted-string.title');if(titleElement){const newText='אם זאת פעם ראשונה שאתם נכנסים, אתם יכולים לחזור כעת לאפליקציה (מומלץ לסגור לגמרי את האפליקציה ולפתוח מחדש, כדי שהיא תקלוט שנכנסתם), אם כבר הייתם מחוברים ואתם רוצים להחליף חשבון, צאו מהחשבון (לחיצה על העיגול) והתחילו מחדש את התהליך.';if(titleElement.textContent!==newText){titleElement.textContent=newText;titleElement.style.setProperty('direction','rtl','important');titleElement.style.setProperty('white-space','normal','important');titleElement.style.setProperty('text-overflow','clip','important');titleElement.style.setProperty('overflow','visible','important');titleElement.style.setProperty('height','auto','important');titleElement.style.setProperty('font-size','16px','important');titleElement.style.setProperty('font-weight','normal','important');titleElement.style.setProperty('line-height','1.5','important');titleElement.style.setProperty('color','white','important')}}}cleanPage();const observer=new MutationObserver(()=>{cleanPage()});observer.observe(document.body,{childList:true,subtree:true})})();" # עם הנתיב הנכון la/g2 שימו לב שכאן צריך להחליף את # (שבעוד כמה שורות .line 8 כמו נגיד אחרי) אפשר למצוא דוגמאות ברחבי הקוד iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
@lilo159 מי שרוצה מתורגם Metrolistkosher.zip
@אלוף-תימן אני יכול להגיש לציבור את האפליקיצה שתרגמת בפוסט הראשון?
-
@אלוף-תימן אני יכול להגיש לציבור את האפליקיצה שתרגמת בפוסט הראשון?
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.4.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 # להוסיף לפני שורה 1 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # עד כאן .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # (!javascriptשימו לב לשורה שאחרי ה) להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector('footer');if(footer)footer.remove();const langSelector=document.querySelector('[jscontroller=\"xiZRqc\"]');if(langSelector)langSelector.remove();const guestModeDiv=document.querySelector('.RDsYTb');if(guestModeDiv)guestModeDiv.remove();document.querySelectorAll('ytmusic-player-page, ytmusic-player-bar[slot=\"player-bar\"], #mini-guide, #guide, ytmusic-nav-bar .left-content, ytmusic-nav-bar .center-content').forEach(element=>{element.style.setProperty('display','none','important')});const navBarRight=document.querySelector('ytmusic-nav-bar .right-content');if(navBarRight){navBarRight.style.setProperty('margin-left','auto','important')}const popup=document.querySelector('tp-yt-iron-dropdown');if(popup&&popup.style.display!=='none'){const header=popup.querySelector('ytd-active-account-header-renderer');if(header)header.style.setProperty('display','none','important');popup.querySelectorAll('yt-multi-page-menu-section-renderer').forEach(section=>{if(!section.querySelector('a[href=\"/logout\"]')){section.style.setProperty('display','none','important')}else{section.querySelectorAll('ytd-compact-link-renderer').forEach(item=>{if(!item.contains(section.querySelector('a[href=\"/logout\"]'))){item.style.setProperty('display','none','important')}})}})}const immersiveBackground=document.querySelector('#background.immersive-background');if(immersiveBackground){immersiveBackground.style.setProperty('display','none','important')}const chipContainer=document.querySelector('ytmusic-chip-cloud-renderer');if(chipContainer){chipContainer.style.setProperty('display','none','important')}const allShelves=document.querySelectorAll('ytmusic-carousel-shelf-renderer');allShelves.forEach((shelf,index)=>{if(index===0){const carousel=shelf.querySelector('#ytmusic-carousel');if(carousel)carousel.style.setProperty('display','none','important');const header=shelf.querySelector('ytmusic-carousel-shelf-basic-header-renderer');if(header){const strapline=header.querySelector('.strapline');if(strapline)strapline.style.setProperty('display','none','important');const buttonGroup=header.querySelector('#button-group');if(buttonGroup)buttonGroup.style.setProperty('display','none','important')}const navButtons=shelf.querySelector('.button-group.style-scope.ytmusic-carousel-shelf-renderer');if(navButtons)navButtons.style.setProperty('display','none','important')}else{shelf.style.setProperty('display','none','important')}});const tastebuilder=document.querySelector('ytmusic-tastebuilder-shelf-renderer');if(tastebuilder){tastebuilder.style.setProperty('display','none','important')}const titleElement=document.querySelector('ytmusic-carousel-shelf-renderer yt-formatted-string.title');if(titleElement){const newText='אם זאת פעם ראשונה שאתם נכנסים, אתם יכולים לחזור כעת לאפליקציה (מומלץ לסגור לגמרי את האפליקציה ולפתוח מחדש, כדי שהיא תקלוט שנכנסתם), אם כבר הייתם מחוברים ואתם רוצים להחליף חשבון, צאו מהחשבון (לחיצה על העיגול) והתחילו מחדש את התהליך.';if(titleElement.textContent!==newText){titleElement.textContent=newText;titleElement.style.setProperty('direction','rtl','important');titleElement.style.setProperty('white-space','normal','important');titleElement.style.setProperty('text-overflow','clip','important');titleElement.style.setProperty('overflow','visible','important');titleElement.style.setProperty('height','auto','important');titleElement.style.setProperty('font-size','16px','important');titleElement.style.setProperty('font-weight','normal','important');titleElement.style.setProperty('line-height','1.5','important');titleElement.style.setProperty('color','white','important')}}}cleanPage();const observer=new MutationObserver(()=>{cleanPage()});observer.observe(document.body,{childList:true,subtree:true})})();" # עם הנתיב הנכון la/g2 שימו לב שכאן צריך להחליף את # (שבעוד כמה שורות .line 8 כמו נגיד אחרי) אפשר למצוא דוגמאות ברחבי הקוד iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
-
עודכן לגרסה 12.4.0
כמו כן שינתי את העריכה של הwebview. -
אז מסתבר שמשום מה, כשלאפליקציה אין גישה לקישורים של התמונות, בין אם זה ע"י שערכתי את האפליקיצה, ובין אם זה ע"י הוסטים, היא שולחת תמונה "ריקה" כביכול למערכת (לnotifications), מה שמקריס את המערכת. הטלפון שלי היה על לופים, קריסה, המסך הידוע לשמצה של בחירה בין wipe data לreboot, וחוזר חלילה, עד שהצלחתי למחוק את האפליקציה. בהתחלה באמת חשבתי שזה בגלל העריכה שעשיתי, אבל גם כשהתקנתי את הרגיל, כיוון שהיו לי קישורים בhosts שחסמו את התמונות, אותו דבר.
כרגע אין לי פתרון, אז אני משנמך חזרה ל12.3.0, עם העריכה החדשה לwebview שמשמעותית בפני עצמה.
אם למישהו יש רעיון מה לעשות כמובן שאשמח לשמוע...שונמך לגרסה 12.3.0 עם העריכה החדשה לwebview.
-
אז מסתבר שמשום מה, כשלאפליקציה אין גישה לקישורים של התמונות, בין אם זה ע"י שערכתי את האפליקיצה, ובין אם זה ע"י הוסטים, היא שולחת תמונה "ריקה" כביכול למערכת (לnotifications), מה שמקריס את המערכת. הטלפון שלי היה על לופים, קריסה, המסך הידוע לשמצה של בחירה בין wipe data לreboot, וחוזר חלילה, עד שהצלחתי למחוק את האפליקציה. בהתחלה באמת חשבתי שזה בגלל העריכה שעשיתי, אבל גם כשהתקנתי את הרגיל, כיוון שהיו לי קישורים בhosts שחסמו את התמונות, אותו דבר.
כרגע אין לי פתרון, אז אני משנמך חזרה ל12.3.0, עם העריכה החדשה לwebview שמשמעותית בפני עצמה.
אם למישהו יש רעיון מה לעשות כמובן שאשמח לשמוע...שונמך לגרסה 12.3.0 עם העריכה החדשה לwebview.
-
אז מסתבר שמשום מה, כשלאפליקציה אין גישה לקישורים של התמונות, בין אם זה ע"י שערכתי את האפליקיצה, ובין אם זה ע"י הוסטים, היא שולחת תמונה "ריקה" כביכול למערכת (לnotifications), מה שמקריס את המערכת. הטלפון שלי היה על לופים, קריסה, המסך הידוע לשמצה של בחירה בין wipe data לreboot, וחוזר חלילה, עד שהצלחתי למחוק את האפליקציה. בהתחלה באמת חשבתי שזה בגלל העריכה שעשיתי, אבל גם כשהתקנתי את הרגיל, כיוון שהיו לי קישורים בhosts שחסמו את התמונות, אותו דבר.
כרגע אין לי פתרון, אז אני משנמך חזרה ל12.3.0, עם העריכה החדשה לwebview שמשמעותית בפני עצמה.
אם למישהו יש רעיון מה לעשות כמובן שאשמח לשמוע...שונמך לגרסה 12.3.0 עם העריכה החדשה לwebview.
-
@lilo159 יש לי את הקודם והוא עובד לי על שתי מכשירים ממש טוב
עכשיו אני מנסה להוריד את מה שהעלתה מחדש הוא לא נותן -
עודכן לגרסה 12.4.0
תוקנה הבעיה שהיתה, בעזרת ד' אסביר מאוחר יותר מה קרה.
בכל מקרה השארתי את הגרסה הקודמת למעוניינים. -
אז ככה, מסתבר שזו בעיה ידועה כבר בexoplayer, דווח על זה כאן, וכאן נפתחה על זה בעיה רשמית (בissuetracker), עם אותה שגיאה בדיוק שהיתה לי.
ממה שבדקתי, זה קורה רק באנדרואיד 11, ב10 ו12 זה לא קרס.
למעשה בסוף (אחרי שהגעתי כמעט למליון טוקנים בai studio) ערכתי את הקוד כך שהוא לא ישלח את הBitmap, ובזה נפתרה הבעיה.
אני לא אעדכן את השינוי בקוד (שבספולייר), כי בדקתי עכשיו גרסאות דיבוג והוא כנראה שינה משהו וזה כבר לא קורס.
אז למה כל זה חשוב? כי כפי ש @נחמן-פלח העלה את הנקודה, שזה יכול לשמש כווירוס. אז אמנם זה לא היה כאן בכוונת מתכוון של המפתח, אבל זה לא כל כך רגיל להצליח להקריס מערכת וכמעט להשבית טלפון (ניסיתי גם על אמולטור אונליין, זה הקריס גם אותו), ע"י אפליקציית משתמש בלי רוט. זה יכל גם להשבית טלפון של מישהו שהוריד את האפליקציה המקורית ללא עריכה שלי, ויש לו סינון על הטלפון שחוסם תמונות, ויש לו אנדרואיד 11, וזהו, יכול ללכת הטלפון. -