غالبًا ما تكون عمليات التتبُّع أفضل مصدر للمعلومات عند البحث لأول مرة عن مشكلة في الأداء. فهي تسمح لك بتكوين فرضية حول المشكلة ومن أين تبدأ البحث.
يتوفّر مستويان من التتبّع على Android: تتبّع النظام وتتبّع الإجراءات.
بما أنّ تتبُّع النظام يتتبّع فقط المناطق التي تم وضع علامة عليها تحديدًا للتتبُّع، فإنّه يتطلّب موارد قليلة ولا يؤثر في أداء تطبيقك بشكل كبير. تتبُّع النظام هو طريقة رائعة لمعرفة المدة التي تستغرقها أقسام معيّنة من الرمز البرمجي لتشغيلها.
يتتبّع سجلّ الإجراءات كل استدعاء دالة في تطبيقك، وهو أمر مكلف للغاية ويؤثر بشكل كبير في أداء تطبيقك، ولكنه يمنحك صورة كاملة لما يحدث، والدوال التي يتم استدعاؤها، وعدد مرات استدعائها.
بشكل تلقائي، لا تتضمّن سجلّات تتبّع النظام الدوال المركّبة الفردية. وهي متاحة في سجلّات الإجراءات.
يعرض تتبُّع التكوين الدوال البرمجية المركبة داخل سجلّات تتبُّع النظام. توفّر لك هذه الميزة مستوى منخفضًا من التداخل من خلال تتبُّع النظام، مع مستويات تفصيلية لتتبُّع الإجراءات في عملية التركيب.
إعداد تتبُّع الإنشاء
لتجربة تتبُّع إعادة الإنشاء في مشروعك، عليك التحديث إلى الإصدارات التالية على الأقل:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Compose Compiler: الإصدار 1.3.0
يجب أيضًا أن يكون الجهاز أو المحاكي الذي يتم تشغيل التتبُّع عليه بمستوى واجهة برمجة التطبيقات 30 كحد أدنى.
بالإضافة إلى ذلك، عليك إضافة تبعية جديدة إلى Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.12.1")
إذا كنت تستخدم Compose BOM، ليس عليك تحديد الإصدار:
val composeBom = platform("androidx.compose:compose-bom:2026.09.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
باستخدام هذه التبعية، عند إجراء تتبّع للنظام يتضمّن إعادة تركيب، يمكنك الاطّلاع على الدوال المركّبة تلقائيًا.
كيفية تتبُّع النظام
لأخذ سجلّ تتبّع النظام والاطّلاع على تتبُّع إعادة الإنشاء الجديد أثناء العمل، اتّبِع الخطوات التالية:
افتح أداة تحليل الأداء:
الشكل 2: استوديو Android - بدء تحليل الأداء انقر على المخطط الزمني لوحدة المعالجة المركزية
الشكل 3: محلّل "استوديو Android" - المخطط الزمني لوحدة المعالجة المركزية انتقِل في تطبيقك إلى واجهة المستخدم التي تريد تتبُّعها، ثم اختَر تتبُّع النظام وتسجيل
الشكل 4. خيارات التتبُّع - تتبُّع النظام استخدِم تطبيقك لإجراء إعادة تركيب وإيقاف التسجيل. بعد معالجة التتبُّع وظهوره، من المفترض أن تتمكّن الآن من رؤية الدوال المركّبة في تتبُّع إعادة الإنشاء. يمكنك استخدام لوحة المفاتيح والماوس للتكبير والتحريك حول التتبُّع. إذا لم تكن على دراية بالتنقّل في التتبُّع، يمكنك الاطّلاع على مستندات تسجيل عمليات التتبُّع.
الشكل 5. سجلّ تتبّع النظام يؤدي النقر مرّتين على دالة مركّبة في الرسم البياني إلى نقلك إلى الرمز المصدر الخاص بها.
يمكنك أيضًا الاطّلاع على الدوال المركّبة في "رسم بياني مفصّل لأداء الرموز" مع الملف ورقم السطر:
الشكل 6. الرسم البياني المفصّل لأداء الرموز
المحاذير
عند استخدام ميزة "تتبُّع التركيب"، يجب مراعاة التحذيرات التالية بشأن حجم حزمة APK وأدائها.
الزيادة في حجم حزمة APK
على الرغم من أنّنا سعينا إلى تقليل حجم الميزة قدر الإمكان، إلا أنّ هناك زيادة في حجم حزمة APK لتطبيقات Compose الناتجة عن سلاسل التتبُّع المضمّنة في حزمة APK بواسطة برنامج تجميع Compose. يمكن أن تكون هذه الزيادة في الحجم صغيرة نسبيًا إذا كان تطبيقك لا يستخدم الكثير من Compose أو أكبر للتطبيقات التي تستخدم Compose بالكامل. بالإضافة إلى ذلك، لا يتم إخفاء سلاسل التتبُّع هذه حتى تظهر في أدوات التتبُّع، كما هو موضّح سابقًا. ويُدخلها برنامج تجميع Compose في جميع التطبيقات، بدءًا من الإصدار 1.3.0.
يمكن إزالة سلاسل التتبُّع في إصدار الإنتاج من خلال إضافة قاعدة Proguard التالية:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
قد تتغيّر هذه الدوال في المستقبل، ولكن سيتم ذكر أي تغييرات في ملاحظات الإصدار الخاصة بـ Compose.
يُرجى العِلم أنّ الاحتفاظ بالدوال، مع تحمُّل بعض التكلفة في حجم حزمة APK، يضمن أنّ حزمة APK التي يتم تحليلها هي نفسها التي يشغّلها مستخدمو التطبيق.
التوقيت الدقيق
لإجراء تحليل دقيق، كما هو الحال مع أي اختبار أداء، عليك جعل التطبيق profileable وnon-debuggable وفقًا لـ التطبيقات القابلة للتحليل.
تسجيل تتبُّع من Terminal
يمكن تسجيل تتبُّع الإنشاء من Terminal. للقيام بذلك، عليك تنفيذ الخطوات التي يقوم بها استوديو Android عادةً تلقائيًا.
إضافة التبعيات
أولاً، أضِف التبعيات الإضافية إلى تطبيقك.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
أمر إنشاء سجلّ
- أنشئ أمر تسجيل باستخدام Perfetto.
أضِف قسم مصدر بيانات
track_eventيدويًا وفقًا للمثال التالي:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
تسجيل تتبُّع
- افتح التطبيق وجهِّز القسم الذي تريد تتبُّعه.
فعِّل ميزة التتبُّع في التطبيق من خلال إصدار بث.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiverابدأ أمر التسجيل الذي أنشأته سابقًا.
فتح التتبُّع
adb pull <location>التتبُّع من الجهاز (الموقع الجغرافي المحدّد في أمر التسجيل).افتح الملف في Perfetto.
تسجيل تتبُّع باستخدام Jetpack Macrobenchmark
يمكنك قياس الأداء باستخدام Jetpack Macrobenchmark، الذي يوفّر عمليات تتبُّع كنتائج. لتفعيل تتبُّع الإنشاء باستخدام مقاييس الأداء الكلية، عليك إجراء ما يلي:
أضِف هذه الاعتماديات الإضافية إلى وحدة اختبار Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")أضِف وسيطة قياس
androidx.benchmark.fullTracing.enable=trueقبل إجراء قياسات الأداء. يمكنك الاطّلاع على وسيطات قياس الأداء باستخدام Macrobenchmark لمزيد من المعلومات حول وسيطات قياس الأداء باستخدام Macrobenchmark.
الملاحظات
يسرّنا معرفة ملاحظاتك بشأن هذه الميزة وأي أخطاء تكتشفها فيها وأي طلبات لديك. يمكنك إرسال ملاحظاتك إلينا باستخدام أداة تتبُّع المشاكل.