عند تطوير التطبيقات التي تتطلب الوصول إلى الجذر، فإن الطريقة الأكثر شيوعًا هي تشغيل بعض الأوامر في su Shell. على سبيل المثال، يوجد تطبيق يستخدم الأمر pm enable/disable
لتمكين/تعطيل المكونات.
هذه الطريقة لها عيوب كبيرة جدا:
يستخدم شيزوكو طريقة مختلفة تمامًا. انظر الوصف التفصيلي أدناه.
https://shizuku.rikka.app/
أولاً، نحتاج إلى التحدث عن كيفية استخدام التطبيق لواجهات برمجة تطبيقات النظام. على سبيل المثال، إذا كان التطبيق يريد الحصول على التطبيقات المثبتة، فنحن نعلم جميعًا أنه يجب علينا استخدام PackageManager#getInstalledPackages()
. هذه في الواقع عملية اتصال بين العمليات (IPC) لعملية التطبيق وعملية خادم النظام، فقط إطار عمل Android هو الذي قام بالأعمال الداخلية لنا.
يستخدم Android binder
للقيام بهذا النوع من IPC. يسمح Binder
لجانب الخادم بمعرفة المعرف الفريد (uid) ومعرف الهوية (pid) من جانب العميل، بحيث يمكن لخادم النظام التحقق مما إذا كان التطبيق لديه الإذن للقيام بهذه العملية.
عادةً، إذا كان هناك "مدير" (على سبيل المثال، PackageManager
) لاستخدام التطبيقات، فيجب أن تكون هناك "خدمة" (على سبيل المثال، PackageManagerService
) في عملية خادم النظام. يمكننا ببساطة أن نفكر أنه إذا كان التطبيق يحمل binder
"الخدمة"، فيمكنه التواصل مع "الخدمة". ستتلقى عملية التطبيق مجلدات خدمات النظام في البداية.
يرشد Shizuku المستخدمين إلى تشغيل العملية، خادم Shizuku، باستخدام الجذر أو ADB أولاً. عندما يبدأ التطبيق، سيتم أيضًا إرسال binder
إلى خادم Shizuku إلى التطبيق.
الميزة الأكثر أهمية التي يوفرها Shizuku هي أن تكون وسيطًا لتلقي الطلبات من التطبيق، وإرسالها إلى خادم النظام، وإرسال النتائج مرة أخرى. يمكنك رؤية طريقة transactRemote
في فئة rikka.shizuku.server.ShizukuService
، وفئة moe.shizuku.api.ShizukuBinderWrapper
للحصول على التفاصيل.
لذلك، وصلنا إلى هدفنا، وهو استخدام واجهات برمجة تطبيقات النظام بأذونات أعلى. وبالنسبة للتطبيق، فهو مطابق تقريبًا لاستخدام واجهات برمجة تطبيقات النظام مباشرةً.
https://github.com/RikkaApps/Shizuku-API
التطبيقات الحالية لا تزال تعمل، بطبيعة الحال.
https://github.com/RikkaApps/Shizuku-API#migration-guide-for-existing-applications-use-shizuku-pre-v11
أذونات بنك التنمية الآسيوي محدودة
لدى ADB أذونات محدودة ومختلفة في إصدارات النظام المختلفة. يمكنك رؤية الأذونات الممنوحة لـ ADB هنا.
قبل استدعاء واجهة برمجة التطبيقات، يمكنك استخدام ShizukuService#getUid
للتحقق مما إذا كان Shizuku يقوم بتشغيل ADB الخاص بالمستخدم، أو استخدام ShizukuService#checkPermission
للتحقق مما إذا كان الخادم لديه أذونات كافية.
قيود API المخفية من Android 9
اعتبارًا من نظام التشغيل Android 9، يقتصر استخدام واجهات برمجة التطبيقات المخفية على التطبيقات العادية. الرجاء استخدام طرق أخرى (مثل https://github.com/LSPosed/AndroidHiddenApiBypass).
أندرويد 8.0 وبنك التنمية الآسيوي
في الوقت الحاضر، الطريقة التي تحصل بها خدمة Shizuku على عملية التطبيق هي الجمع بين IActivityManager#registerProcessObserver
و IActivityManager#registerUidObserver
(26+) لضمان إرسال عملية التطبيق عند بدء تشغيل التطبيق. ومع ذلك، في API 26، يفتقر ADB إلى أذونات لاستخدام registerUidObserver
، لذلك إذا كنت بحاجة إلى استخدام Shizuku في عملية قد لا تبدأ بواسطة نشاط ما، فمن المستحسن تشغيل رابط الإرسال عن طريق بدء نشاط شفاف.
الاستخدام المباشر ل transactRemote
يتطلب الاهتمام
قد تختلف واجهة برمجة التطبيقات (API) باختلاف إصدارات Android، لذا يرجى التأكد من التحقق منها بعناية. أيضًا، يحتوي android.app.IActivityManager
على نموذج helpl في API 26 والإصدارات الأحدث، و android.app.IActivityManager$Stub
موجود فقط في API 26.
قد لا يحصل SystemServiceHelper.getTransactionCode
على رمز المعاملة الصحيح، مثل android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages
غير موجود في API 25 ويوجد android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages_47
(تم التعامل مع هذا الموقف مع، ولكن لا يستبعد أن تكون هناك ظروف أخرى). لم تتم مواجهة هذه المشكلة مع أسلوب ShizukuBinderWrapper
.
git clone --recurse-submodules
:manager:assembleDebug
أو :manager:assembleRelease
تقوم المهمة :manager:assembleDebug
بإنشاء خادم قابل للتصحيح. يمكنك إرفاق مصحح أخطاء بـ shizuku_server
لتصحيح أخطاء الخادم. انتبه إلى أنه في Android Studio، يجب تحديد "تشغيل/تصحيح التكوينات" - "التثبيت دائمًا باستخدام مدير الحزم"، حتى يستخدم الخادم أحدث التعليمات البرمجية.
الكود الخاص بهذا المشروع متاح بموجب ترخيص Apache-2.0.
يُحظر عليك استخدام ملفات الصور المدرجة أدناه بأي شكل من الأشكال (ما لم يتم عرض Shizuku نفسها).
manager/src/main/res/mipmap-hdpi/ic_launcher.png
manager/src/main/res/mipmap-hdpi/ic_launcher_background.png
manager/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
manager/src/main/res/mipmap-xhdpi/ic_launcher.png
manager/src/main/res/mipmap-xhdpi/ic_launcher_background.png
manager/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
manager/src/main/res/mipmap-xxhdpi/ic_launcher.png
manager/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
manager/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
manager/src/main/res/mipmap-xxxhdpi/ic_launcher.png
manager/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
manager/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
بالنسبة للمشروع ككل فهو ليس مجاني. يُحظر عليك توزيع ملف apk الذي قمت بتجميعه (بما في ذلك التعديل، على سبيل المثال، إعادة تسمية اسم التطبيق "Shizuku" إلى شيء آخر) إلى أي متجر (IBNLT Google Play Store، F-Droid، Amazon Appstore وما إلى ذلك).