الرسم البياني الفني

في الإصدار Android 8.0 والإصدارات الأحدث، تعرض واجهة أدوات ART (ART TI) بعض العمليات الداخلية في بيئة التشغيل، كما تمكّن المحللين وبرامج تصحيح الأخطاء من التأثير في سلوك بيئة تشغيل التطبيقات يمكن استخدام هذا لتنفيذ متطورة أدوات الأداء التي تتوفر لتنفيذ الوكلاء الأصليين على الأنظمة الأساسية الأخرى.

يتم عرض العناصر الداخلية لبيئة التشغيل للبرامج التي تم تحميلها في عملية التشغيل. تتواصل هذه الجهات مع ART من خلال المكالمات المباشرة ومعاودة الاتصال. بيئة التشغيل ويدعم العديد من الوكلاء بحيث يمكن للمخاوف المختلفة في تحديد الملفات الشخصية المتعامدة منفصلة. ويمكن توفير البرامج الوكيلة عند بدء بيئة التشغيل (عند تم استدعاء dalvikvm أو app_process)، أو إرفاقها عملية قيد التشغيل بالفعل.

وذلك لأنّ القدرة على قياس سلوك التطبيق وبيئة التشغيل وتعديلهما قوية للغاية، تم دمج اثنين من إجراءات الأمان في إطار ART TI:

  • أولاً، يتم تنفيذ الرمز الذي يعرض واجهة الوكيل، JVMTI، وليس مكوِّنًا أساسيًا في بيئة التشغيل. قد يكون تحميل المكوّن الإضافي بحيث يمكن منع الوكلاء من العثور على أي من واجهات نقاط.
  • ثانيًا، تتيح كل من الفئة ActivityManager وعملية بيئة التشغيل للوكلاء نرفق بالتطبيقات التي يمكن تصحيح الأخطاء بها. تم تسجيل الخروج من التطبيقات التي يمكن تصحيح الأخطاء فيها من قِبل مطوّري البرامج التابعين لها لتحليلها ومعالجتها، ولا يتم توزيعها على المستخدمين النهائيين. لا يسمح "متجر Google Play" بتوزيع البرامج القابلة للتصحيح. التطبيقات. ويضمن هذا عدم إمكانية تغيير التطبيقات العادية (بما في ذلك المكوّنات الأساسية). مزودًا بأدوات أو التلاعب.

التصميم

يظهر التدفق العام والاتصال البيني في أي تطبيق مرتبط بأداة لقياس الأداء الشكل 1.

التدفق والاتصال البيني في تطبيق مرتبط بأداة لقياس الأداء
الشكل 1. التدفق ربط بيني لتطبيق مزوّد بأداة لقياس الأداء

يعرض المكون الإضافي ART libopenjdkjvmti ART TI، وهو مُصمَّمة لتلائم احتياجات المنصة وقيودها:

  • تعتمد إعادة تعريف الفئة على ملفات Dex، تحتوي على تعريف فئة واحدة، بدلاً من ملفات الفئة.
  • واجهات برمجة التطبيقات بلغة Java للأدوات وإعادة التعريف غير متاحة مكشوفة.

ويتوافق واجهة برمجة التطبيقات ART TI أيضًا مع محلّلي "استوديو Android".

تحميل وكيل أو إرفاقه

لإرفاق وكيل عند بدء التشغيل في وقت التشغيل، استخدم هذا الأمر لتحميل كل من المكون الإضافي JVMTI والوكيل المحدد:

dalvikvm -Xplugin:libopenjdkjvmti.so -agentpath:/path/to/agent/libagent.so …

لا يتم فرض تدابير سلامة عند تحميل وكيل في وقت التشغيل. لذا عليك أن تضع في اعتبارك أن بيئة التشغيل التي يتم بدؤها يدويًا تسمح بكامل التعديل بدون تدابير السلامة. (يتيح ذلك اختبار ART).

ملاحظة: لا ينطبق ذلك على التطبيقات العادية (بما في ذلك النظام). الخادم) على الجهاز. يتم إنشاء التطبيقات من زيغوت قيد التشغيل، ولا يسمح لعملية زيغوت بتحميل البرامج الوكيلة.

لإرفاق وكيل بتطبيق قيد التشغيل، استخدِم هذا :

adb shell cmd activity attach-agent [process]
/path/to/agent/libagent.so[=agent-options]

إذا لم يتم تحميل المكوّن الإضافي JVMTI حتى الآن، سيؤدي إرفاق الوكيل إلى تحميل كليهما المكون الإضافي ومكتبة الوكيل.

لا يمكن إرفاق الوكيل إلا بتطبيق قيد التشغيل تم وضع علامة عليه بأنّه debuggable (جزء من بيان التطبيق، مع سمة تم ضبط android:debuggable على true في التطبيق. العقدة). تحقق كل من الفئة ActivityManager وART قبل السماح بإرفاق معلومات أحد موظفي الدعم. ActivityManager تتحقق الفئة من معلومات التطبيق الحالية (المشتقة من PackageManager). class data) للتحقق من حالة إمكانية تصحيح الأخطاء، وتتحقق بيئة التشغيل من حالتها الحالية. والذي تم ضبطه عند بدء تشغيل التطبيق.

المواقع الجغرافية لموظّفي الدعم

تحتاج بيئة التشغيل إلى تحميل البرامج الوكيلة في العملية الحالية، لكي يتمكن الوكيل الارتباط بها والتواصل معها بشكل مباشر. الفن الحديث بحد ذاته حيادية بخصوص الموقع الجغرافي المحدّد الذي يأتي منه الوكيل يتم استخدام السلسلة لإجراء مكالمة dlopen. أذونات نظام الملفات وسياسات SELinux تقييد التحميل الفعلي

لإرسال الوكلاء الذين يمكن تشغيلهم من خلال تطبيق قابل للتصحيح، نفِّذ ما يلي:

  • تضمين الوكيل في دليل المكتبة لحزمة APK الخاصة بالتطبيق
  • استخدام "run-as" لنسخ الوكيل إلى بيانات التطبيق الدليل.

واجهات برمجة التطبيقات

تمت إضافة الطريقة التالية إلى android.os.Debug.

/**
     * Attach a library as a jvmti agent to the current runtime, with the given classloader
     * determining the library search path.
     * Note: agents may only be attached to debuggable apps. Otherwise, this function will
     * throw a SecurityException.
     *
     * @param library the library containing the agent.
     * @param options the options passed to the agent.
     * @param classLoader the classloader determining the library search path.
     *
     * @throws IOException if the agent could not be attached.
     * @throws a SecurityException if the app is not debuggable.
     */
    public static void attachJvmtiAgent(@NonNull String library, @Nullable String options,
            @Nullable ClassLoader classLoader) throws IOException {

واجهات برمجة تطبيقات Android أخرى

ويكون أمر partner-agent مرئيًا بشكل علني. يرفق هذا الأمر JVMTI إلى عملية جارية:

adb shell 'am attach-agent com.example.android.displayingbitmaps
\'/data/data/com.example.android.displayingbitmaps/code_cache/libfieldnulls.so=Ljava/lang/Class;.name:Ljava/lang/String;\''

يتشابه الأمران am start -P وam start-profiler/stop-profiler مع الأمر partner-agent.

آلة متجه الدعم

وتعرض هذه الميزة واجهة برمجة تطبيقات JVMTI على الوكلاء (الرمز البرمجي الأصلي). ورقة البيانات المهمة تشمل الإمكانات ما يلي:

  • إعادة تعريف صف دراسي.
  • تتبُّع تخصيص العناصر وجمع البيانات غير المرغوب فيها
  • ويتكرر الأمر على كل العناصر في كومة الذاكرة المؤقتة، وتتبع الشجرة المرجعية الأخرى.
  • فحص حزم مكالمات Java
  • تعليق جميع سلاسل المحادثات واستئنافها

قد تتوفر إمكانات مختلفة في إصدارات مختلفة من Android

التوافق

يجب أن تكون هذه الميزة متوافقة مع بيئة التشغيل الأساسية، ولا تتوفّر إلا على نظام التشغيل Android 8.0. وأعلى. لا تحتاج الشركات المصنّعة للأجهزة إلى إجراء أي تغييرات لتنفيذها. هذه الميزة. وهي جزء من AOSP.

التحقُّق

تختبر CTS ما يلي على نظام Android 8 والإصدارات الأحدث:

  • الاختبارات التي يرفقها الوكلاء بالتطبيقات التي يمكن تصحيح الأخطاء بها والتي يتعذّر إرفاقها التطبيقات التي لا يمكن تصحيح الأخطاء بها.
  • اختبار جميع واجهات برمجة تطبيقات JVMTI التي تم تنفيذها
  • اختبارات توضح استقرار الواجهة الثنائية للوكلاء

تمت إضافة اختبارات إضافية إلى الإصدار 9 من نظام Android والإصدارات الأحدث، وقد تم تضمينها في اختبارات CTS لتلك الإصدارات.