מדריך | Webview מסונן (רוט)
-
בין הזמנים וזה...
תמיד הפרוייקטים האלו נראים יותר גדולים ממה שהם...

בקיצור,
כמו תמיד, הAI הוא המתכנת, אבל האחריות עליכם...נתחיל מאיך זה מסנן:
אתם מאחסנים קודם כל איפה שהוא באינטרנט (נגיד בגיטהאב, בתור קובץ RAW) קובץ JSON בפורמט הזה:{ "global_whitelist":[ "example.com", "more-example.com" ], "apps": { "com.example.blocked_app": { "policy": "blocked" }, "com.tranzmate": { "policy": "open" }, "com.waze": { "policy": "global" }, "com.example.custom_app": { "policy": "custom", "custom_whitelist":[ "myspecial-api.com", "private-server.net" ] } } }יש כאן ארבעה מצבים:
- blocked - חוסם את כל הקישורים באפליקציה
- open - פותח את כל הקישורים באפליקציה
- global - פותח רק את הקישורים שהוגדרו בתוך global_whitelist
- custom - פותח רק את הקישורים שהוגדרו custom_whitelist
באם אפליקציה לא הוגדרה בתוך הרשימה, היא כמובן פשוט תהיה על מצב גלובלי.
וכן, אם לא הWEBVIEW לא יצליח לקבל את הרשימה, אז הכל יהיה חסום. (לומדים מטעויות, ע"ע אורורה סטור...)העריכה שאנחנו עושים לאפליקציה מוסיפה לה לוגים, כך שאפשר לראות את הקישור החסום שניסינו להכנס אליו לצורך פתיחה שלו.
כמו כן ישנה תמיכה בקישורים מלאים, דהיינו, אם אנחנו רוצים לפתוח קישור מסויים, אבל פתיחה של הHOST תפתח גם קישור אחר שאנחנו לא רוצים, בשביל זה אפשר לציין את הנתיב המלא או היותר כולל, דהיינו:
אם נזין את הקישור הזה:example.com/exampleאז הקישור הזה יהיה חסום:
example.com/bad-exampleעכשיו לשינויים בתוך האפליקציה:
למעשה לא ניסיתי את זה על הWEBVIEW של גוגל, כי אני משתמש בדאמבדרויד, שזה סוג של linageOS, שמשתמש בWEBVIEW משלו, אבל אולי זה אפשרי להשתמש איתו גם בגרסאות אחרות, איני יודע. אם יהיה ביקוש אני אנסה בלי נדר על של גוגל, אבל לכאורה יש להם הגנות. נראה.האפליקציה נמצאת בנתיב /product/app/webview/
- בנתיב com/android/webview/chromium
ליצור את הקלאס UrlFetcher
שזה תוכנו:
.class public Lcom/android/webview/chromium/UrlFetcher; .super Ljava/lang/Thread; .field public static sJsonConfig:Lorg/json/JSONObject; .method static constructor <clinit>()V .registers 1 const/4 v0, 0x0 sput-object v0, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject; return-void .end method .method public constructor <init>()V .registers 1 invoke-direct {p0}, Ljava/lang/Thread;-><init>()V return-void .end method .method public static isAllowed(Ljava/lang/String;)Z .registers 11 const/4 v0, 0x0 const/4 v2, 0x1 if-nez p0, :cond_0 return v0 :cond_0 # === 1. הדפסת הכתובת המלאה והמקורית מיד כשהיא מגיעה === const-string v1, "UrlFetcher" new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V const-string v4, ">>> Intercepted URL: " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-static {v1, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I const-string v1, "javascript:" invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_1 return v2 :cond_1 const-string v1, "data:text/html" invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_2 return v2 :cond_2 # === 2. חילוץ ה-Host לצורך הדפסה בלוגקט (כמו שביקשת) === invoke-static {p0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri; move-result-object v3 invoke-virtual {v3}, Landroid/net/Uri;->getHost()Ljava/lang/String; move-result-object v3 if-nez v3, :print_host goto :host_done :print_host const-string v1, "UrlFetcher" new-instance v4, Ljava/lang/StringBuilder; invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V const-string v5, ">>> Extracted Host: " invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v4 invoke-static {v1, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :host_done # הופך את הכתובת לאותיות קטנות למניעת בעיות Case Sensitivity (שומר במשתנה v3) invoke-virtual {p0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v3 # === 3. המתנה לקובץ ה-JSON מגיטהאב === const/4 v4, 0x0 :wait_loop sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject; if-nez v1, :after_wait const-wide/16 v5, 0x64 :try_start_sleep invoke-static {v5, v6}, Ljava/lang/Thread;->sleep(J)V :try_end_sleep .catch Ljava/lang/Exception; {:try_start_sleep .. :try_end_sleep} :catch_sleep :catch_sleep add-int/lit8 v4, v4, 0x1 const/16 v5, 0x1e if-lt v4, v5, :wait_loop :after_wait sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject; if-nez v1, :config_ok const-string v1, "UrlFetcher" const-string v3, ">>> JSON is NULL! Blocking for safety." invoke-static {v1, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I return v0 :config_ok # === 4. שליפת האפליקציה הנוכחית והמדיניות שלה מה-JSON === invoke-static {}, Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String; move-result-object v4 if-nez v4, :pkg_ok const-string v4, "unknown_package" :pkg_ok const-string v5, "apps" invoke-virtual {v1, v5}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject; move-result-object v5 const-string v6, "global" if-nez v5, :check_app_node goto :policy_set :check_app_node invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject; move-result-object v5 if-nez v5, :get_policy goto :policy_set :get_policy const-string v7, "policy" invoke-virtual {v5, v7, v6}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v6 :policy_set const-string v7, "UrlFetcher" new-instance v8, Ljava/lang/StringBuilder; invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V const-string v9, ">>> App: " invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v4, " | Policy: " invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v4 invoke-static {v7, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I # === 5. אכיפת המדיניות (פתוח/חסום/כללי/מותאם) === const-string v4, "blocked" invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v4 if-eqz v4, :check_open return v0 :check_open const-string v4, "open" invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v4 if-eqz v4, :check_custom return v2 :check_custom const-string v4, "custom" invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v4 if-eqz v4, :check_global if-nez v5, :load_custom return v0 :load_custom const-string v4, "custom_whitelist" invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray; move-result-object v1 goto :process_array :check_global const-string v4, "global_whitelist" invoke-virtual {v1, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray; move-result-object v1 :process_array if-nez v1, :array_loop_init return v0 :array_loop_init invoke-virtual {v1}, Lorg/json/JSONArray;->length()I move-result v4 const/4 v5, 0x0 :array_loop if-ge v5, v4, :array_end invoke-virtual {v1, v5}, Lorg/json/JSONArray;->optString(I)Ljava/lang/String; move-result-object v6 if-eqz v6, :array_next invoke-virtual {v6}, Ljava/lang/String;->isEmpty()Z move-result v7 if-nez v7, :array_next # טריק ההתאמה המדויקת למניעת עקיפות! invoke-virtual {v6}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v6 # בדיקה 1: מתחיל ב- :// new-instance v7, Ljava/lang/StringBuilder; invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V const-string v8, "://" invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v7 invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z move-result v7 if-eqz v7, :check_dot goto :found_match :check_dot # בדיקה 2: מתחיל ב- . new-instance v7, Ljava/lang/StringBuilder; invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V const-string v8, "." invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v7 invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z move-result v7 if-eqz v7, :array_next :found_match # === 6. לוג מיוחד שמדפיס איזה חוק ספציפי אישר את הגישה === const-string v0, "UrlFetcher" new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V const-string v3, ">>> ALLOWED by rule: " invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I return v2 :array_next add-int/lit8 v5, v5, 0x1 goto :array_loop :array_end const-string v1, "UrlFetcher" const-string v2, ">>> BLOCKED (Not in whitelist)" invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I return v0 .end method .method public run()V .registers 4 const-string v0, "UrlFetcher" const-string v1, ">>> Starting JSON config download..." invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :try_start_0 new-instance v0, Ljava/net/URL; # ========================================================= # הדבק כאן את כתובת ה-RAW של קובץ ה-JSON שלך # ========================================================= const-string v1, "https://raw.githubusercontent.com/YOUR_USER/YOUR_REPO/main/config.json" invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection; move-result-object v0 const/16 v1, 0x1388 invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V invoke-virtual {v0}, Ljava/net/URLConnection;->getInputStream()Ljava/io/InputStream; move-result-object v0 new-instance v1, Ljava/util/Scanner; invoke-direct {v1, v0}, Ljava/util/Scanner;-><init>(Ljava/io/InputStream;)V const-string v0, "\\A" invoke-virtual {v1, v0}, Ljava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner; move-result-object v0 invoke-virtual {v0}, Ljava/util/Scanner;->hasNext()Z move-result v1 if-eqz v1, :cond_empty invoke-virtual {v0}, Ljava/util/Scanner;->next()Ljava/lang/String; move-result-object v0 new-instance v1, Lorg/json/JSONObject; invoke-direct {v1, v0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V sput-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject; const-string v0, "UrlFetcher" const-string v1, ">>> JSON Config successfully parsed and loaded!" invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_end :cond_empty const-string v0, "UrlFetcher" const-string v1, ">>> JSON file is EMPTY!" invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I :goto_end :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 return-void :catch_0 move-exception v0 const-string v1, "UrlFetcher" const-string v2, ">>> JSON Download FAILED!" invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I return-void .end methodתסתכלו על שורה 260, שם אתם צריכים להדביק את הקישור לקובץ שלכם.
- באותו נתיב (com/android/webview/chromium)
בקלאס WebViewChromium
במתודה method public init(Ljava/util/Map;Z)V
מיד אחרי השורה של הREGISTERS להדביק כך:
.method public init(Ljava/util/Map;Z)V .registers 21 #להדביק מכאן new-instance v0, Lcom/android/webview/chromium/UrlFetcher; invoke-direct {v0}, Lcom/android/webview/chromium/UrlFetcher;-><init>()V invoke-virtual {v0}, Lcom/android/webview/chromium/UrlFetcher;->start()V #עד כאן .line 1 move-object/from16 v1, p0בשני המתודות שנקראות loadUrl
להוסיף 5 רגיסטרים
וג"כ באותו אופן להדביק את הקוד הבא אחרי השורה של הREGISTERS:# --- מנגנון חסימה חכם --- invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z move-result v0 # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור! if-nez v0, :allow_url_load # חסימה אלגנטית iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView; const-string v1, "http://blocked.local" const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>" const-string v3, "text/html" const-string v4, "utf-8" const/4 v5, 0x0 invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V return-void :allow_url_load.method public loadUrl(Ljava/lang/String;)V .registers 10 # כאן הוספנו 5 # --- מנגנון חסימה חכם --- invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z move-result v0 # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור! if-nez v0, :allow_url_load # חסימה אלגנטית iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView; const-string v1, "http://blocked.local" const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>" const-string v3, "text/html" const-string v4, "utf-8" const/4 v5, 0x0 invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V return-void :allow_url_load.method public loadUrl(Ljava/lang/String;Ljava/util/Map;)V .registers 11 # גם כאן הוספנו 5 # --- מנגנון חסימה חכם --- invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z move-result v0 # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור! if-nez v0, :allow_url_load # חסימה אלגנטית iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView; const-string v1, "http://blocked.local" const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>" const-string v3, "text/html" const-string v4, "utf-8" const/4 v5, 0x0 invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V return-void :allow_url_loadבנתיב org/chromium/android_webview
בקלאס AwContentsClientBridge
במתודה shouldOverrideUrlLoading
אחרי השורה של הREGISTERS להוסיף את הקוד הבא:.method public final shouldOverrideUrlLoading(Ljava/lang/String;ZZ[Ljava/lang/String;[Ljava/lang/String;Z)Z .registers 16 #להוסיף מכאן # יירוט ניווט פנימי invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z move-result v0 # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור! if-nez v0, :allow_url # חסימה אלגנטית: טעינת HTML תוך זיוף כתובת iget-object v0, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5; check-cast v0, LWV/vD; iget-object v0, v0, LWV/vD;->e:Landroid/webkit/WebView; const-string v1, "http://blocked.local" const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>" const-string v3, "text/html" const-string v4, "utf-8" const/4 v5, 0x0 invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V const/4 v0, 0x1 return v0 :allow_url #עד כאןשימו לב לשורות 12-14 שזה תלוי בגרסה שיש לכם, אז תוודאו את שורה 12, ע"י שתסתכלו בקוד של גרסתכם, מיד אחרי .line 29
אמורה להיות שורה כזאת:iget-object v1, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5;הסוף של השורה (a:LWV/N5) זה מה שאמור להיות בסוף שורה 12
ואת שורה 13-14 תוודאו ע"י שתסתכלו על השורה שאחרי .line 91.line 91 iget-object v4, v8, LWV/vD;->e:Landroid/webkit/WebView;מה שבערך באמצע השורה ( LWV/vD;) זה מה שצריך להיות בסוף של שורה 13
ובשורה 14 גם מה שאחרי החץ (LWV/vD;->e).
או יותר פשוט, תשאלו את הAI הקרוב לביתכם איך להתאים בדיוק את הקוד, ותשמשו במייצא השרשורים של @ nh.local, זה אחלה דבר!בהצלחה!
-
אם זה מעניין מישהו, יצרתי (AI) ממשק בVERCEL, לשליטה על הקובץ בצורה נוחה, כולל חיפוש אפליקציות בגוגל פליי, לא השקעתי יותר מידי, זה פשוט שימושי. אז אם מישהו מעוניין בקוד הפרוייקט שיעדכן.
דרך אגב, אני עכשיו קולט שהסינון הזה מגשים את המטרה של הWEBVIEW באפליקציות. אני מניח שהמפתחים באמת לא מחפשים פרצות לדפדפן, אלא להגיש תמיכה, וכעת זה אפשרי למקד את הWEBVIEW לקישורים מותרים, בלי לגלוש בטעות ליוטיוב ושאר ירקות...
-
אם זה מעניין מישהו, יצרתי (AI) ממשק בVERCEL, לשליטה על הקובץ בצורה נוחה, כולל חיפוש אפליקציות בגוגל פליי, לא השקעתי יותר מידי, זה פשוט שימושי. אז אם מישהו מעוניין בקוד הפרוייקט שיעדכן.
דרך אגב, אני עכשיו קולט שהסינון הזה מגשים את המטרה של הWEBVIEW באפליקציות. אני מניח שהמפתחים באמת לא מחפשים פרצות לדפדפן, אלא להגיש תמיכה, וכעת זה אפשרי למקד את הWEBVIEW לקישורים מותרים, בלי לגלוש בטעות ליוטיוב ושאר ירקות...
-
@lilo159 נראה ממש טוב.
נשמח אם יהיה אפשר לערוך בזה את הAPK עצמו
שפשוט יהיה אפשר לבחור מה כן ייפתח ולקבל אותו מקומפל וללא צורך בעריכה ידנית... -
@lilo159 נראה ממש טוב.
נשמח אם יהיה אפשר לערוך בזה את הAPK עצמו
שפשוט יהיה אפשר לבחור מה כן ייפתח ולקבל אותו מקומפל וללא צורך בעריכה ידנית...@נוחעם-FM חשבתי על זה שוב, למה בעצם זה יהיה לך נוח?
הרי בשביל כל שינוי קטן תצטרך להוריד שוב 150 מ"ב של אפליקציה..
חוץ מזה שהאתר משתמש בAPI של גוגל לצורך חיפוש, וזה ייגמר מאוד מהר אם אני אפרסם את זה..
ממליץ לך כן ללכת על הגישה שכתבתי, אני יכול אפילו להביא לך קובץ מוכן, ואני אעזור לך בהגדרה של האתר של השליטה על הקובץ..