From c999ee6f69266f35c75bb481d5542d1ba900addb Mon Sep 17 00:00:00 2001 From: yjj38 Date: Thu, 3 Jul 2025 17:25:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor(proxy):=20=E7=A7=BB=E9=99=A4=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E6=A3=80=E6=9F=A5=E5=9B=BD=E5=AE=B6=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=20VPN=20=E5=90=AF=E5=8A=A8=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了 ClashUtil 类中的 checkCountryIsUS 方法,移除了检查国家是否为美国的功能 - 修改了 LoadDeviceWorker 类中的 startProxyVpn 方法,去除了返回值,简化了逻辑- 优化了 executeSingleLogic 方法的流程,移除了与代理检查国家相关的代码 --- .../com/example/studyapp/proxy/ClashUtil.java | 51 ------------------ .../studyapp/worker/LoadDeviceWorker.java | 10 +--- app/src/main/jniLibs/arm64-v8a/libnative.so | Bin 78320 -> 81488 bytes 3 files changed, 2 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java b/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java index 131edab..d69f4e3 100644 --- a/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java +++ b/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java @@ -139,55 +139,4 @@ public class ClashUtil { System.out.println("Failed to switch proxy: " + e.getMessage()); } } - - - public static boolean checkCountryIsUS() { - Request request = new Request.Builder() - .url("http://ipinfo.io/json") - .build(); - OkHttpClient client = new OkHttpClient(); - try (Response response = client.newCall(request).execute()) { // Synchronous call - if (!response.isSuccessful()) { - // Server returned an error - Log.e("ClashUtil", "OkHttp request unsuccessful: " + response.code()); - // Consider how to handle this error synchronously. - // Maybe throw an exception or return a specific error indicator. - return false; // Or throw new IOException("Request failed with code " + response.code()); - } - - try (ResponseBody responseBody = response.body()) { - if (responseBody == null) { - Log.e("ClashUtil", "Response body is null"); - return false; // Or throw new IOException("Response body is null"); - } - - String jsonData = responseBody.string(); - JSONObject jsonObject = new JSONObject(jsonData); - String country = jsonObject.optString("country"); - boolean isUS = "US".equalsIgnoreCase(country); - - if (isUS) { - Log.i("ClashUtil", "Country is US. Full data: " + jsonData); - } else { - Log.i("ClashUtil", "Country is NOT US. It is: " + (country.isEmpty() ? "未知" : country) + ". Full data: " + jsonData); - } - return isUS; - - } catch (JSONException e) { - Log.e("ClashUtil", "JSON parsing error: ", e); - // Consider re-throwing or returning an error indicator - return false; - } catch (IOException e) { - Log.e("ClashUtil", "IOException reading response body: ", e); - // Consider re-throwing or returning an error indicator - return false; - } - } catch (IOException e) { - // Network request failed - Log.e("ClashUtil", "OkHttp request failed: ", e); - // Consider re-throwing or returning an error indicator - return false; - } - } - } diff --git a/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java b/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java index 32bf14a..92aca8e 100644 --- a/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java +++ b/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java @@ -64,9 +64,7 @@ public class LoadDeviceWorker extends CoroutineWorker { public void executeSingleLogic(Context context) { LogFileUtil.logAndWrite(Log.INFO, "MainActivity", "executeSingleLogic: Proxy not active, starting VPN",null); - if (!startProxyVpn(context)){ - return; - } + startProxyVpn(context); LogFileUtil.logAndWrite(Log.INFO, "MainActivity", "executeSingleLogic: Changing device info",null); ChangeDeviceInfoUtil.changeDeviceInfo(context.getPackageName(), context); LogFileUtil.logAndWrite(Log.INFO, "MainActivity", "executeSingleLogic: Running AutoJs script",null); @@ -74,11 +72,10 @@ public class LoadDeviceWorker extends CoroutineWorker { AutoJsUtil.runAutojsScript(context); } - private boolean startProxyVpn(Context context) { + private void startProxyVpn(Context context) { if (!isNetworkAvailable(context)) { Toast.makeText(context, "Network is not available", Toast.LENGTH_SHORT).show(); LogFileUtil.logAndWrite(Log.ERROR, "MainActivity", "startProxyVpn: Network is not available.",null); - return false; } // if (!(context instanceof Activity)) { @@ -86,15 +83,12 @@ public class LoadDeviceWorker extends CoroutineWorker { // LogFileUtil.logAndWrite(Log.ERROR, "MainActivity", "startProxyVpn: Context is not an Activity.",null); // return; // } - try { ClashUtil.startProxy(context); // 在主线程中调用 ClashUtil.switchProxyGroup("GLOBAL", "us", "http://127.0.0.1:6170"); - return ClashUtil.checkCountryIsUS(); } catch (Exception e) { LogFileUtil.logAndWrite(Log.ERROR, "MainActivity", "startProxyVpn: Failed to start VPN",e); Toast.makeText(context, "Failed to start VPN: " + (e.getMessage() != null ? e.getMessage() : "Unknown error"), Toast.LENGTH_SHORT).show(); - return false; } } } diff --git a/app/src/main/jniLibs/arm64-v8a/libnative.so b/app/src/main/jniLibs/arm64-v8a/libnative.so index 0bc57f51b578921f3c5f105175a30e0aed084acf..0630454ec86547a109d68fd6735efd5a36efcb9a 100644 GIT binary patch delta 11699 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 delta 10851 zcmZ{K30zgx_W$1J-gCLYg^P^m9%cl*h>Qv{U6DaRalm;-a3&Q^=;e%-mNp2wQq(j} zbGBYagWAh%w(OaWPcx?m^I5(0^~~me-*v9yt^R*M9}a7M*V=2^YY*q(iC@fDJ~OvC zl_xvz@4QF}e)zs$x6Ha&^VXH4%fC(e?7Nhz3`ZV4DkEB}x=VB0C(79*pT;y{{JX0k zz1k(ix)ZEbdOgziYnS^K?}mXwn3cIc`)E~~)^xZ~2rsj@FbVNWCkRZveV!`AV4v%e zLP(#w03j5gLqmix`7F*YeVRpER9~w z@>0(C0m-H;YL1@}h4gh+j5-Nr{E|9k7x~3vijlHV>Xk*Qw55BPSKv#k5Mwjxk!;P3 zaC*}EY^PF{1KvUDSr*GHi0@h_O6_h$y9S=8XM!_aphuFr$EW-Ypo+39w=3a2JZC(Z z8vsU^K=>5;j}^$?-Jw2*(2mi%?lIDz4t9_5{ZFwFB^avAQ|R5S5L?LAE<#-G17Lwd zwb`NS|H_3}ND(;+imap=IZhIM_z~q4B>CQrP|mWU?Fwzl3AKeRLE}B;1>kXodgkh;kRK~) zZ-LY6{n5alR;al|SB@pp_XSbvY7}J&Ib6}!{h1IxuXJ4P3ikUD2F|kb3(7$kNmr0x zHAlo6FDe(@NL+>x=qI7P#LdJyB`zV}!PcU@q6{!Gq7KJGX{A%He05ir5U0q|BSKYc zgcwYDpwd!=*iNH+xYRR{uA)uAn&D?N9qth$uhTg^-(Fo9p(d3I(V1ckBWzD%QC#A} zoKY52ONqn6yVDol=!rs&78g3zTo~U=j~B-H-H&bLDPHowDreK^YEiKAYa(4KtguW% z*?-EXaXmGj9(%SB6;$0bM!rZ*J>xAki0QSC^leY0;WtA!vJ#wwnu{%#F^D5{DA;Jf zXOOxbov#QJ>H+g|Ii(lHTQ)<*JcvdWMO)rM@|uaZ6d9&U5a{O#;G*SvI#Lv`D%dpN zqO@WM?*p%48pcOada>b1oo^N59Aq)d7fCd*I9kTg?ZxqO1FbENw-jKY9!wXCH9A@B zw46o6UyTOqpy(2dx)1GqjXIY^cwHz%czz~oD#ntU(piWf69Cu&bPZL{p^)LUq9k5! zq$f(Ew5sCZI`La-Xl&+V>t1A$-gJQ~~Wq0aX9wB{cY01k-l>a$8_0BCrJE zrcrBoR@Vu<$m>kym|sr?6HdYkY(vU46CaeGqH*+lxh|)YUQsOrX>LWhItMf4L+dNT zaS%LH5iKj|!-_(+b8jI=k)wCGI=`0?cT#Te7&(SU;c2J&y(82~_qjnPewDO*55p25);y%HH=uF?-;-y^a(;mXz zxW|Z)Wg$Y`fjv<<>p6uy3&F-?EK(C8hwyBn5&dG-&Dd0)rbYe2Wi4&!*He8QwUu

8(Ar=g@sG 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�X~eddIAFK(Q@7~Wa?&YN*~0d+GB&lum( zSlc+M$#CTsO|6~HlE%6jx5BQQ>9&361W5l#vKMy|+(F$a2a45R8n!mO7PE(uR`|q} zfnx77C*CogO*a9aU`!>WZaFL%B^h@kMk7SGw~2K#jSx{;wuv2wVQ0t+63m(bd|hfMrGRw2#;