إنتقل إلى المحتوى الرئيسي

إضافة Outline SDK إلى التطبيق على الأجهزة الجوّالة

يوضّح هذا المستند كيفية تكامل Outline SDK مع التطبيقات على الأجهزة الجوّالة، مركِّزًا على مكتبة MobileProxy، ما يتيح إدارة سلِسة ومبسَّطة للخادم الوكيل على الجهاز.

MobileProxy هي مكتبة مستنِدة إلى لغة Go ومصمَّمة لتسهيل عمليات دمج وظائف الخادم الوكيل في التطبيقات على الأجهزة الجوّالة. وتستخدم Go Mobile لإنشاء المكتبات على الأجهزة الجوّالة، ما يسمح لك بإعداد مكتبات الشبكات في تطبيقك لتنظيم الزيارات عبر الخادم الوكيل على الجهاز.

تطبيق بدون MobileProxy

تطبيق يعرض محتوى بدون MobileProxy

تطبيق يتضمّن MobileProxy

تطبيق يعرض محتوى ويتضمن MobileProxy

الخطوة 1: إنشاء مكتبات MobileProxy على الأجهزة الجوّالة

عليك استخدام GoMobile لتجميع رمز Go البرمجي في مكتبات على نظامَي التشغيل Android وiOS.

  1. عليك إنشاء نسخة طبق الأصل من مستودع Outline SDK:
git clone https://github.com/OutlineFoundation/outline-sdk.git
cd outline-sdk/x
  1. يجب إنشاء برامج GoMobile الثنائية باستخدام 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.

  • بإمكانك إنشاء Mobile Proxy باستخدام علامة -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 والذي قد يفرض قيودًا على رمزك البرمجي. لذا قد تحتاج إلى الحصول على ترخيص خاص من مطوّري Psiphon.

  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"، انقر على File >‏ Import Project… لاستيراد حزمة out/mobileproxy.aar التي تم إنشاؤها. ولمزيد من المساعدة، يمكنك الاطّلاع على المقالة الإنشاء والنشر على Android في Go Mobile.

الخطوة 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()
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()

الخطوة 3: ضبط عملاء HTTP ومكتبات إنشاء الشبكات

عليك إعداد مكتبات الشبكات لاستخدام عنوان الخادم الوكيل ومنفذه على الجهاز.

عليك إعداد الخادم الوكيل باستخدام HttpClient.findProxy.

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

إعداد متقدّم: إنشاء مكتبة مخصّصة للأجهزة الجوّالة

في حالات الاستخدام المتقدّم، يمكنك إنشاء المكتبات على الأجهزة الجوّالة بنفسك على النحو الآتي:

  1. إنشاء مكتبة Go: عليك أولاً تطوير حزمة Go عن طريق تغليف وظائف حزمة تطوير البرامج (SDK) المطلوبة.

  2. إنشاء مكتبات على الأجهزة الجوّالة: يجب استخدام gomobile bind لإنشاء "أرشيف Android" ‏(AAR) و"أُطُر عمل Apple" ‏(Apple Frameworks)، على سبيل المثال:

  3. التكامل مع التطبيق: أضِف المكتبة التي تم إنشاؤها إلى التطبيق على الأجهزة الجوّالة.

ملاحظة

يجب استخدام gomobile bind في حزمتك المخصّصة وليس في حِزم SDK مباشرةً.