আপনার মোবাইল অ্যাপে Outline SDK যোগ করুন

সরলীকৃত স্থানীয় প্রক্সি পরিচালনার জন্য MobileProxy লাইব্রেরিতে ফোকাস করে, এই নথিটি আপনার মোবাইল অ্যাপ্লিকেশনগুলিতে কিভাবে Outline SDK সংহত করতে হয় তার রূপরেখা দেয়৷

MobileProxy হল একটি Go-ভিত্তিক লাইব্রেরি যা মোবাইল অ্যাপে প্রক্সি কার্যকারিতাগুলির একীকরণকে স্ট্রীমলাইন করার জন্য ডিজাইন করা হয়েছে৷ এটি মোবাইল লাইব্রেরি তৈরি করতে Go Mobile ব্যবহার করে, আপনাকে স্থানীয় প্রক্সির মাধ্যমে ট্র্যাফিক রুট করতে আপনার অ্যাপের নেটওয়ার্কিং লাইব্রেরিগুলিকে কনফিগার করতে সক্ষম করে৷

MobileProxy ছাড়া অ্যাপ

MobileProxy ছাড়া বিষয়বস্তু অ্যাপ

MobileProxy সহ অ্যাপ

MobileProxy সহ বিষয়বস্তু অ্যাপ

ধাপ 1: MobileProxy মোবাইল লাইব্রেরি তৈরি করা

Android এবং iOS এর জন্য লাইব্রেরিতে Go কোড কম্পাইল করতে gomobile ব্যবহার করুন।

  1. আউটলাইন SDK সংগ্রহস্থল ক্লোন করুন:

    git clone https://github.com/Jigsaw-Code/outline-sdk.git
    cd outline-sdk/x
    
  2. go build দিয়ে গো মোবাইল বাইনারি তৈরি করুন:

    go build -o "$(pwd)/out/" golang.org/x/mobile/cmd/gomobile golang.org/x/mobile/cmd/gobind
    

    Psiphon সমর্থন যোগ করা হচ্ছে

    আপনি এই অতিরিক্ত পদক্ষেপগুলি অনুসরণ করে Psiphon নেটওয়ার্ক ব্যবহার করার জন্য সমর্থন যোগ করতে পারেন:

    • একটি কনফিগারেশন পেতে Psiphon টিমের সাথে যোগাযোগ করুন যা আপনাকে তাদের নেটওয়ার্কে অ্যাক্সেস দেয়। এটি একটি চুক্তি প্রয়োজন হতে পারে.
    • আপনার SmartDialer কনফিগারেশনের fallback বিভাগে প্রাপ্ত Psiphon কনফিগারেশন যোগ করুন।
    • -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-এর অধীনে লাইসেন্সপ্রাপ্ত, যা আপনার নিজের কোডের উপর লাইসেন্স বিধিনিষেধ আরোপ করতে পারে। আপনি তাদের কাছ থেকে একটি বিশেষ লাইসেন্স পাওয়ার কথা বিবেচনা করতে পারেন।

  3. মোবাইল লাইব্রেরি তৈরি করুন এবং সেগুলিকে আপনার প্রকল্পে যুক্ত করুন:

    অ্যান্ড্রয়েড

    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 বান্ডেল আমদানি করতে ফাইল > ইমপোর্ট প্রজেক্ট… নির্বাচন করুন। আরও সাহায্যের জন্য দেখুন 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
    

    Xcode প্রকল্পে out/mobileproxy.xcframework বান্ডেল টেনে আনুন। আরও সাহায্যের জন্য Go Mobile এর বিল্ডিং এবং iOS-এ স্থাপন করা দেখুন।

ধাপ 2: MobileProxy চালান

আপনার অ্যাপের রানটাইমের মধ্যে MobileProxy স্থানীয় প্রক্সি চালু করুন এবং শুরু করুন। গতিশীল কৌশল নির্বাচনের জন্য আপনি একটি স্ট্যাটিক পরিবহন কনফিগারেশন বা স্মার্ট প্রক্সি ব্যবহার করতে পারেন।

  • স্ট্যাটিক ট্রান্সপোর্ট কনফিগারেশন : একটি স্থানীয় ঠিকানা এবং পরিবহন কনফিগারেশন সহ RunProxy ফাংশন ব্যবহার করুন।

    অ্যান্ড্রয়েড

    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()
    
  • স্মার্ট প্রক্সি : স্মার্ট প্রক্সি নির্দিষ্ট পরীক্ষার ডোমেনের উপর ভিত্তি করে গতিশীলভাবে DNS এবং TLS কৌশল নির্বাচন করে। আপনাকে YAML ফরম্যাটে কনফিগারেশন কৌশল উল্লেখ করতে হবে ( উদাহরণ )।

    অ্যান্ড্রয়েড

    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()
    

ধাপ 3: HTTP ক্লায়েন্ট এবং নেটওয়ার্কিং লাইব্রেরি কনফিগার করুন

স্থানীয় প্রক্সি ঠিকানা এবং পোর্ট ব্যবহার করতে আপনার নেটওয়ার্কিং লাইব্রেরি কনফিগার করুন।

ডার্ট/ফ্লাটার 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()

JVM (জাভা, কোটলিন)

সিস্টেম বৈশিষ্ট্যগুলির সাথে ব্যবহার করার জন্য প্রক্সি কনফিগার করুন:

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()))

অ্যান্ড্রয়েড ওয়েব ভিউ

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 এর 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)

উন্নত: একটি কাস্টম মোবাইল লাইব্রেরি তৈরি করুন

উন্নত ব্যবহারের ক্ষেত্রে, আপনি নিজের মোবাইল লাইব্রেরি তৈরি করতে পারেন:

  1. একটি গো লাইব্রেরি তৈরি করুন : প্রয়োজনীয় SDK কার্যকারিতাগুলি মোড়ানো একটি গো প্যাকেজ তৈরি করুন৷
  2. মোবাইল লাইব্রেরি তৈরি করুন : Android Archives (AAR) এবং Apple Frameworks তৈরি করতে gomobile bind ব্যবহার করুন। উদাহরণ:
  3. আপনার অ্যাপে একীভূত করুন : আপনার মোবাইল অ্যাপ্লিকেশনে জেনারেট করা লাইব্রেরি যোগ করুন।