يستخدم نظام Android الأساسي مفهوم وضع التطبيقات في بيئة معزولة للحفاظ على حدود أمان وتنفيذ فعّالة لرمز التطبيق، إلى جانب حدود العمليات. من الشائع أن تتضمّن التطبيقات رمزًا برمجيًا تابعًا لجهة خارجية، وغالبًا ما يكون في شكل حِزم تطوير برامج (SDK)، مثل حِزم SDK لعرض الإعلانات أو حِزم SDK للإحصاءات. تؤدي إعادة الاستخدام هذه إلى تفعيل التطبيق على المطورين بالتركيز على تميز تطبيقاتهم مع الاستفادة من من الخبراء المتخصصين لتوسيع نطاق تنفيذهم بما يتجاوز ما يمكنهم فعله بسهولة في حد ذاته.
مثل معظم أنظمة التشغيل، يتم تنفيذ حِزم تطوير البرامج (SDK) لنظام التشغيل Android في بيئة اختبار محمية للتطبيق المضيف، كما أنها تكتسب الامتيازات والأذونات نفسها التي يحصل عليها التطبيق المضيف، بالإضافة إلى إمكانية الوصول إلى ذاكرة التطبيق المضيف ومساحة تخزينه. على الرغم من أنّ هذه البنية تسمح بدمج حِزم SDK والتطبيقات بشكلٍ مرن، إلا أنّها تُتيح أيضًا جمع بيانات المستخدمين ومشاركتها بدون الإفصاح عنها. بالإضافة إلى ذلك، قد لا يكون مطوّرو التطبيقات على دراية كاملة بمدى وظائف حزمة SDK التابعة لجهة خارجية والبيانات التي تصل إليها، ما يجعل من الصعب توضيح ممارسات جمع البيانات ومشاركتها في تطبيقاتهم.
في Android 13، أضفنا ميزة جديدة في النظام الأساسي تتيح تشغيل حِزم SDK التابعة لجهات خارجية في بيئة وقت تشغيل مخصّصة تُعرف باسم وقت تشغيل حزمة SDK. يوفّر "وقت تشغيل حزمة تطوير البرامج (SDK)" الضمانات ووسائل الحماية المعزّزة التالية بشأن جمع بيانات المستخدمين ومشاركتها:
- بيئة تنفيذ معدَّلة
- أذونات الوصول إلى البيانات وأذونات محددة بشكل دقيق لحِزم SDK
نسعى جاهدين إلى الحصول على تعليقات من منتدى إعلانات تطبيقات الأجهزة الجوّالة بشأن هذا التصميم. ونرحّب أيضًا بملاحظات من منتدى المطوّرين الأوسع نطاقًا للمساعدة في وضع النُسخ المستقبلية من SDK Runtime، بما في ذلك إتاحة حالات استخدام إضافية.
الأهداف
يسعى هذا الاقتراح إلى تحقيق الأهداف التالية:
- الحد من الوصول غير المُعلَن إلى بيانات تطبيقات المستخدمين ومشاركتها من خلال حِزم SDK التابعة لجهات خارجية من خلال عزل العمليات والتحكّم الواضح في الوصول إلى البيانات وواجهات برمجة التطبيقات يمكنك الاطّلاع على مزيد من المعلومات حول عزل العمليات في قسم منفصل. من هذا المستند.
- تقليل التتبُّع غير المُعلَن عنه لاستخدام التطبيق من خلال حِزم SDK التابعة لجهات خارجية من خلال الحدّ من وصول حِزم تطوير البرامج (SDK) إلى المعرّفات الفريدة والمستمرة
- تسريع توزيع تحديثات حزمة تطوير البرامج (SDK) على التطبيقات بشكلٍ آمن من خلال تقليل عبء إضافي على مطوري التطبيقات والمستخدمين النهائيين. مزيد من المعلومات عن القيمة المقترحة توزيع حزمة SDK الموثوق بها في قسم آخر من هذا المستند.
- مساعدة مطوّري التطبيقات في توضيح ممارسات الوصول إلى البيانات ومشاركتها في تطبيقاتهم بشكل أفضل
- مساعدة مطوّري حِزم SDK في منع التلاعب بها من خلال حِزم SDK أخرى من خلال الحدّ من استخدام بعض بنى اللغة غير الآمنة، مثل رمز JNI
- مساعدة حِزم SDK لعرض الإعلانات في رصد الزيارات غير الصالحة والاحتيال الإعلاني ومنعها من خلال التحكّم الكامل في المشاهدات البعيدة التي تعرض الوسائط
- يجب تقليل التأثير غير المبرَّر على مطوّري التطبيقات وحِزم تطوير البرامج (SDK) قدر الإمكان.
تنفيذ حِزم SDK في عملية معزولة
يعمل "وقت تشغيل SDK" المقترَح على تفعيل حِزم SDK المتوافقة، والمشار إليها في بقية هذا المستند كحِزم تطوير برامج (SDK) يتم تفعيلها في وقت التشغيل للعمل في عملية منفصلة للتطبيق. تسهّل المنصة البث الثنائي الاتجاه الاتصال بين عملية التطبيق ووقت تشغيل SDK. يمكنك الاطّلاع على قسم الاتصالات في هذا المستند لمعرفة التفاصيل. ستظل حِزم SDK غير المتوافقة مع إعادة التحميل في عملية التطبيق كما هي اليوم. توضِّح المخطّطات البيانية التالية هذه التغييرات:
نموذج جديد للتوزيع الموثوق فيه لحِزم SDK
يشجّع هذا الفصل المقترَح لحزمة SDK عن التطبيق على تطبيق مفهوم فصل آخر، وهو فصل حزمة SDK عن توزيع التطبيق. يتطلّب اقتراحنا آلية توزيع وتثبيت موثوقَتَين لضمان تثبيت حِزم SDK الصحيحة في وقت تشغيل حزمة SDK للتطبيق. يساعد ذلك في حماية المستخدمين ومطوّري التطبيقات من المواقع الإلكترونية غير الصالحة حِزم تطوير البرامج (SDK) التي يتم تحميلها، مع السماح لمتاجر التطبيقات بتخفيف الأعباء بشكل كبير من توزيع حِزم تطوير البرامج (SDK) من مطوّري التطبيقات
لم تعد هناك حاجة إلى ربط حِزم SDK وتجميعها بشكل ثابت تطبيقاتهم قبل تحميلها إلى متجر التطبيقات لتوزيعها. ستتم بدلاً من ذلك الخطوات التالية:
- يمكن لمطوّري حِزم SDK تحميل حِزم SDK ذات الإصدارات المحدّدة إلى متاجر التطبيقات، بشكل منفصل عن التطبيقات نفسها.
- يمكن لمطوّري التطبيقات تحديد العناصر الاعتمادية لحِزم SDK من خلال إصدار تطبيق لا يتضمّن حزمة SDK الفعلية وإنشائه وتحميله والتبعيات لديك.
- عندما ينزِّل مستخدم هذا التطبيق، يمكن أن تستخدِم عملية التثبيت التبعيات المحدّدة لحزمة تطوير البرامج (SDK) للتطبيق لتنزيلها بعد ذلك من متجر التطبيقات.
ستتيح آلية التوزيع الجديدة هذه لمطوّري حِزم SDK إجراء تغييرات غير مُعطِلة (أي عدم إجراء تغييرات على واجهات برمجة التطبيقات أو دلالات هذه الواجهات) على حِزم SDK الخاصة بهم وتوزيعها على الأجهزة بدون أي تدخل من مطوّري التطبيقات. يمكن نشر هذه التغييرات غير المؤثرة في حزمة SDK أو التراجع عنها، بدون الحاجة إلى الانتظار إلى أن يعيد مطوّرو التطبيقات إنشاء تطبيقاتهم باستخدام حِزم SDK الجديدة، أو انتظار المستخدمين النهائيين لتحديث تطبيقاتهم. وسيظل على مطوّري التطبيقات تعديل التغيُّرات الأساسية، ولكن يمكن لمطوّري حِزم SDK طرح أحدث التغيُّرات غير الأساسية والإصلاحات بشكل أسرع وأكثر اتساقًا ليصلوا إلى عدد أكبر من المستخدمين، ما يؤدي إلى تقليل عدد الإصدارات المتوافقة إلى الحد الأدنى.
توضّح المخطّطات التالية التغييرات المقترَحة في توزيع حزمة تطوير البرامج (SDK):
التغييرات في كيفية إنشاء حِزم SDK والتطبيقات وتشغيلها وتوزيعها
هذا اقتراح أولي لتوفير بيئة مرنّة لبيئة تشغيل حزمة تطوير البرامج (SDK) وتوزيعها. التكنولوجيا. تقترح الأقسام التالية سلسلة من التغييرات على الصعيدين العميق والمتوسط في الفئات التالية:
- الوصول: الأذونات والذاكرة وسعة التخزين
- التنفيذ: اللغات والتغييرات في بيئة التشغيل دورة الحياة، عرض الوسائط
- التواصل: بين التطبيق وحزمة SDK وبين حِزم SDK
- التطوير: كيفية إنشاء التطبيقات وتصحيح الأخطاء فيها واختبارها هذا النموذج
- التوزيع: كيفية توزيع التطبيقات وتعديلها والرجوع إلى إصدارات سابقة من Android وحِزم SDK
يتضمّن هذا المستند أيضًا الأسئلة الشائعة للمساعدة في الإجابة عن الأسئلة الشائعة.
هذا اقتراح تصميم أولي، وندرك أنّه قد يكون هناك أثر مهم لهذا التغيير في بعض مكونات النظام البيئي. لهذا السبب، نطلب منك مشاركة ملاحظاتك من خلال أداة تتبُّع الصعوبات.
إذن الوصول
تتضمن إدارة خصوصية النظام إدارة الكيفية التي يمكن من خلالها للأطراف المختلفة الوصول إلى موارد مختلفة. لتلبية عرض قيمة الخصوصية لدينا، نقترح وتحديث النموذج للوصول إلى التطبيقات وحِزم تطوير البرامج (SDK) وبيانات المستخدمين، مبدأ الامتياز الأقل لمنع الوصول غير المُفصَح عن البيانات الحساسة.
أذونات حزمة تطوير البرامج (SDK)
وكعملية منفصلة، سيحتوي "وقت تشغيل SDK" على مجموعة محددة جيدًا من بدلاً من اكتساب الأذونات التي منحها المستخدم للتطبيق. بناءً على بحثًا أوليًا عن الأذونات التي تستخدمها حِزم SDK ذات الصلة بالإعلانات، اقتراح إتاحة الأذونات التالية لحِزم SDK في حزمة تطوير البرامج (SDK) بيئة التشغيل التلقائية:
INTERNET
: الاتصال بالإنترنت لتتمكّن من الاتصال بخدمة ويبACCESS_NETWORK_STATE
: الوصول إلى معلومات عن الشبكاتREAD_BASIC_PHONE_STATE
: الوصول إلى معلومات عن حالة الهاتف، مثل نوع شبكة الجوّال- أذونات الوصول إلى واجهات برمجة التطبيقات التي تحافظ على الخصوصية، والتي توفّر قدرات أساسية للإعلان بدون الحاجة إلى الوصول إلى المعرّفات على مستوى جميع التطبيقات
AD_ID
: إمكانية طلب المعرِّف الإعلاني. وسيعتمد ذلك أيضًا على إذن التطبيق للقيام بذلك.
نجري حاليًا تحقيقًا حول ما إذا كان سيتم منح تراخيص إضافية المستخدم، والحد من تأثير ذلك على المستخدمين من كلٍ من إدارة الخصوصية منظور سهولة الاستخدام. ونطلب منك ملاحظاتك حول أي حالات استخدام قد لا تستوفي هذه المجموعة من الأذونات.
الذاكرة
سيكون لدى "وقت تشغيل حزمة تطوير البرامج (SDK)" مساحة ذاكرة معزولة بفضل امتلاكه لعملية خاصة به. ستؤدي هذه البنية تلقائيًا إلى منع حزمة SDK من الوصول إلى مساحة ذاكرة التطبيق، ولن يتمكّن التطبيق بالمثل من الوصول إلى مساحة ذاكرة حزمة SDK. نقترح الاحتفاظ بهذا السلوك التلقائي للحفاظ على التوافق مع مبدأ الحد الأدنى من الامتيازات.
مساحة التخزين
يهدف هذا الاقتراح إلى موازنة الحاجة إلى وصول حِزم SDK إلى مساحة التخزين لكي تعمل بشكلٍ عادي والحدّ من التتبّع على مستوى التطبيقات والعمليات باستخدام مساحة التخزين الدائمة. نقترح التعديل التالي لكيفية استخدام مساحة التخزين تم الوصول إليها اليوم:
- لن يتمكّن أي تطبيق من الوصول مباشرةً إلى مساحة تخزين حِزم SDK الخاصة به، والعكس صحيح.
- لن تتمكن حِزم SDK من الوصول إلى وحدة التخزين الخارجية للجهاز.
- في كل "وقت تشغيل SDK"، تتوفر مساحة تخزين متاحة لجميع حِزم SDK، ومساحة التخزين الخاصة بحزمة SDK معيّنة
مثل نموذج التخزين الحالي، لن تكون هناك حدود عشوائية لمساحة التخزين نفسها في الحجم. يمكن لحِزم تطوير البرامج (SDK) استخدام مساحة التخزين لتخزين مواد العرض مؤقتًا. ويتم محو مساحة التخزين هذه بشكل دوري عندما لا يكون حِزم تطوير البرامج (SDK) قيد التشغيل بشكل نشط.
التنفيذ
لضمان نظام خاص بين التطبيقات وحِزم SDK والمستخدمين، يجب أن يعزّز سياق التنفيذ نفسه (تنسيقات الرموز البرمجية وعناصر اللغة وواجهات برمجة التطبيقات التي يمكن الوصول إليها وبيانات النظام) حدود الخصوصية هذه، أو على الأقل لا يقدّم فرصًا للالتفاف حولها. في الوقت نفسه، نريد الاحتفاظ بالوصول إلى المنصة الغنية ومعظم إمكانات وقت التشغيل التي توفّرها حِزم SDK حاليًا. نقترح هنا مجموعة من التعديلات على بيئة التشغيل لتحقيق التوازن بين هذين المقياسَين.
الرمز
يتم تفسير رمز Android (التطبيقات وحِزم تطوير البرامج (SDK)) في الغالب من خلال "وقت تشغيل Android" (ART)، سواء كانت التعليمات البرمجية مكتوبة بلغة Kotlin أو Java. إنّ تنوع ART وعناصر اللغة التي يوفّرها، بالإضافة إلى إمكانية التحقّق التي يوفّرها عند مقارنتها بالبدائل، لا سيما الرموز البرمجية الأصلية، تبدو أنها توازن بشكلٍ مناسب بين الوظائف والخصوصية. نقترح أن يتألف رمز حزمة SDK المفعَّلة في وقت التشغيل حصرًا من رمز Dex الثنائي، بدلاً من السماح بالوصول إلى واجهة JNI.
نحن ندرك أنّ هناك حالات استخدام، مثل استخدام حزمة منتجات مخصّصة وSQLite، والتي يجب استبدالها بـ SQLite، نظرًا لاستخدام التعليمات البرمجية الأصلية مثل الإصدار المدمج من SQLite في Android SDK.
SELinux
على نظام Android، يتم تشغيل كل عملية (بما في ذلك تلك التي تعمل كجذر) باستخدام عملية سياق SELinux، ما يسمح للنواة بإدارة التحكم في الوصول إلى النظام والخدمات والملفات والأجهزة والعمليات الأخرى. في إطار جهودنا للحفاظ على معظم حالات استخدام حِزم SDK مع الحدّ من التحايل على تدابير حماية الخصوصية التي نحاول تطويرها، نقترح تعديلات التالية من سياق SELinux لتطبيق غير نظامي في "وقت تشغيل حزمة SDK":
- سيكون بالإمكان الوصول إلى مجموعة محدودة من خدمات النظام. (ضمن التصميم النشط)
- ولن تتمكّن حِزم SDK من تحميل الرمز البرمجي وتنفيذه إلا في حِزم APK.
- ستكون إمكانية الوصول إلى مجموعة محدودة من خصائص النظام متاحة. (ضمن التصميم النشط)
واجهات برمجة التطبيقات
يُسمح باستخدام ميزة "الاستكشاف" وتشغيل واجهات برمجة التطبيقات ضمن وقت تشغيل حزمة SDK. ومع ذلك، لن يُسمح لحزمة SDK باستخدام ميزة "العرض المرجعي" أو استدعاء واجهات برمجة التطبيقات في حزمة SDK أخرى مفعَّلة في وقت التشغيل. سنشارك اقتراحًا كاملاً بشأن واجهات برمجة التطبيقات المحظورة في أحد التحديثات المستقبلية.
بالإضافة إلى ذلك، فرضت الإصدارات الأخيرة لنظام Android الأساسي قيودًا على الوصول إلى المعرّفات الدائمة من أجل تحسين الخصوصية. بالنسبة إلى وقت تنفيذ حزمة SDK، نقترح فرض قيود إضافية على الوصول إلى المعرّفات التي يمكن استخدامها للتتبّع على مستوى التطبيقات المختلفة.
لا يمكن الوصول إلى واجهات برمجة التطبيقات لوقت تشغيل حزمة تطوير البرامج (SDK) إلا من التطبيقات التي تعمل في المقدّمة.
جارٍ محاولة الوصول إلى واجهات برمجة تطبيقات SdkSandboxManager
من التطبيقات
في الخلفية تؤدي إلى ظهور
تم رمي SecurityException
.
أخيرًا، لا يمكن لحِزم تطوير البرامج (RE-SDK) استخدام واجهات برمجة تطبيقات الإشعارات لإرسال إشعارات للمستخدمين في أي وقت.
دورة الحياة
تتبع حزم تطوير البرامج (SDK) للتطبيقات في الوقت الحالي دورة حياة التطبيق المضيف، أي عندما لا يكون التطبيق الدخول إلى المقدّمة أو مغادرتها أو إغلاقها أو فرض إيقافها بواسطة نظام التشغيل بسبب ضغط الذاكرة، تقوم حزم SDK للتطبيق بذلك أيضًا. إنّ لفصل حزم SDK للتطبيق في عملية مختلفة إلى التغييرات التالية في مراحل النشاط:
- يمكن للمستخدم أو نظام التشغيل إنهاء تشغيل التطبيق. وقت تشغيل حزمة تطوير البرامج (SDK) تلقائيًا على الفور بعد ذلك.
يمكن أن يُنهي نظام التشغيل بيئة تشغيل حِزم تطوير البرامج (SDK) بسبب ازدحام ذاكرة التخزين أو استثناء لم تتم معالجته في حِزمة تطوير برامج (SDK) على سبيل المثال.
بالنسبة إلى نظام التشغيل Android 13، عندما يكون تطبيق في المقدّمة، يتم تشغيل "وقت تشغيل حزمة تطوير البرامج (SDK)" في ذات أولوية عالية ومن غير المرجح أن يتم إنهاؤها. عندما ينتقل التطبيق إلى الخلفية، تنخفض أولوية عملية SDK Runtime ويصبح مؤهلاً للإنهاء. تظل أولوية عملية SDK Runtime منخفضة حتى إذا عاد التطبيق إلى المقدّمة. ونتيجةً لذلك، من المرجّح جدًا أن يتم إنهاء تشغيله بسبب الضغط على الذاكرة مقارنةً بالتطبيق.
بالنسبة إلى نظام التشغيل Android 14 والإصدارات الأحدث، سيتم تحديد أولويات عمليات التطبيق وحزمة تطوير البرامج (SDK). تتماشى بيئة التشغيل. يجب أن تكون أولويات العمليات الخاصة بملف برمجي
ActivityManager.RunningAppProcessInfo.importance
للتطبيق وملف IDE SDK Runtime متطابقة تقريبًا.في حال إنهاء "وقت تشغيل SDK" أثناء وجود التطبيق، على سبيل المثال، إذا كان هناك استثناء لم تتم معالجته في حزمة SDK، وهو "وقت تشغيل SDK" بما في ذلك جميع حِزم تطوير البرامج (SDK) التي تم تحميلها سابقًا وطرق العرض عن بُعد. يمكن لصنّاع التطبيقات التعامل مع عملية إنهاء وقت تشغيل حزمة SDK باستخدام أيّ من الطرق التالية:
- يوفّر الاقتراح طرقًا ذات صلة لمعاودة الاتصال بمراحل النشاط لمطوّري التطبيقات. لرصد وقت إنهاء "وقت تشغيل SDK"
- في حال إنهاء "وقت تشغيل حزمة تطوير البرامج (SDK)" أثناء عرض الإعلانات، قد لا يحدث كما هو متوقع. على سبيل المثال، قد يتم تجميد عدد مرات المشاهدة على الشاشة ولا يتم تفاعلية أطول. يمكن للتطبيق إزالة عرض الإعلان إذا لم يؤثّر في تجربة المستخدم.
- يمكن للتطبيق إجراء محاولة أخرى لتحميل حِزم تطوير البرامج (SDK) وطلب الإعلانات.
- في نظام التشغيل Android 14، إذا تم إنهاء وقت تشغيل حزمة SDK أثناء تحميل حِزم SDK، وإذا لم يسجِّل مطوِّر التطبيق طُرق callback الخاصة بالمراحل المُشار إليها أعلاه، يتم إنهاء تشغيل التطبيق تلقائيًا. لا يتم إنهاء سوى العمليات التابعة للتطبيق التي حمّلت حِزم SDK والخروج منها بشكلٍ طبيعي.
- ربط العناصر التي تعرضها حزمة تطوير البرامج (SDK) للتواصل معها (مثل
SandboxedSdk
) طرحDeadObjectException
إذا استخدمه التطبيق.
ويخضع نموذج دورة الحياة هذا للتغيير في التحديثات المستقبلية.
في حالة استمرار الأعطال، يجب على مطوّر التطبيق التخطيط التقليص السلس بدون حزمة تطوير البرامج (SDK) أو إبلاغ المستخدم إذا كانت أمرًا بالغ الأهمية للوظيفة الأساسية للتطبيق. لمزيد من التفاصيل حول هذا التفاعل بين التطبيق وحزمة تطوير البرامج (SDK)، يُرجى الاطّلاع على قسم الاتصالات في هذا المستند.
يمكن لحِزم SDK غير المستندة إلى RE مُستمرة في استخدام الإصدارات الأساسية من نظام التشغيل العادية والمتاحة والذي يضم تطبيقات مدمجة، بما في ذلك الخدمات والأنشطة وعمليات البث، في حين أنّ حزم تطوير البرامج (SDK) الخاصة بالطاقة (RE SDK) لا يستطيع ذلك.
الحالات الخاصة
الحالات التالية غير متوافقة وقد تؤدي إلى سلوك غير متوقّع:
- في حال مشاركة عدّة تطبيقات المعرّف الفريد نفسه، قد لا يعمل "وقت تشغيل حزمة تطوير البرامج (SDK)" بشكل صحيح. وقد تتم إتاحة استخدام المعرّفات الفريدة المشتركة في المستقبل.
- بالنسبة إلى التطبيقات التي تتضمّن عمليات متعددة، يجب أن يتم تحميل حزمة تطوير البرامج (SDK) في الدفع.
عرض الوسائط
هناك حِزم تطوير برامج (SDK) تُعرِض محتوى مثل النصوص والصور والفيديوهات في ملف شخصي يحدّده التطبيق. لتحقيق ذلك، نقترح نهجًا للعرض عن بُعد
حيث ستعرض حزمة SDK الوسائط من داخل "وقت تشغيل حزمة تطوير البرامج (SDK)"، ولكن باستخدام واجهة برمجة التطبيقات
SurfaceControlViewHost
للسماح بعرض الوسائط في عرض يحدّده التطبيق. يوفر ذلك حزمة تطوير البرامج (SDK)
إمكانية عرض هذه الوسائط بطريقة يحميها المستخدم
مع المساعدة في منع ورصد التفاعلات غير الصالحة أو الاحتيالية التي يجريها المستخدم مع
الوسائط المعروضة.
الإعلانات المدمجة مع المحتوى، أي الإعلانات التي لا يتم عرضها بواسطة حزمة تطوير البرامج (SDK) ولكن بواسطة التطبيق بدلاً من ذلك حِزم تطوير البرامج (SDK) في "وقت تشغيل SDK" ستتم عملية جمع الإشارات و retrieving المواد الإبداعية بشكلٍ متسق مع الإعلانات غير المدمجة مع المحتوى. هذه منطقة نشطة للتحقيق.
الإعلانات أثناء عرض الفيديو هي الإعلانات التي يتم عرضها أثناء عرض الفيديو مع عرضها في مشغّل الفيديو. داخل التطبيق. ونظرًا لأنه يتم تشغيل الفيديو داخل مشغّل في التطبيق، بدلاً من مقارنةً بالمشغّل أو الملف الشخصي في حزمة SDK، يختلف نموذج العرض عن الإعلانات الأخرى والتنسيقات. نعمل جاهدين على استكشاف آليات لإتاحة عرض الإعلانات من جهة الخادم. إدراج الإعلانات وإدراجها استنادًا إلى حزمة تطوير البرامج (SDK)
سلامة النظام
نسعى إلى الحدّ من تأثير "وقت تشغيل حزمة تطوير البرامج (SDK)" في صحة النظام على أجهزة المستخدم النهائي، ونحن بصدد تصميم طرق لتحقيق ذلك. من المرجّح مع ذلك أنّ بعض أجهزة Android 13 المنخفضة المستوى التي تتضمّن موارد نظام محدودة جدًا، مثل Android (إصدار Go)، لن تتوافق مع "وقت تشغيل حزمة تطوير البرامج (SDK)" بسبب تأثيره في صحة النظام. سنُجري قريبًا مشاركة الحدّ الأدنى من المتطلبات اللازمة لاستخدام "وقت تشغيل SDK" بنجاح.
الاتصالات
ونظرًا لأن التطبيقات وحزم SDK تعمل حاليًا في نفس العملية، فإن الاتصال بين غير ممنوعة وبدون وسيط. بالإضافة إلى ذلك، يتيح Android إمكانية الربط بين التطبيقات الاتصال حتى إذا بدأ الاتصال وينتهي بحزم SDK. يتيح نموذج التنسيق السهل هذا حالات استخدام مختلفة، وفي الوقت نفسه، يقدّم إمكانية مشاركة البيانات غير المُفصَح عنها بين التطبيقات وباستخدام حِزم تطوير البرامج (SDK) داخل التطبيقات وبينها. نقترح التعديلات التالية على نموذج التواصل هذا من أجل تحقيق التوازن بين قيمة مثل هذا التواصل وتحقيق أهدافنا المعلَن عنها.
من التطبيق إلى حزمة تطوير البرامج (SDK)
إنّ الواجهة بين التطبيق وحزمة تطوير البرامج (SDK) هي مسار الاتصال الأكثر شيوعًا. إلى حزمة SDK، وواجهة برمجة التطبيقات لحزمة SDK هي المكان الذي يميّز فيه الكثير من المستخدمين وروح الابتكار. ونحن نسعى إلى الحفاظ على القدرة على الابتكار التمييز هنا. نتيجةً لذلك، يمنح اقتراحنا حِزم SDK إمكانية عرض واجهات برمجة التطبيقات أمام التطبيقات، ويضمن أن تستفيد التطبيقات من كل هذا الابتكار.
استنادًا إلى بنية حدود عملية "وقت تشغيل SDK"، نقترح إنشاء طبقة تنظيم، يمكن الوصول إليها من داخل التطبيق، لإجراء اتصالات واجهة برمجة التطبيقات الاستجابات أو طلبات معاودة الاتصال عبر هذه الحدود بين التطبيق وحزمة تطوير البرامج (SDK). نحن اقتراح أن يتم تحديد واجهة طبقة التنظيم هذه بواسطة SDK التي يتم إنشاؤها بواسطة أدوات إنشاء رسمية مفتوحة المصدر المجال.
نسعى من خلال هذا الاقتراح إلى إزالة تنظيم العمل النموذجي من التطبيق. وحِزم SDK، مع توفير المرونة لمطوّري حِزم SDK وضمان أن يتم تشغيل التعليمات البرمجية لحزمة SDK في "وقت تشغيل SDK" لتحقيق أهداف الخصوصية لدينا. هل ستأخذ هذا المسار، يلزم تحديد لغة تعريف واجهة برمجة التطبيقات وأدواتها تصميمه استنادًا إلى مدخلاتك.
سيكون نموذج التفاعل العام على النحو التالي:
- يستدعي التطبيق حزمة تطوير البرامج (SDK) من خلال الواجهة، ويمرر استدعاءات.
- تستوفي حزمة تطوير البرامج (SDK) الطلبات بشكل غير متزامن وتردّ عليها باستخدام وظائف الاستدعاء.
- ويمكن تعميم ذلك على أي نموذج من نماذج الناشرين المشتركين، ما يعني أنه يمكن للتطبيق للاشتراك في الأحداث في حزمة تطوير البرامج (SDK) باستخدام عمليات الاستدعاء، وعند وقوع هذه الأحداث، فسيتم تشغيل استدعاءات.
نتيجة للهيكل الجديد متعدد العمليات لهذا الاقتراح هو أنه هما دورتا حياة عملية يجب إدارتهما: إحداهما للتطبيق نفسها والأخرى لـ "وقت تشغيل SDK". يهدف اقتراحنا إلى برمجة أكبر قدر ممكن من هذه الإجراءات، ما يحدّ من تأثيرها على مطوّري التطبيقات وحِزم SDK. يوضّح المخطّط البياني التالي النهج الذي نأخذه في الاعتبار:
ستوفّر المنصة واجهات برمجة تطبيقات جديدة للتطبيقات من أجل تحميل حِزم SDK ديناميكيًا في عملية IDE SDK، والحصول على إشعارات بشأن التغييرات في حالة العملية، والتفاعل مع حِزم SDK المحمَّلة في IDE SDK.
يوضّح الرسم البياني في الشكل السابق عملية التواصل بين التطبيق ومجموعة تطوير البرامج (SDK) على مستوى أدنى، بدون طبقة الربط.
يتواصل التطبيق مع حزمة SDK التي تعمل في عملية "وقت تشغيل حزمة SDK" من خلال الخطوات التالية:
قبل أن يتفاعل أحد التطبيقات مع إحدى حِزم SDK، يطلب التطبيق النظام الأساسي لتحميل SDK. لضمان تكامل النظام، ستحدد التطبيقات حِزم تطوير البرامج (SDK) التي تنوي تحميلها في ملف البيان، علمًا بأنّ حِزم SDK هذه التي يُسمح بتحميلها فقط.
يوفّر مقتطف الرمز التالي مثالاً توضيحيًا لواجهة برمجة التطبيقات:
SdkSandboxManager.loadSdk(String sdkName, Bundle data, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
يتم إشعار حزمة SDK بأنّه قد تم تحميلها وتعرض واجهتها. تم إعداد هذه الواجهة لتستخدمها عملية معالجة التطبيق. لمشاركة الواجهة خارج حدود العملية، يجب إرجاعها كعنصر
IBinder
.يوفّر دليل الخدمات المرتبطة طرقًا مختلفة لتوفير
IBinder
. يجب أن تكون الطريقة التي تختارها متسقة بين حِزم تطوير البرامج (SDK) و التطبيق المُرسِل. تستخدِم المخطّطات البيانية واجهة برمجة التطبيقات AIDL كمثال.تتلقّى
SdkSandboxManager
الواجهةIBinder
وتُرجعها إلى التطبيق.يحصل التطبيق على
IBinder
ويحوّله إلى واجهة حزمة SDK، ويُطلِق وظائفها:IBinder binder = sandboxSdk.getInterface(); ISdkInterface mySdkInterface = ISdkInterface.Stub.asInterface(binder); mySdkInterface.something();
يمكن للتطبيق أيضًا عرض الوسائط من حزمة SDK باتّباع الخطوات التالية:
كما هو موضّح في قسم عرض الوسائط في هذا حتى يحصل التطبيق على حزمة تطوير برامج (SDK) لعرض الوسائط بطريقة عرض، يلجأ التطبيق إجراء مكالمة مع
requestSurfacePackage()
وجلبSurfaceControlViewHost.SurfacePackage
يوفّر مقتطف الرمز التالي مثالاً توضيحيًا لواجهة برمجة التطبيقات:
SdkSandboxManager.requestSurfacePackage(String sdkName, Bundle extraParams, Executor executor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
يمكن للتطبيق بعد ذلك تضمين
SurfacePackage
المُعاد فيSurfaceView
عبر واجهة برمجة التطبيقاتsetChildSurfacePackage
فيSurfaceView
.يوفّر مقتطف الرمز التالي مثالاً توضيحيًا لواجهة برمجة التطبيقات:
SurfaceView.setChildSurfacePackage(SurfacePackage surfacePackage)
نقترح استخدام واجهتَي برمجة التطبيقات IBinder
وrequestSurfacePackage()
.
عامًا وليس الغرض منه أن يتم استدعاؤه من خلال التطبيقات مباشرةً. بدلاً من ذلك، سيتم استدعاء واجهات برمجة التطبيقات
هذه من خلال مرجع واجهة برمجة التطبيقات الذي تم إنشاؤه والمذكور أعلاه، في طبقة "الوسيط"
، وذلك لتخفيف العبء عن مطوّري التطبيقات.
من حزمة SDK إلى حزمة SDK
غالبًا ما يحتاج حِزم SDK اثنتان في التطبيق نفسه إلى التواصل مع بعضهما. يمكن أن يحدث هذا عندما يتم تم تصميم حزمة SDK لتتكون من حزم SDK أساسية، ويمكن أن يحدث ذلك عندما تحتاج حِزم SDK التابعة لجهات مختلفة إلى التعاون لتلبية طلب من تطبيق الاتصال.
هناك حالتان رئيسيتان يجب أخذهما بعين الاعتبار:
- عند تفعيل حزمتَي SDK في وقت التشغيل في هذه الحالة، يتم تشغيل كلتا حِزم SDK في
وقت تشغيل حزمة SDK مع جميع وسائل الحماية. لا يمكن لحِزم SDK التواصل مع بعضها كما تفعل داخل التطبيق اليوم. وبالتالي، تتوفر واجهة برمجة تطبيقات
تمت إضافة
SdkSandboxController
لتفعيل الجلب كائناتSandboxedSdk
لجميع حِزم RE-SDK التي تم تحميلها. يتيح ذلك لـ RE-SDK التواصل مع حِزم تطوير البرامج (SDK) الأخرى التي يتم تحميلها في "وقت تشغيل SDK" - عند تفعيل حزمة تطوير برامج (SDK) واحدة فقط في وقت التشغيل
- إذا كانت حزمة SDK التي تُجري عملية الاتصال تعمل في التطبيق، لن يختلف ذلك عن التطبيق نفسه الذي يتصل بحزمة SDK الثانية ضمن "وقت تشغيل حزمة SDK".
- في حال كانت حزمة تطوير البرامج (SDK) للاتصال تعمل ضمن وقت تشغيل حزمة تطوير البرامج (SDK)، لن يتم عرض هذا الاقتراح
نقترح عرض طريقة باستخدام
IBinder
الموضّح في حزمة app-to-SDK. القسم الذي يستمع إليه هذا الرمز البرمجي في التطبيق ويعالجه ويستجيب باستخدام الاستدعاءات المقدمة. - وقد لا تتمكن حِزم تطوير البرامج (SDK) للإعلانات التي لم يتم تفعيلها في وقت التشغيل من تسجيل نفسها نقترح إنشاء حزمة SDK وسيطة تتضمن أي شريك أو تطبيق حِزم تطوير البرامج (SDK) بصفتها ملحقات مباشرة للتطبيق وتعالج التسجيل. تُنشئ "حزمة SDK" الوسيطة هذه تواصلًا بين "حِزم SDK" التي لا يتم تفعيلها في وقت التشغيل أو بين ملحقَات التطبيق الأخرى والوسيط الذي يتم تفعيله في وقت التشغيل والذي يعمل كمحوِّل.
تم تقسيم مجموعة الميزات للاتصال بحزمة SDK وحزمة تطوير البرامج (SDK) إلى ما يلي: الفئات:
- الاتصال بحزمة SDK في "وقت تشغيل SDK" (متاح في أحدث معاينة المطوّر)
- الاتصال بحزمة SDK والتطبيق و"وقت تشغيل SDK" (متوفّر في أحدث معاينة للمطوّرين)
- كيفية عمل مرات المشاهدة والعرض عن بُعد للتوسط (اقتراح في التطوير)
تتم مراعاة حالات الاستخدام التالية بسبب الإجراءات الأساسية. التصميم:
- التوسّط وعروض الأسعار: توفّر العديد من حِزم تطوير البرامج (SDK) الإعلانية عروض الأسعار أو التوسّط حيث تطلب حزمة تطوير البرامج (SDK) من خلالها العديد من حِزم تطوير البرامج (SDK) الأخرى للحصول على مرة ظهور (التوسّط)، أو لجمع الإشارات من أجل تنفيذ مزاد (عروض الأسعار). السعر المعتاد تستدعي حزمة SDK المنسَّقة حِزم SDK أخرى من خلال محوّل تم توفيره بواسطة تنسيق SDK. استنادًا إلى العناصر الأساسية أعلاه، يجب أن تكون حزمة SDK التنسيقية، سواء كانت حزمة RE أو not، قادرة على الوصول إلى جميع حِزم SDK التي تستخدم RE وغير ذلك من أجل التشغيل العادي. يُعد العرض في هذا السياق مجالاً نشطًا للتحقيق.
- التعرّف على الميزات: تتكون بعض منتجات حِزم SDK من حِزم SDK أصغر حجمًا أي اكتشاف فيما بين حِزم تطوير البرامج (SDK)، وتحديد أفضل مجموعة من الخصائص التي تظهر لمطور التطبيق. من المتوقّع أن تتيح عناصر التسجيل والاكتشاف هذه الحالة الاستخدام.
- نماذج اشتراكات الناشرين: تم تصميم بعض حزم تطوير البرامج (SDK) للحصول على ناشر الأحداث التي يمكن لحِزم SDK أو التطبيقات الأخرى الاشتراك فيها الإشعارات من خلال عمليات معاودة الاتصال. من المفترض أن تتوافق العناصر الأساسية أعلاه مع حالة الاستخدام هذه.
من تطبيق إلى آخر
ينطوي التواصل بين التطبيقات على عملية واحدة على الأقل من بين العمليتين المعنيّتَين بالتواصل، وهي حزمة تطوير برامج (SDK) مفعّلة في وقت التشغيل، وهي وسيط محتمل لمشاركة البيانات التي لم يتم الإفصاح عنها. ونتيجةً لذلك، لا يمكن لوقت تشغيل حزمة SDK إنشاء قناة تواصل مباشرة مع أي تطبيق آخر غير تطبيق العميل، أو مع حِزم SDK في وقت تشغيل حزمة SDK آخر تم إنشاؤه لتطبيق آخر. ويتم تحقيق ذلك بالطُرق التالية:
- لا يمكن لحزمة SDK تحديد مكونات مثل
<service>
أو<contentprovider>
أو<activity>
في ملف البيان. - لا يمكن لحزمة SDK نشر
ContentProvider
أو إرسال بث. - يمكن لحزمة تطوير البرامج (SDK) إطلاق نشاط ينتمي إلى تطبيق آخر، ولكن مع فرض قيود على ما يمكن إرساله في Intent. على سبيل المثال، لا يمكن استخدام إجراءات إضافية أو مخصصة إضافتها إلى هذا الهدف.
- لا يمكن لحزمة تطوير البرامج (SDK) تشغيل قائمة الخدمات المسموح بها أو ربطها إلا بقائمة مسموح بها.
- لا يمكن لحزمة SDK الوصول إلا إلى مجموعة فرعية من
ContentProvider
النظام (مثلcom.android.providers.settings.SettingsProvider
)، حيث تفتقر data التي تم الحصول عليها إلى المعرّفات ولا يمكن استخدامها لإنشاء بصمة مستخدم. تنطبق عمليات التحقّق هذه أيضًا على الوصول إلىContentProvider
باستخدامContentResolver
. - يمكن لحزمة SDK الوصول فقط إلى مجموعة فرعية من أجهزة استقبال البث المحمية (مثل
باسم
android.intent.action.AIRPLANE_MODE
).
علامات البيان
عند تثبيت حزمة SDK، يفكّر PackageManager
رمز حزمة SDK ويُفشل
في تثبيت حزمة SDK إذا كانت علامات البيان المحظورة متوفّرة. على سبيل المثال، قد تتضمن حزمة SDK
عدم تحديد مكونات مثل <service>, <activity>, <provider>
أو <receiver>
ولا يجوز لهم الإعلان عن القيمة <permission>
في البيان. العلامات التي أخفقت
لا يمكن تثبيت التطبيق في "وقت تشغيل حزمة تطوير البرامج" (SDK). العلامات التي لا تنجح
تثبيتًا ولكن يتم تجاهلها تلقائيًا في نظام التشغيل Android في المستقبل
مماثلة.
يمكن أيضًا تطبيق عمليات التحقّق هذه من خلال أي من أدوات وقت الإصدار التي تستخدمها حزمة تطوير البرامج (SDK) من أجل إنشاء حزمة SDK وعند تحميلها إلى متجر التطبيقات.
دعم النشاط
لا يمكن لحِزم SDK في بيئة "وقت تشغيل حِزم SDK" إضافة علامة نشاط إلى ملف البيان
، ولا يمكنها بدء أنشطتها باستخدام Context.startActivity
.
بدلاً من ذلك، تنشئ المنصة الأنشطة لحِزم SDK عند الطلب، ثم تتم مشاركتها مع حِزم SDK.
نشاط المنصة من النوع android.app.Activity
. يبدأ نشاط النظام الأساسي
من أحد أنشطة التطبيق، وهو جزء من مهمة التطبيق.
FLAG_ACTIVITY_NEW_TASK
غير متاح.
لكي تبدأ حزمة SDK النشاط، يجب أن تسجِّل مثيلاً من النوع
SdkSandboxActivityHandler
، الذي يُستخدَم لإرسال إشعار بشأن إنشاء النشاط عند
يطلب التطبيق من SdkSandboxManager::startSdkSandboxActivity(Activity, IBinder)
وبدء النشاط.
يتم عرض تدفق طلب نشاط في الرسم البياني التالي.
تطوير
يتمثل أحد المبادئ الأساسية في هذا الاقتراح في تقليل التأثير على المطوّر المنظومة المتكاملة إلى أقصى حد ممكن. يقدم هذا الاقتراح للمطورين مجموعة شاملة من أدوات التطوير لكتابة وصياغة وتصحيح الأخطاء المرتبطة بالعقارات وتطبيقات وحزم SDK. لضمان سلامة هذا الاقتراح، هناك بعض التغييرات على كيفية إعداد وصياغة وإنشاء تطبيقات RE التطبيقات وحِزم تطوير البرامج (SDK)
التأليف
سيتم تحديث "استوديو Android" والأدوات ذات الصلة لتصبح متوافقة مع "وقت تشغيل SDK" والمساعدة في التأكّد من أنّ المطوّرين قد ضبطوا بشكل صحيح تطبيقاتهم حِزم تطوير البرامج (SDK) وضمان تحديث المكالمات القديمة أو غير المتوافقة إلى أحدث وبدائلها متى كان ذلك مناسبًا. خلال مرحلة التأليف، هناك بعض الخطوات يتطلب عرضنا من المطورين اتخاذه.
مطوّرو التطبيقات
على التطبيقات تحديد تبعية حزمة SDK لإعادة الإصدار وشهادة حزمة SDK في بيان التطبيق. في اقتراحنا، نتعامل مع هذا كمصدر الحقيقة من مطور التطبيق خلال هذا الاقتراح. على سبيل المثال:
- الاسم: اسم حزمة حزمة SDK أو المكتبة.
- الإصدار الرئيسي: رمز الإصدار الرئيسي لحزمة SDK
- ملخّص الشهادة: ملخّص شهادة حزمة SDK. بالنسبة إلى ملف نقترح أن يحصل مطوّر حزمة تطوير البرامج (SDK) على هذه القيمة ويسجّلها من خلال متجر التطبيقات ذي الصلة.
ينطبق ذلك على حِزم تطوير البرامج (SDK) الموزَّعة من خلال متجر التطبيقات فقط، سواء كانت حِزم تطوير تطبيقات إعادة التوجيه أم لا. ستستخدم التطبيقات التي تربط حِزم SDK بشكل ثابت آليات الاعتمادية الحالية.
وبما أنّ هدفنا هو الحدّ من التأثير على المطوّرين، من المهمّ أن يحدّد مطوّرو التطبيقات مستوى واجهة برمجة التطبيقات المستهدَف المتوافق مع "وقت تشغيل حزمة تطوير البرامج (SDK)"، ثم ينشئوا إصدارًا واحدًا فقط، سواء كان هذا الإصدار يعمل على الأجهزة التي تتوافق مع "وقت تشغيل حزمة تطوير البرامج (SDK)" أو لا تتوافق معه.
مطوّرو حِزم SDK
في التصميم المقترَح، على مطوّري حِزم RE SDK تحديد عنصر جديد يمثّل حزمة SDK أو عنصر المكتبة في البيان بشكل صريح. بالإضافة إلى ذلك، يجب أن تكون مجموعة مماثلة من القيم مثل التبعية المقدمة بالإضافة إلى إصدار ثانوي:
- الاسم: هو اسم حزمة SDK أو المكتبة.
- الإصدار الرئيسي: رمز الإصدار الرئيسي لحزمة SDK
- الإصدار الثانوي: يشير إلى رمز إصدار حزمة SDK الثانوية.
في حال كان على مطوّري RE SDK استخدام حِزم RE SDK أخرى كعناصر تعتمد على وقت الإصدار، يمكنهم الإفصاح عنها بطريقة مماثلة للطريقة التي يتّبعها مطوِّر التطبيقات سيعلن عن نفس التبعية. تعتمد حِزم تطوير البرامج (SDK) غير المستندة إلى RE SDK على وربطهما بشكل ثابت. قد يؤدي ذلك إلى حدوث مشكلات سيتم اكتشافها في وقت الإصدار أو أثناء اجتياز الاختبارات إذا كانت حِزم تطوير البرامج (SDK) غير المستندة إلى RE SDK تتطلب وظائف لا يتوافق "وقت تشغيل حزمة تطوير البرامج" (SDK) أو إذا كان يجب تشغيله خلال عملية التطبيق.
من المحتمل أن يرغب المطوّرون في RE SDK في مواصلة تقديم الدعم للشبكات التي لم تتم إعادة تفعيلها. مثل Android 12 أو الإصدارات الأقدم ووفقًا لما هو مذكور في System Health (سلامة النظام) قسم في المستند، لأجهزة Android 13 المبتدئة والتي تشتمل على موارد النظام المحدودة. نحن نعمل على تطوير طرق لضمان أن يتمكّن مطوّرو حِزم تطوير البرامج (SDK) من الاحتفاظ بقاعدة بيانات برمجية واحدة لتتوافق مع بيئات إعادة المعالجة وغير إعادة المعالجة.
الإصدارات
مطوّرو التطبيقات
نتوقع أن يواجه مطورو التطبيقات تغييرًا طفيفًا في إنشاء التطبيق. العناصر الاعتمادية لحِزم SDK، سواء كانت موزَّعة محليًا أو في تطبيقات موزعة بالمتجر (RE أو لا)، يجب أن تكون موجودة على الجهاز من أجل التحليل باستخدام أداة Lint، والتجميع والإنشاءات. نحن نقترح أن يجري Android Studio تجريدًا لهذه تفاصيل من مطوّر التطبيق مع الاستخدام العادي وتوضيح ذلك قدر الإمكان.
على الرغم من أننا نتوقع أن يتضمن إصدار DEBUG جميع الرموز والرموز أن تكون موجودة في إصدار DEBUG من أجل تصحيح الأخطاء، فإن إصدارات Release يمكنك اختياريًا إزالة جميع حِزم SDK الموزَّعة على متجر التطبيقات (RE أو لا) من الأداة النهائية.
نحن في مرحلة مبكرة من التصميم، وسنشارك المزيد من المعلومات عندما تصبح متاحة.
مطوّرو حِزم SDK
ونعمل على إيجاد مسار لضمان عدم ظهور الإصدارات غير الأصلية والتي إمكانية تضمين حزمة SDK في أداة واحدة للتوزيع سيؤدي هذا إلى ستمنع مطوّري التطبيقات من الحاجة إلى دعم إصدارات منفصلة من RE لحزمة SDK غير تابعة لـ RE.
وكما هو الحال بالنسبة إلى التطبيقات، يجب على أي حزم تطوير برامج (SDK) تبعية يتم توزيعها في متجر التطبيقات على الجهاز لأغراض التحليل باستخدام أداة Lint وتجميع المحتوى والتصميمات، ونتوقع أن يكون Android يجب أن يسهّل "استوديو YouTube" هذه العملية بسلاسة.
الاختبار
مطوّرو التطبيقات
وكما هو موضح في عرضنا، سيتمكن مطوِّرو التطبيقات من اختبار التطبيقات على الأجهزة التي تعمل بنظام التشغيل Android 13 بالطريقة المعتادة. بعد إنشاء تطبيقه، يمكن تثبيت التطبيق على جهاز RE أو محاكي. تضمن عملية التثبيت هذه تثبيت حِزم SDK الصحيحة في SDK Runtime للجهاز أو المحاكي، سواء تم جلب حِزم SDK من مستودع حِزم SDK عن بُعد أو من ذاكرة التخزين المؤقت من نظام الإنشاء.
مطوّرو حِزم SDK
يستخدم مطوّرو حِزم SDK بشكل عام تطبيقات اختبارية داخلية على الأجهزة و المحاكيات لاختبار عمليات التطوير. لا يغيّر اقتراحنا هذا الإجراء، وسيكون التحقّق داخل التطبيق على النحو نفسه الموضّح لمطوّري التطبيقات أعلاه، مع عنصر إنشاء واحد لكل من تطبيقات RE وغير RE. سيتمكّن مطوّرو حِزم SDK من مراجعة الرمز البرمجي سواء كان في SDK Runtime أم لا، إلا أنّه قد تكون هناك بعض القيود المفروضة على أدوات تصحيح الأخطاء المتقدمة وأدوات تحليل الأداء. هذا مجال نشط للتحقيق.
التوزيع
أدى اقتراح التصميم الذي نقدمه لفصل التطبيق عن حزم SDK الخاصة به إلى إنشاء إمكانية توزيع حِزم تطوير البرامج (SDK) في متجر التطبيقات. وهذا احتمال عام، وليس حصريًا لأي متجر تطبيقات معيّن. تتضح المزايا على النحو التالي:
- ضمان جودة حِزم تطوير البرامج (SDK) واتساقها
- تبسيط عملية النشر لمطوّري حِزم تطوير البرامج (SDK)
- تسريع طرح تحديثات الإصدارات الثانوية لحزمة SDK في التطبيقات المثبَّتة
لإتاحة توزيع حزمة تطوير البرامج (SDK)، سيحتاج متجر التطبيقات على الأرجح إلى توفر معظم الإمكانات التالية:
- آلية تتيح لمطوّري حِزم SDK تحميل حِزم SDK القابلة للتوزيع على متجر التطبيقات إلى المتجر وتحديثها وإعادتها إلى إصدار سابق وربما إزالتها
- آلية لضمان سلامة حزمة SDK ومصدرها، وسلامة التطبيق ومصدره، وحلّ تبعيتهما
- آلية لنشرها على الأجهزة بطريقة موثوقة بشكل جيد.
القيود المتزايدة بمرور الوقت
نتوقّع أن تتطوّر القيود التي يواجهها الرمز البرمجي في وقت تشغيل حزمة تطوير البرامج (SDK) لاحقًا
من Android. ولضمان توافق التطبيقات، لن يتم تغيير هذه
القيود المرتبطة بتحديثات الوحدة الرئيسية لمستوى معيّن من حزمة SDK. يتم الاحتفاظ بالسلوك
المرتبط بtargetSdkVersion
معيّن إلى أن يتم إيقاف targetSdkVersion
نهائيًا من خلال سياسة متجر التطبيقات، وقد يتم إيقاف targetSdkVersion
نهائيًا بوتيرة أسرع من التطبيقات.
من المتوقّع أن تتغيّر القيود بشكل متكرر في إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android، وخاصةً
في الإصدارات القليلة الأولى.
بالإضافة إلى ذلك، نعمل على إنشاء آلية اختبار تجريبي للسماح للمختبِرين الداخليين والخارجيين بالانضمام إلى مجموعة تحصل على المجموعة المقترَحة من القيود في الإصدار التالي من Android. سيساعدنا ذلك في الحصول على التعليقات والثقة في التغييرات المقترحة لمجموعة القيود.
الأسئلة الشائعة
-
ما هي حزمة SDK ذات الصلة بالإعلانات؟
وحزمة تطوير البرامج (SDK) المتعلقة بالإعلانات هي تلك التي تسهِّل أي جزء من استهداف للمستخدمين الذين لديهم رسائل لأغراض تجارية في التطبيقات غير المملوكة المعلن. ويشمل ذلك، على سبيل المثال لا الحصر، حِزم تطوير البرامج (SDK) للإحصاءات التي يمكن من خلالها إنشاء مجموعات مستخدمين لاستهدافهم لاحقًا، وحِزم تطوير البرامج (SDK) لعرض الإعلانات، وحِزم تطوير البرامج (SDK) لمكافحة إساءة الاستخدام ومكافحة الاحتيال في الإعلانات، وحِزم تطوير البرامج (SDK) للتفاعل، وحِزم تطوير البرامج (SDK) لتحديد المصدر.
-
هل يمكن تشغيل أي حزمة SDK في "وقت تشغيل حزمة SDK"؟
على الرغم من أنّ التركيز الأولي ينصبّ على حِزم SDK ذات الصلة بالإعلانات، يمكن لمطوّري حِزم SDK غير ذات الصلة بالإعلانات التي تسعى إلى اتّخاذ موقف إيجابي بشأن الخصوصية وتعتقد أنّه يمكنها العمل بموجب الشروط الموضّحة أعلاه مشاركة ملاحظاتهم حول حِزم SDK التي تديرها "وحدة تشغيل حِزم SDK". ومع ذلك، لم يتم تصميم "وقت تشغيل حزمة تطوير البرامج (SDK)" ليتوافق مع جميع تصميمات حِزم SDK. بالإضافة إلى القيود الموثَّقة، من المحتمل أنّ "وقت تشغيل حزمة SDK" غير مناسب لحِزم SDK التي تحتاج إلى اتصالات في الوقت الفعلي أو معدل نقل بيانات مرتفع مع التطبيق المستضيف.
-
لماذا نختار عزل العمليات بدلاً من العزلة داخل هل هي بيئة تشغيل مستندة إلى Java؟
في الوقت الحالي، لا يسهّل وقت التشغيل المستند إلى Java عملية الأمان لازمة لتعزيز ضمانات الخصوصية المطلوبة لنظام Android المستخدمين. إنّ محاولة تنفيذ إجراء مماثل قد تتطلّب جهدًا لعدة سنوات، بدون ضمان تحقيق النجاح. لذلك، فإنّ سياسة الخصوصية وتستخدم بيئة الحماية حدود العمليات، وهي عبارة عن نهج تم اختباره زمنيًا وافهمه جيدًا. التكنولوجيا.
-
هل سيؤدي نقل حِزم SDK إلى عملية "وقت تشغيل حزمة SDK" إلى تقليل حجم التنزيل أو توفير مساحة؟
في حال دمج عدة تطبيقات مع حِزم تطوير برامج (SDK) يتم تفعيلها في وقت التشغيل من نفس فيمكن أن يؤدي ذلك إلى تقليل حجم التنزيل ومساحة القرص.
-
نوع أحداث مراحل نشاط التطبيق، مثل انتقال التطبيق إلى في الخلفية، هل سيكون بإمكان حِزم SDK الوصول إلى الأداة في "وقت تشغيل SDK"؟
نحن نعمل بشكل نشط على دعم التصميم لإرسال إشعارات بالوقت على مستوى التطبيق عن وقت تشغيل حزمة تطوير البرامج (SDK) أحداث مراحل نشاط تطبيق العميل (مثل دخول التطبيق في الخلفية، تطبيق يتم تشغيله في المقدّمة). ستتم مشاركة التصميم ونموذج التعليمات البرمجية في معاينة مطوّر البرامج القادمة.
محتوى مُقترَح لك
- ملاحظة: يظهر نص الرابط عند إيقاف JavaScript
- دليل المطوِّر لوقت تشغيل حزمة تطوير البرامج (SDK)