پرش به مطلب اصلی

افزودن Outline SDK به برنامه تلفن همراه

این سند طرح کلی نحوه ادغام کردن Outline SDK را در برنامه‌های تلفن همراهتان ارائه می‌کند و بر کتابخانه MobileProxy تمرکز می‌کند تا مدیریت پراکسی محلی را ساده کند.

MobileProxy کتابخانه‌ای مبتنی بر Go است که برای ساده کردن یکپارچه‌سازی عملکرد پراکسی در برنامه‌های تلفن همراه طراحی شده است. از Go Mobile استفاده می‌کند تا کتابخانه‌های تلفن همراه را تولید کند و شما را قادر کند کتابخانه‌های شبکه‌سازی برنامه‌تان را پیکربندی کنید تا ترافیک را ازطریق پراکسی محلی هدایت کنید.

برنامه بدون MobileProxy

MobileProxy برنامه محتوای بدون

برنامه با MobileProxy

MobileProxy برنامه محتوا با

مرحله ۱: ساختن کتابخانه‌های تلفن همراه MobileProxy

از gomobile استفاده کنید تا کد Go را در کتابخانه‌های Android و iOS ترجمه کنید.

  1. همسانه‌سازی کردن مخزن Outline SDK:
git clone https://github.com/OutlineFoundation/outline-sdk.git
cd outline-sdk/x
  1. ساختن دودویی‌های Go Mobile با go build:
go build -o "$(pwd)/out/" golang.org/x/mobile/cmd/gomobile golang.org/x/mobile/cmd/gobind

افزودن پشتیبانی Psiphon

می‌توانید پشتیبان اضافه کنید تا از شبکه Psiphon استفاده کنید، مراحل اضافه زیر را دنبال کنید:

  • با تیم Psiphon تماس بگیرید تا پیکربندی‌ای را دریافت کنید که به شما اجازه دسترسی به شبکه می‌دهد. برای دریافت کردن این اجازه، ممکن است به قرارداد نیاز داشته باشید.

  • پیکربندی Psiphon را که دریافت کرده‌اید به بخش fallback در پیکربندی SmartDialer اضافه کنید.

  • ساختن «پراکسی تلفن همراه» بااستفاده از پرچم -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 است که می‌تواند محدودیت‌های پروانه‌دار را بر کد شما اعمال کند. می‌توانید برای دریافت کردن پروانه ویژه آن اقدام کنید.

  1. تولید کردن کتابخانه‌های تلفن همراه و افزودن آن‌ها به پروژه:
PATH="$(pwd)/out:$PATH" gomobile bind -ldflags='-s -w' -target=android -androidapi=21 -o "$(pwd)/out/mobileproxy.aar" github.com/OutlineFoundation/outline-sdk/x/mobileproxy

در «استودیو Android»، فایل > وارد کردن پروژه… را انتخاب کنید تا بسته out/mobileproxy.aar تولیدشده را وارد کنید. برای راهنمایی بیشتر، ساختن و پیاده‌سازی در Android مربوط به Go Mobile را ببینید.

مرحله ۲: اجرا کردن MobileProxy

درون زمان اجرای برنامه‌تان، به پراکسی محلی MobileProxy مقدار اولیه دهید و آن را شروع کنید. می‌توانید از پیکربندی حمل‌ونقل ثابت یا از Smart Proxy (پراکسی هوشمند) برای انتخاب راهبرد پویا استفاده کنید.

  • پیکربندی حمل‌ونقل ثابت: از تابع 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()
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()

مرحله ۳: پیکربندی کردن کارخواه HTTP و کتابخانه‌های شبکه‌سازی

کتابخانه‌های شبکه‌سازی‌تان را پیکربندی کنید تا از درگاه و نشانی پراکسی محلی‌تان استفاده کنید.

تنظیم کردن پراکسی با HttpClient.findProxy.

HttpClient client = HttpClient();
client.findProxy = (Uri uri) {
return "PROXY " + proxy.address();
};

پیشرفته: تولید کردن کتابخانه سفارشی تلفن همراه

در موارد استفاده پیشرفته، می‌توانید کتابخانه‌های تلفن همراه خودتان را تولید کنید:

  1. ساختن کتابخانه Go: بسته Go را توسعه دهید تا عملکردهای «کیت توسعه نرم‌افزار» (SDK) لازم را بسته‌بندی کند.

  2. تولید کردن کتابخانه‌های تلفن همراه: از gomobile bind استفاده کنید تا Android Archives (AAR) و چارچوب‌های Apple تولید کنید. مثال‌ها:

  3. ادغام کردن در برنامه‌تان: کتابخانه تولیدشده را به برنامه تلفن همراهتان اضافه کنید.

یادداشت

از gomobile bind در بسته سفارشی‌تان استفاده کنید، از آن مستقیماً در SDK استفاده نکنید.