system proxy & build_windows script

This commit is contained in:
wgh19
2024-05-15 20:40:59 +08:00
parent 702fbf42b8
commit 3b9b5b3cb0
6 changed files with 116 additions and 4 deletions

View File

@@ -1,5 +1,29 @@
package com.github.wgh136.pixes
import io.flutter.embedding.android.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugin.common.MethodChannel
import io.flutter.embedding.engine.FlutterEngine
class MainActivity: FlutterActivity()
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
//获取http代理
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
"pixes/proxy"
).setMethodCallHandler { _, res ->
res.success(getProxy())
}
}
private fun getProxy(): String{
val host = System.getProperty("http.proxyHost")
val port = System.getProperty("http.proxyPort")
return if(host!=null&&port!=null){
"$host:$port"
}else{
"No Proxy"
}
}
}

28
build_windows.py Normal file
View File

@@ -0,0 +1,28 @@
import subprocess
import os
fontUse = '''
fonts:
- family: font
fonts:
- asset: assets/SourceHanSansSC-Regular.otf
'''
file = open('pubspec.yaml', 'r')
content = file.read()
file.close()
file = open('pubspec.yaml', 'a')
file.write(fontUse)
file.close()
subprocess.run(["flutter", "build", "windows"], shell=True)
file = open('pubspec.yaml', 'w')
file.write(content)
if os.path.exists("build/app-windows.zip"):
os.remove("build/app-windows.zip")
# 压缩build/windows/x64/runner/Release, 生成app-windows.zip, 使用tar命令
subprocess.run(["tar", "-a", "-c", "-f", "build/app-windows.zip", "-C", "build/windows/x64/runner/Release", "."]
, shell=True)

View File

@@ -7,6 +7,19 @@ import Flutter
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let methodChannel = FlutterMethodChannel(name: "pixes/proxy", binaryMessenger: controller.binaryMessenger)
methodChannel.setMethodCallHandler { [weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
if let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as NSDictionary?,
let dict = proxySettings.object(forKey: kCFNetworkProxiesHTTPProxy) as? NSDictionary,
let host = dict.object(forKey: kCFNetworkProxiesHTTPProxy) as? String,
let port = dict.object(forKey: kCFNetworkProxiesHTTPPort) as? Int {
let proxyConfig = "\(host):\(port)"
result(proxyConfig)
} else {
result("")
}
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

View File

@@ -2,7 +2,10 @@ import 'dart:io';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:flutter/services.dart';
import 'package:pixes/foundation/app.dart';
import 'package:pixes/foundation/log.dart';
import 'package:pixes/utils/ext.dart';
export 'package:dio/dio.dart';
@@ -121,13 +124,34 @@ class AppDio extends DioForNative {
}
void setSystemProxy() {
HttpOverrides.global = _ProxyHttpOverrides();
HttpOverrides.global = _ProxyHttpOverrides()
..findProxy(Uri());
}
class _ProxyHttpOverrides extends HttpOverrides {
String proxy = "DIRECT";
String findProxy(Uri uri) {
// TODO: proxy
return "DIRECT";
if(!App.isLinux) {
var channel = const MethodChannel("pixes/proxy");
channel.invokeMethod("getProxy").then((value) {
if(value == "No proxy"){
proxy = "DIRECT";
} else {
if(proxy.contains("https")){
var proxies = value.split(";");
for (String proxy in proxies) {
proxy = proxy.removeAllBlank;
if (proxy.startsWith('https=')) {
value = proxy.substring(6);
}
}
}
proxy = "PROXY $value";
}
});
}
return proxy;
}
@override

View File

@@ -1,5 +1,6 @@
import Cocoa
import FlutterMacOS
import IOKit.ps
class MainFlutterWindow: NSWindow {
override func awakeFromNib() {
@@ -8,6 +9,22 @@ class MainFlutterWindow: NSWindow {
self.contentViewController = flutterViewController
self.setFrame(windowFrame, display: true)
let proxyChannel = FlutterMethodChannel(
name: "pixes/proxy",
binaryMessenger: flutterViewController.engine.binaryMessenger)
proxyChannel.setMethodCallHandler { (call, result) in
//
if let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as NSDictionary?,
let dict = proxySettings.object(forKey: kCFNetworkProxiesHTTPProxy) as? NSDictionary,
let host = dict.object(forKey: kCFNetworkProxiesHTTPProxy) as? String,
let port = dict.object(forKey: kCFNetworkProxiesHTTPPort) as? Int {
let proxyConfig = "\(host):\(port)"
result(proxyConfig)
} else {
result("No proxy")
}
}
RegisterGeneratedPlugins(registry: flutterViewController)
super.awakeFromNib()

View File

@@ -4,5 +4,11 @@
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>