इस दस्तावेज़ में, अपने मोबाइल ऐप्लिकेशन में Outline SDK टूल को इंटिग्रेट करने का तरीका बताया गया है. इसमें, आसानी से लोकल प्रॉक्सी मैनेज करने के लिए MobileProxy
लाइब्रेरी पर फ़ोकस किया गया है.
MobileProxy
, Go पर आधारित लाइब्रेरी है. इसे मोबाइल ऐप्लिकेशन में, प्रोक्सी की सुविधाओं को इंटिग्रेट करने के लिए डिज़ाइन किया गया है. यह मोबाइल लाइब्रेरी जनरेट करने के लिए, Go
Mobile का इस्तेमाल करता है. इससे, अपने ऐप्लिकेशन की नेटवर्किंग लाइब्रेरी को कॉन्फ़िगर करके, ट्रैफ़िक को लोकल प्रोक्सी के ज़रिए रूट किया जा सकता है.
MobileProxy के बिना ऐप्लिकेशन
MobileProxy का इस्तेमाल करने वाला ऐप्लिकेशन
पहला चरण: MobileProxy मोबाइल लाइब्रेरी बनाना
Android और iOS के लिए, Go कोड को लाइब्रेरी में कंपाइल करने के लिए, gomobile का इस्तेमाल करें.
Outline SDK टूल के डेटा स्टोर करने की जगह को क्लोन करें:
git clone https://github.com/Jigsaw-Code/outline-sdk.git cd outline-sdk/x
go build
की मदद से, Go Mobile के बाइनरी बनाएं:go build -o "$(pwd)/out/" golang.org/x/mobile/cmd/gomobile golang.org/x/mobile/cmd/gobind
Psiphon के लिए सहायता जोड़ना
Psiphon नेटवर्क का इस्तेमाल करने के लिए, इन अतिरिक्त चरणों को अपनाएं:
- Psiphon की टीम से संपर्क करके, ऐसा कॉन्फ़िगरेशन पाएं जिससे आपको उनके नेटवर्क का ऐक्सेस मिल सके. इसके लिए, कानूनी समझौते की ज़रूरत पड़ सकती है.
- Psiphon से मिला कॉन्फ़िगरेशन, अपने
SmartDialer
कॉन्फ़िगरेशन केfallback
सेक्शन में जोड़ें. -tags psiphon
फ़्लैग का इस्तेमाल करके मोबाइल प्रॉक्सी बनाएं:go build -tags psiphon -o "$(pwd)/out/" golang.org/x/mobile/cmd/gomobile golang.org/x/mobile/cmd/gobind
-tags psiphon
फ़्लैग ज़रूरी है, क्योंकि Psiphon के कोडबेस को GPL के तहत लाइसेंस दिया गया है. इससे आपके कोड पर लाइसेंस से जुड़ी पाबंदियां लगाई जा सकती हैं. आपके पास उनसे कोई खास लाइसेंस लेने का विकल्प है.मोबाइल लाइब्रेरी जनरेट करें और उन्हें अपने प्रोजेक्ट में जोड़ें:
Android
PATH="$(pwd)/out:$PATH" gomobile bind -ldflags='-s -w' -target=android -androidapi=21 -o "$(pwd)/out/mobileproxy.aar" github.com/Jigsaw-Code/outline-sdk/x/mobileproxy
जनरेट किया गया
out/mobileproxy.aar
बंडल इंपोर्ट करने के लिए, Android Studio में फ़ाइल > प्रोजेक्ट इंपोर्ट करें… को चुनें. ज़्यादा मदद पाने के लिए, Go Mobile की Android पर ऐप्लिकेशन बनाना और डिप्लॉय करना लेख पढ़ें.iOS
PATH="$(pwd)/out:$PATH" gomobile bind -ldflags='-s -w' -target=ios -iosversion=11.0 -o "out/mobileproxy.xcframework" github.com/Jigsaw-Code/outline-sdk/x/mobileproxy
out/mobileproxy.xcframework
बंडल को Xcode प्रोजेक्ट में खींचें और छोड़ें. ज़्यादा मदद पाने के लिए, Go Mobile की iOS के लिए ऐप्लिकेशन बनाना और डिप्लॉय करना लेख पढ़ें.
दूसरा चरण: MobileProxy चलाना
अपने ऐप्लिकेशन के रनटाइम में, MobileProxy
लोकल प्रॉक्सी को शुरू और चालू करें.
डाइनैमिक रणनीति चुनने के लिए, स्टैटिक ट्रांसपोर्ट कॉन्फ़िगरेशन या स्मार्ट प्रॉक्सी का इस्तेमाल किया जा सकता है.
स्टैटिक ट्रांसपोर्ट कॉन्फ़िगरेशन: स्थानीय पते और ट्रांसपोर्ट कॉन्फ़िगरेशन के साथ
RunProxy
फ़ंक्शन का इस्तेमाल करें.Android
import mobileproxy.* val dialer = StreamDialer("split:3") // Use port zero to let the system pick an open port for you. val proxy = Mobileproxy.runProxy("localhost:0", dialer) // Configure your networking library using proxy.host() and proxy.port() or proxy.address(). // ... // Stop running the proxy. proxy.stop()
iOS
import Mobileproxy let dialer = MobileproxyStreamDialer("split:3") // Use port zero to let the system pick an open port for you. let proxy = MobileproxyRunProxy("localhost:0", dialer) // Configure your networking library using proxy.host() and proxy.port() or proxy.address(). // ... // Stop running the proxy. proxy.stop()
स्मार्ट प्रॉक्सी: स्मार्ट प्रॉक्सी, टेस्ट के लिए चुने गए डोमेन के आधार पर, डीएनएस और TLS की रणनीतियों को डाइनैमिक तौर पर चुनता है. आपको कॉन्फ़िगरेशन की रणनीति को YAML फ़ॉर्मैट में बताना होगा (उदाहरण).
Android
val testDomains = Mobileproxy.newListFromLines("www.youtube.com\ni.ytimg.com") val strategiesConfig = "..." // Config YAML. val dialer = Mobileproxy.newSmartStreamDialer(testDomains, strategiesConfig, Mobileproxy.newStderrLogWriter()) // Use port zero to let the system pick an open port for you. val proxy = Mobileproxy.runProxy("localhost:0", dialer) // Configure your networking library using proxy.host() and proxy.port() or proxy.address(). // ... // Stop running the proxy. proxy.stop()
iOS
import Mobileproxy var dialerError: NSError? let testDomains = MobileproxyNewListFromLines("www.youtube.com\ni.ytimg.com") let strategiesConfig = "..." // Config YAML. let dialer = MobileproxyNewSmartStreamDialer( testDomains, strategiesConfig, MobileproxyNewStderrLogWriter(), &dialerError ) var proxyError: NSError? // Use port zero to let the system pick an open port for you. MobileproxyRunProxy("localhost:0", dialer, &proxyError) // Configure your networking library using proxy.host() and proxy.port() or proxy.address(). // ... // Stop running the proxy. proxy.stop()
तीसरा चरण: एचटीटीपी क्लाइंट और नेटवर्किंग लाइब्रेरी कॉन्फ़िगर करना
लोकल प्रॉक्सी पते और पोर्ट का इस्तेमाल करने के लिए, अपनी नेटवर्किंग लाइब्रेरी कॉन्फ़िगर करें.
Dart/Flutter HttpClient
HttpClient.findProxy
की मदद से प्रॉक्सी सेट करें.
HttpClient client = HttpClient();
client.findProxy = (Uri uri) {
return "PROXY " + proxy.address();
};
OkHttp (Android)
OkHttpClient.Builder.proxy
की मदद से प्रॉक्सी सेट करें.
val proxyConfig = Proxy(Proxy.Type.HTTP, InetSocketAddress(proxy.host(), proxy.port()))
val client = OkHttpClient.Builder().proxy(proxyConfig).build()
जेवीएम (Java, Kotlin)
system properties के साथ इस्तेमाल करने के लिए, प्रॉक्सी को कॉन्फ़िगर करें:
System.setProperty("http.proxyHost", proxy.host())
System.setProperty("http.proxyPort", String.valueOf(proxy.port()))
System.setProperty("https.proxyHost", proxy.host())
System.setProperty("https.proxyPort", String.valueOf(proxy.port()))
Android वेब व्यू
androidx.webview
लाइब्रेरी का इस्तेमाल करके, अपने ऐप्लिकेशन के सभी वेब व्यू पर प्रॉक्सी कॉन्फ़िगरेशन लागू करें:
ProxyController.getInstance()
.setProxyOverride(
ProxyConfig.Builder()
.addProxyRule(this.proxy!!.address())
.build(),
{}, // execution context for the following callback - do anything needed here once the proxy is applied, like refreshing web views
{} // callback to be called once the ProxyConfig is applied
)
iOS वेब व्यू
iOS 17 में, WKWebView
में प्रॉक्सी कॉन्फ़िगरेशन जोड़ा जा सकता है. इसके लिए, WKWebView
की WKWebsiteDataStore
प्रॉपर्टी का इस्तेमाल करें:
let configuration = WKWebViewConfiguration()
let endpoint = NWEndpoint.hostPort(host: NWEndpoint.Host(proxyHost), port: NWEndpoint.Port(proxyPort)!)
let proxyConfig = ProxyConfiguration.init(httpCONNECTProxy: endpoint)
let websiteDataStore = WKWebsiteDataStore.default()
websiteDataStore.proxyConfigurations = [proxyConfig]
let webview = WKWebView(configuration: configuration)
बेहतर सुविधा: कस्टम मोबाइल लाइब्रेरी जनरेट करना
बेहतर इस्तेमाल के उदाहरणों के लिए, अपनी मोबाइल लाइब्रेरी जनरेट की जा सकती हैं:
- Go लाइब्रेरी बनाना: SDK टूल की ज़रूरी सुविधाओं को रैप करके, Go पैकेज बनाएं.
- मोबाइल लाइब्रेरी जनरेट करना: Android Archive (AAR) और Apple फ़्रेमवर्क बनाने के लिए,
gomobile bind
का इस्तेमाल करें. उदाहरण: - अपने ऐप्लिकेशन में इंटिग्रेट करना: जनरेट की गई लाइब्रेरी को अपने मोबाइल ऐप्लिकेशन में जोड़ें.