هل تتذكر كيف جعل Android 8 من السهل تخصيص سمة لجهازك؟ هل تتذكر كم كان ذلك ممتعًا؟ حسنًا، لقد عاد إلى نظام التشغيل Android 12، مع لمسة جديدة.
الإسطبل الكامل أندرويد 12 الإصدار قاب قوسين أو أدنى، وجوجل لديها حتى نشرت شفرة المصدر إلى AOSP الريبو الخاص به. هناك الكثير من الميزات الجديدة في Android 12، بما في ذلك إضافة إلى تراكبات الموارد تسمى Fabricated Overlays. ما كان المقصود به هو واجهة برمجة التطبيقات (API) لمساعدة النظام على إدارة التغييرات الديناميكية المستخدمة في المادة أنت وقد يتحول تطبيق monet إلى شيء أكبر بكثير - على الأقل حتى إصدار Android 13.
خلفية
اكتشف مشعل الرحمن واجهة برمجة التطبيقات الجديدة هذه ولفت انتباهي إليها. لقد كان يستخدم أمر shell لاختبار قيم الموارد المختلفة في Android 12 دون الحاجة إلى ذلك لتجميع ملفات APK المتراكبة يدويًا، واعتقد أن ذلك قد يقدم فكرة تطبيق مثيرة للاهتمام للأجهزة التي تم الوصول إليها بصلاحية الجذر. عندما لفت انتباهي إلى الأمر، تناولت الكثير من التعليمات البرمجية المصدر لنظام Android 12 ولاحظت شيئًا اعتقدت أنه مثير للاهتمام للغاية. لقد اختبرت ما وجدته، والآن نحن هنا - كما اتضح، يمكن استخدام Fabricated Overlay API لإعادة السمات التي لا جذور لها. قبل أن أتعمق كثيرًا في ما يحدث هنا، سأشرح ما هي التراكبات المُصنَّعة في الواقع.
ما هي التراكبات الملفقة؟
التراكبات المُصنَّعة هي ميزة جديدة تم تقديمها في Android 12. إنها تشبه تراكبات موارد وقت التشغيل (RROs) الكلاسيكية التي يمتلكها Android منذ بضع سنوات حتى الآن. يمكن لكل من RROs والتراكبات المُصنَّعة تجاوز الموارد المختلفة لتطبيقات مختلفة. يمكنك تغيير القيمة المنطقية من false إلى true (أو العكس)، وتعيين حجم شريط الحالة الذي تريده، وما إلى ذلك.
ومع ذلك، فإن التراكبات المُصنَّعة لديها بعض الاختلافات الملحوظة عن RROs. أولاً، لا تحتاج إلى إنشاء ملف APK متراكب ثم تثبيته. وبدلاً من ذلك، ما عليك سوى إخبار Android بالقيم التي تريد تغييرها لكل تطبيق، وسيهتم بتسجيل تغييراتك كتراكب يمكنك تمكينه بعد ذلك.
كما أنها محدودة بعض الشيء أكثر من عمليات RROs. قبل Android 11، كان بإمكان RROs تجاوز أي مورد تقريبًا: القيم المنطقية والأعداد الصحيحة والأبعاد والسمات والتخطيطات وحتى ملفات البيانات الأولية. أجرى Android 11 بعض التغييرات على كيفية عمل RROs، مما جعل تجاوز التخطيطات غير ممكن حقًا بعد الآن، على الرغم من أنه جعل RROs أكثر استقرارًا بشكل عام.
من ناحية أخرى، لا يمكن للتراكبات المُصنَّعة تجاوز القيم التي يمكن تمثيلها كأعداد صحيحة. يتضمن ذلك الأعداد الصحيحة (duh)، والأبعاد، والقيم المنطقية، والألوان. لا يمكنك استخدامها لتجاوز موارد البيانات الأولية، أو التخطيطات، أو السلاسل، أو المصفوفات - على الأقل ليس بسهولة. يعد هذا قيدًا تعسفيًا إلى حد ما في واجهة برمجة التطبيقات: فهو يقبل فقط القيم الصحيحة وفئات الموارد كما هو محدد بواسطة فئة TypedValue. القيمة المكتوبة تفعل ذلك يدعم السلاسل وأنواع الموارد الأخرى، ولكن فقط للإشارة إلى مواردها، وليس الاحتفاظ ببياناتها الفعلية.
ومع ذلك، فإن هذه القيود ليست كبيرة جدًا بالنسبة للغرض المقصود من التراكبات المُصنعة: المادة أنت وتأثيرات مونيه. تسهل التراكبات المُصنّعة على النظام إنشاء تراكبات الألوان والأبعاد وتطبيقها بسرعة، دون الحاجة إلى إعادة التشغيل أو الانتظار حتى يتم تجميع ملف APK.
الآن، عادةً ما تكون هذه مجرد واجهة برمجة تطبيقات أنيقة أخرى يمكن للأشخاص الذين لديهم أجهزة ذات جذر الاستفادة منها. ما لم تكن هناك ثغرة أنشأتها الشركة المصنعة (مثل تلك التي تستفيد منها Synergy على أجهزة Samsung)، لا يمكن تثبيت التراكبات إلا بواسطة جهات خارجية تتمتع بإمكانية الوصول إلى الجذر. ومع ذلك، هذا هو الجزء الأفضل، فقد نسيت شركة Google إصلاح ثغرة في نظام التشغيل Android 12.
تراكبات ملفقة بدون الجذر
قدم Android 8 واجهة برمجة تطبيقات Overlay Manager Service (أو OMS) الجديدة، وسرعان ما اكتشف الأشخاص أنه يمكن تثبيت ملفات APK المتراكبة كتطبيقات عادية ثم تمكينها باستخدام ADB. للأسف، قامت Google بتصحيح هذا في نظام التشغيل Android 9، ومنذ ذلك الحين، لا يمكن تثبيت سوى التراكبات الموقعة بنفس مفتاح النظام ديناميكيًا.
كما اتضح، تحتوي التراكبات المصنعة في نظام Android 12 على ثغرة تذكرنا بتلك الموجودة في Android 8: فهي لا تحتاج إلى الوصول إلى الجذر أو أذونات على مستوى التوقيع. إنهم فقط بحاجة إلى شيء يعمل كمستخدم Shell (أي ADB) لتسجيلهم.
من الواضح تمامًا أن Google كانت تهدف إلى إتاحة الوصول إلى التراكبات المُصنّعة فقط لمستخدمي الجذر والنظام. يوجد تنفيذ أمر ADB لإنشائها، ولن يتم تشغيله إذا لم يكن المستخدم المنفذ مستخدمًا جذريًا. الثغرة هي أن التحقق يكون فقط في الأمر، وليس واجهة برمجة التطبيقات الفعلية، مما يعني أنه يمكننا الاستفادة منه بقليل من العمل.
بنك التنمية الآسيوي على الجهاز
منذ فترة طويلة، يتمتع Android بميزة ADB اللاسلكية. يتيح ذلك لجهاز الكمبيوتر (أو أي شيء لديه وصول ثنائي ADB وشبكة) الاتصال بجهاز لاسلكيًا. إنه مخصص في الغالب لأجهزة Android التي لا تحتوي على اتصالات USB يمكن للمستخدم الوصول إليها، مثل الساعات الذكية وأجهزة التلفاز. علاوة على ذلك، قبل Android 11، كنت بحاجة إلى اتصال ADB سلكي لتنشيط الوضع اللاسلكي.
Android 11 هو ما جلب ADB اللاسلكي رسميًا إلى الهواتف والأجهزة اللوحية. إنها أكثر تعقيدًا قليلاً من ADB اللاسلكية الكلاسيكية، مع رموز الاقتران والمصادقة، ولكن يمكن للمستخدم تفعيلها بالكامل على الجهاز، طالما أن الجهاز متصل بشبكة WiFi. وهذا يعني أنه من الممكن الاتصال بجهازك من خلال ADB من جهازك، وكل ما تحتاجه هو شبكة WiFi اتصال.
استخدام واجهات برمجة التطبيقات المرتفعة في التطبيق
هناك الكثير من الأسباب التي قد تدفعك إلى استخدام واجهات برمجة التطبيقات المقيدة في تطبيقك. عادةً ما يرجع ذلك إلى أنها توفر بعض الوظائف الخاصة التي تحتاجها. طالما أن واجهة برمجة التطبيقات (API) التي تحتاجها تحتوي على تطبيق أمر Shell، فمن السهل جدًا استخدامها من خلال التطبيق. كل ما عليك فعله هو إنشاء عملية Shell كجذر (أو ADB)، وتشغيل الأمر الصحيح، وتحليل النتيجة، إن وجدت.
ماذا لو لم يكن لدى واجهة برمجة التطبيقات تطبيق Shell، أو كان تنفيذ Shell يفتقد شيئًا تحتاجه؟ إذا كنت تستخدم جهازًا جذرًا، فيمكنك استخدام شيء مثل libRootJava. يتيح لك libRootJava التفاعل مع واجهات برمجة تطبيقات إطار عمل Android كما لو كان تطبيقك يعمل كمستخدم جذري. يعد هذا أكثر ملاءمة وأسرع بكثير من تشغيل أوامر shell، نظرًا لأنها كلها بنفس اللغة، ولا داعي للقلق بشأن تحليل السلاسل يدويًا. لديها بعض القيود، ولكنها في الغالب تعمل بشكل رائع.
واجهة برمجة التطبيقات libRootJava مرنة جدًا. يمكنك تعديله ليعمل كمستخدم Shell بدلاً من الجذر. لحسن الحظ، ليس عليك القيام بذلك، لأن شخصًا ما قام بذلك بالفعل، وتم الاتصال به شيزوكو. يشبه Shizuku تقريبًا مزيجًا من Magisk Manager و libRootJava.
يرشدك تطبيق Shizuku Manager خلال إعداد عملية يتم تشغيلها كمستخدم shell الذي يمكن لـ Shizuku الوصول إليه. يمكن تنفيذ مكتبة Shizuku API في التطبيقات للسماح لهم بالوصول إلى واجهات برمجة تطبيقات النظام كما لو كانوا مستخدمين Shell. إنها عملية أكثر مركزية من libRootJava، نظرًا لأن Shizuku يحتاج إلى الإعداد مرة واحدة فقط قبل أن يتمكن كل تطبيق ينفذ مكتبة Shizuku API من استخدامها. إذا كنت مهتمًا بكيفية عمل Shizuku وكيف يمكنك دمجها في تطبيقك، لدي دليل لذلك هنا.
شيزوكو والتراكبات الملفقة
الآن، ربما يمكنك أن ترى إلى أين يتجه هذا الأمر. يمكننا استخدام خدمة مثل Shizuku للوصول إلى Fabricated Overlays API كمستخدم Shell، ويمكننا استخدام ميزة ADB اللاسلكية في Android 11 للحصول على وصول على مستوى Shell، كل ذلك على الجهاز. نظرًا لأن تقييد المستخدم الجذر موجود فقط في أمر Shell Fabricated Overlays وليس واجهة برمجة التطبيقات الفعلية، فإن التشغيل كمستخدم Shell يكفي لاستخدامه مباشرة.
التنفيذ: المكتبة ونموذج التطبيق
وماذا عن تفاصيل التنفيذ؟ حسنًا، لقد قمت بتغطية ذلك أيضًا.
استعدادًا لهذا، قمت بعمل كلا من أ مكتبة وتطبيق نموذجي يعمل بكامل طاقته باستخدام تلك المكتبة.
المكتبة نفسها مخصصة في الغالب للراحة. فهو يغطي بعض واجهات برمجة تطبيقات النظام المخفية ويمنحك بعض الطرق الملائمة للتعامل مع أذونات Shizuku. كما أنها مرنة، لذا يمكنك توفير مثيلك الخاص لـ IOverlayManager API إذا كانت لديك طريقة أخرى لاستردادها.
يوضح نموذج التطبيق كيف يمكنك تنفيذ المكتبة باستخدام Shizuku. إنه أيضًا تطبيق مفيد ومفيد بالكامل. تعرض الصفحة الرئيسية التراكبات الملفقة المسجلة حاليًا والتي تم إنشاؤها من خلالها، مجمعة حسب التطبيق المستهدف. يمكنك تمكينها وتعطيلها وحذفها من هناك أيضًا.
يؤدي النقر على زر "إضافة تراكب" في الأسفل إلى نقلك إلى قائمة بجميع التطبيقات القابلة للتراكب. ابحث أو قم بالتمرير للعثور على ما تحتاجه ثم اضغط عليه. ثم يمكنك الضغط على الزر "إضافة" الموجود أسفل الشاشة لعرض قائمة الموارد التي يمكن تجاوزها في هذا التطبيق. حدد موردًا، وقم بتعيين قيمته، وكرر ذلك لأي عدد تريد تغييره من القيم. اضغط على زر "حفظ"، وأدخل اسمًا، وأكده، وستتم إعادتك إلى الشاشة الرئيسية، وستعرض الآن التراكب الجديد، الجاهز للتمكين.
إليكم بعض لقطات الشاشة من التطبيق، شكرًا لمشعل الرحمن.
كملاحظة جانبية، لدي أيضًا تطبيق مدير تراكب عام يسمى... مدير التراكب. التطبيق المترجم مسبقًا نفسه هو متاح فقط على موقعي Patreon، لكن ال كود المصدر متاح بحرية لمن يريد تجميعه أو تعديله.
خاتمة
تعد واجهة برمجة التطبيقات Fabricated Overlays API الجديدة في Android 12 رائعة جدًا، ويرجع ذلك في الغالب إلى أنها لا تحتاج إلى الجذر. قد لا يكون معقدًا مثل ملف RRO APK الكامل، ولكنه يمنحك المزيد من المرونة دون الوصول إلى الجذر.
تحقق من تطبيق Fabricate Overlay على GitHub
إذا كان لديك جهاز يعمل بنظام التشغيل Android 12 وتريد تجربة ذلك، فراجع مستودع GitHub المرتبط أعلاه. سيحتوي قسم الإصدارات على APK للتنزيل والاستخدام. يجب أن يكون من السهل تضمين المكتبة في تطبيقك الخاص باستخدام JitPack.
وبطبيعة الحال، لا ينبغي أن تتوقع استمرار هذه الميزة لفترة طويلة. لا تحب Google حقًا تراكبات الجهات الخارجية، لذلك سيتم إصلاح هذا الأمر بالتأكيد عند إصدار Android 13. في هذه الأثناء، استمتع بها بينما تدوم!