Android Debug Bridge (adb)

‫Android Debug Bridge (adb) هي أداة متعددة الاستخدامات تعمل من سطر الأوامر وتتيح لك التواصل مع جهاز. يسهّل الأمر adb تنفيذ مجموعة متنوعة من إجراءات الجهاز، مثل تثبيت التطبيقات وتصحيح أخطائها. توفّر adb إمكانية الوصول إلى واجهة Unix التي يمكنك استخدامها لتنفيذ مجموعة متنوعة من الأوامر على جهاز. وهو برنامج يعمل بنظام العميل والخادم ويتضمّن ثلاثة مكوّنات:

  • العميل، الذي يرسل الأوامر يتم تشغيل العميل على جهاز التطوير. يمكنك استدعاء عميل من نافذة سطر الأوامر عن طريق إصدار أمر adb.
  • برنامج خفي (adbd)، ينفّذ الأوامر على الجهاز يعمل البرنامج الخفي كعملية في الخلفية على كل جهاز.
  • خادم يدير عملية التواصل بين العميل والبرنامج الخفي يعمل الخادم كعملية في الخلفية على جهاز التطوير.

يتم تضمين adb في حزمة "أدوات النظام الأساسي لحزمة تطوير البرامج (SDK) لنظام التشغيل Android". نزِّل هذه الحزمة باستخدام أداة SDK Manager التي تثبّتها في android_sdk/platform-tools/. إذا كنت تريد حزمة أدوات النظام الأساسي المستقلة لحزمة تطوير البرامج (SDK) لنظام التشغيل Android، يمكنك تنزيلها من هنا.

للحصول على معلومات حول ربط جهاز لاستخدامه عبر adb، بما في ذلك كيفية استخدام "مساعد الربط" لتحديد المشاكل الشائعة وحلّها، يُرجى الاطّلاع على تشغيل التطبيقات على جهاز.

طريقة عمل adb

عند بدء تشغيل adb، يتحقّق العميل أولاً ممّا إذا كانت هناك عملية خادم adb قيد التشغيل. إذا لم يكن كذلك، يبدأ عملية الخادم. عند بدء تشغيل الخادم، يتم ربطه بمنفذ TCP المحلي 5037 ويستمع إلى الأوامر المرسَلة من adb العملاء.

ملاحظة: تستخدم جميع برامج adb المنفذ 5037 للتواصل مع خادم adb.

بعد ذلك، يضبط الخادم عمليات الربط بجميع الأجهزة التي تعمل. يتم تحديد موقع المحاكيات من خلال فحص المنافذ ذات الأرقام الفردية في النطاق من 5555 إلى 5585، وهو النطاق الذي تستخدمه أول 16 محاكيًا. عندما يعثر الخادم على برنامج adb خفي (adbd)، ينشئ اتصالاً بهذا المنفذ.

يستخدم كل محاكي زوجًا من المنافذ المتسلسلة، منفذًا يحمل رقمًا زوجيًا لاتصالات وحدة التحكّم ومنفذًا يحمل رقمًا فرديًا لاتصالات adb. على سبيل المثال:

المحاكي 1، وحدة التحكّم: 5554
المحاكي 1، adb: 5555
المحاكي 2، وحدة التحكّم: 5556
المحاكي 2، adb: 5557
وهكذا.

كما هو موضّح، فإنّ المحاكي المتصل بـ adb على المنفذ 5555 هو نفسه المحاكي الذي تستمع وحدة التحكّم الخاصة به على المنفذ 5554.

بعد أن يضبط الخادم عمليات الربط بجميع الأجهزة، يمكنك استخدام أوامر adb للوصول إلى هذه الأجهزة. بما أنّ الخادم يدير عمليات الربط بالأجهزة ويتعامل مع الأوامر الواردة من عدة عملاء adb، يمكنك التحكّم في أي جهاز من أي عميل أو من نص برمجي.

تفعيل خيار "تصحيح الأخطاء عبر adb" على جهازك

لاستخدام adb مع جهاز متصل عبر USB، عليك تفعيل تصحيح أخطاء الجهاز عبر USB في إعدادات نظام الجهاز ضمن خيارات المطوّرين. في الإصدار 4.2 من نظام التشغيل Android (المستوى 17 من واجهة برمجة التطبيقات) والإصدارات الأحدث، تكون شاشة خيارات المطوّرين مخفية تلقائيًا. لإظهارها، فعِّل خيارات المطوّرين.

يمكنك الآن ربط جهازك باستخدام كابل USB. يمكنك التأكّد من أنّ جهازك متصل من خلال تنفيذ adb devices من الدليل android_sdk/platform-tools/. إذا كان الجهاز متصلاً، سيظهر اسمه ضمن "الأجهزة".

ملاحظة: عند توصيل جهاز يعمل بالإصدار 4.2.2 من نظام التشغيل Android (المستوى 17 من واجهة برمجة التطبيقات) أو إصدار أحدث، يعرض النظام مربّع حوار يسألك عمّا إذا كنت تريد قبول مفتاح RSA الذي يتيح تصحيح الأخطاء من خلال هذا الكمبيوتر. تحمي آلية الأمان هذه أجهزة المستخدمين لأنّها تضمن عدم إمكانية تنفيذ تصحيح أخطاء الجهاز عبر USB وأوامر Adb الأخرى إلا إذا كان بإمكانك فتح قفل الجهاز والموافقة على مربع الحوار.

لمزيد من المعلومات حول الربط بجهاز عبر USB، يُرجى قراءة مقالة تشغيل التطبيقات على جهاز.

الاتصال بجهاز عبر شبكة Wi-Fi

ملاحظة: لا تنطبق التعليمات أدناه على أجهزة Wear التي تعمل بالإصدار 11 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 30). راجِع دليل تصحيح أخطاء تطبيق Wear OS للحصول على مزيد من المعلومات.

يتيح الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأحدث نشر تطبيقك وتصحيح أخطائه لاسلكيًا من محطة العمل باستخدام أداة Android Debug Bridge (adb). على سبيل المثال، يمكنك نشر تطبيقك القابل للتصحيح على عدة أجهزة بعيدة بدون الحاجة إلى ربط جهازك فعليًا عبر USB. ويؤدي ذلك إلى إلغاء الحاجة إلى التعامل مع مشاكل الاتصال الشائعة عبر USB، مثل تثبيت برنامج التشغيل.

يقدّم الإصدار 17 من Android، إلى جانب adb 37.0.0، الإصدار 2.0 من ميزة "تصحيح الأخطاء عبر شبكة Wi-Fi" التي تحلّ العديد من مشاكل قابلية الاستخدام في الإصدار السابق. والجدير بالذكر أنّ الجهاز سيتصل تلقائيًا بمحطة العمل عند اتصاله بشبكة موثوق بها لتصحيح الأخطاء لاسلكيًا.

قبل البدء في استخدام تصحيح الأخطاء لاسلكيًا، عليك تنفيذ ما يلي:

  • تأكَّد من أنّ محطة العمل والجهاز متصلان بشبكة لاسلكية نفسها.

  • تأكَّد من أنّ جهازك يعمل بالإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث للهاتف أو الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث للتلفزيون وWearOS. لمزيد من المعلومات، يُرجى الاطّلاع على التحقّق من إصدار Android وتحديثه.

  • على محطة العمل، يجب الترقية إلى أحدث إصدار من أدوات منصة SDK.

لاستخدام ميزة تصحيح الأخطاء لاسلكيًا، يجب إقران جهازك بمحطة العمل باستخدام رمز استجابة سريعة أو رمز إقران. يجب أن تكون محطة العمل والجهاز متصلَين بالشبكة اللاسلكية نفسها. لإقران الجهاز، اتّبِع الخطوات التالية:

ملاحظة: عليك ربط جهازك بمحطة العمل مرة واحدة فقط. سيظل الجهاز مقترنًا بمحطة العمل إلى أن يتم نسيانه بشكل صريح أو إلغاء أذونات تصحيح أخطاء adb على جهازك. سيتصل الجهاز ومحطة العمل تلقائيًا عندما يكونان على الشبكة نفسها.

  1. فعِّل خيارات المطوّرين على جهازك.

  2. على جهازك، انقر على تصحيح الأخطاء لاسلكيًا:

    لقطة شاشة لهاتف Pixel تعرض طلبًا بشأن تصحيح الأخطاء لاسلكيًا
    الشكل 1: طلب تصحيح الأخطاء لاسلكيًا على هاتف Google Pixel
  3. السماح بتفعيل ميزة "تصحيح الأخطاء اللاسلكي" على شبكتك يُرجى العِلم أنّ وضع علامة في مربّع الاختيار السماح دائمًا على هذه الشبكة يجعل الشبكة شبكة موثوقة لتصحيح الأخطاء اللاسلكي. سيسمح جهازك دائمًا بتصحيح الأخطاء اللاسلكي على هذه الشبكة فور اتصاله بها.

    لقطة شاشة لهاتف Google Pixel تعرض إعدادات "تصحيح الأخطاء اللاسلكي"
    الشكل 2: إعداد تصحيح الأخطاء عبر شبكة Wi-Fi على هاتف Google Pixel

    ملاحظة: يمكن لمستخدمي Android Studio إقران أجهزتهم باستخدام رمز استجابة سريعة، وذلك من خلال النقر على إقران الجهاز باستخدام رمز الاستجابة السريعة ومسح رمز الاستجابة السريعة الذي تم الحصول عليه من مربّع الحوار "إقران الأجهزة عبر شبكة Wi-Fi" في Android Studio.

  4. على جهازك، انقر على الإقران باستخدام رمز الإقران ودوِّن عنوان IP ورقم المنفذ ورمز الإقران المعروض على الجهاز.

  5. على محطة العمل، افتح نافذة محطة طرفية وانتقِل إلى android_sdk/platform-tools.

  6. في نافذة الجهاز الطرفي لمحطة العمل، شغِّل الأمر adb pair ipaddr:port. استخدِم عنوان IP ورقم المنفذ المذكورَين أعلاه.

  7. عندما يُطلب منك ذلك، أدخِل رمز الإقران كما هو موضّح أدناه.

    لقطة شاشة لعملية الإقران في سطر الأوامر
    الشكل 3: ستظهر رسالة تشير إلى أنّه تم إقران جهازك بنجاح.
  8. بعد إقران جهازك، تأكَّد من أنّه متصل. يمكنك الآن استخدام جهازك لاسلكيًا كما تفعل عند توصيله بكابل USB.

    لإلغاء إقران محطة العمل، انتقِل إلى تصحيح الأخطاء لاسلكيًا على جهازك. انقر على اسم محطة العمل ضِمن الأجهزة المقترنة، ثم اختَر حذف. بدلاً من ذلك، يمكنك النقر على إبطال أذونات تصحيح أخطاء adb في صفحة "الإعدادات" على جهازك لإلغاء إقران محطة العمل وجميع محطات العمل الأخرى التي سبق إقرانها.

  9. إذا أردت تفعيل ميزة تصحيح الأخطاء اللاسلكي وإيقافها بسرعة، يمكنك استخدام مربّعات مطوّر البرامج في الإعدادات السريعة الخاصة بتصحيح الأخطاء اللاسلكي، والتي يمكن العثور عليها في خيارات المطوّرين > مربّعات مطوّر البرامج في الإعدادات السريعة.

    لقطة شاشة لمربّعات مطوّري البرامج في "الإعدادات السريعة" من هاتف Google Pixel
    الشكل 4. يتيح لك خيار مربّعات أدوات المطوّرين في الإعدادات السريعة تفعيل ميزة تصحيح الأخطاء اللاسلكي وإيقافها بسرعة.

حلّ مشاكل الاتصال اللاسلكي

إذا كنت تواجه مشاكل في الاتصال بجهازك لاسلكيًا، جرِّب الخطوات التالية لتحديد المشاكل وحلّها.

التحقّق مما إذا كانت محطة العمل والجهاز يستوفيان المتطلبات الأساسية

تأكَّد من أنّ محطة العمل والجهاز يستوفيان المتطلبات الأساسية الواردة في بداية هذا القسم.

التحقّق مما إذا كان إعداد adb على محطة العمل صحيحًا

للتأكّد من صحة إعداد ADB على محطة العمل، افتح نافذة طرفية على محطة العمل وأدخِل adb server-status. تأكَّد من أنّ الناتج يعرض ما يلي:

  • ‫version: "37.0.0" أو إصدار أحدث: إذا لم يكن الأمر كذلك، نزِّل أحدث إصدار من أدوات منصة حزمة تطوير البرامج (SDK).
  • mdns_enabled: true: إذا تم ضبط هذا الخيار على false، لن يتمكّن adb من العثور تلقائيًا على الأجهزة على شبكتك. لحلّ هذه المشكلة، عليك ضبط متغيّر البيئة ADB_MDNS على 1، ثم إعادة تشغيل خادم adb من خلال تنفيذ الأمر adb kill-server ثم الأمر adb start-server.
  • mdns_backend: LIBADBMDNS: إذا لم يكن الأمر كذلك، يعني ذلك أنّ أداة adb تستخدم مكتبة قديمة لاكتشاف الأجهزة تلقائيًا على شبكتك. لحلّ هذه المشكلة، عليك ضبط متغيّر البيئة ADB_MDNS_OPENSCREEN على 0، ثم إعادة تشغيل خادم adb من خلال تنفيذ الأمر adb kill-server ثم الأمر adb start-server.

التحقّق مما إذا كانت شبكتك تتيح استخدام mDNS

تعتمد أداة تصحيح أخطاء Android (adb) على خدمة mDNS للعثور على الأجهزة المقترنة والاتصال بها تلقائيًا. للتحقّق مما إذا كانت شبكتك تتيح استخدام mDNS، اتّبِع الخطوات التالية:

  1. على جهازك، فعِّل تصحيح الأخطاء لاسلكيًا كما هو موضّح في قسم الاتصال بجهاز عبر شبكة Wi-Fi.

  2. على محطة العمل، افتح نافذة طرفية وأدخِل adb mdns track-services --proto-text.

  3. تأكَّد من أنّ الناتج ليس فارغًا ويتضمّن خدمة TLS مع عنوان IP ورقم منفذ جهازك. إذا كانت النتيجة فارغة، يعني ذلك أنّ شبكتك لا تتوافق مع mDNS. مثال على الإخراج:

    tls {
      service {
        instance: "adb-35121FDJH000R8-xyMD0H"
        service: "_adb-tls-connect._tcp"
        ipv4: "192.168.84.23"
        ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c"
        port: 37895
        product_model: "Pixel 8"
        build_version_sdk_full: "37.0"
        given_name: "sherifeid Pixel"
        serial: "35121FDJH000R8"
        mdns_service_version: "2.0"
        hostname: "Android_CXUKYJY1.local"
      }
    }
              

التحقّق مما إذا كان جهازك يتيح استخدام ميزة "تصحيح الأخطاء عبر Wi-Fi" 2.0

ملاحظة: يتوافق الإصدار 2.0 من ميزة "تصحيح الأخطاء عبر Wi-Fi" في ADB مع الإصدار 17 من Android والإصدارات الأحدث.

لمعرفة ما إذا كان جهازك يتيح استخدام ميزة "تصحيح الأخطاء عبر Wi-Fi" 2.0، اتّبِع الخطوات التالية:

  1. على جهازك، فعِّل تصحيح الأخطاء لاسلكيًا كما هو موضّح في قسم الاتصال بجهاز عبر شبكة Wi-Fi.

  2. على محطة العمل، افتح نافذة طرفية وأدخِل adb mdns track-services --proto-text.

  3. تأكَّد من أنّ الناتج يحتوي على mdns_service_version: "2.0" أو إصدار أحدث. إذا لم يكن الأمر كذلك، يعني هذا أنّ جهازك لا يعمل بالإصدار 17 من نظام التشغيل Android أو إصدار أحدث ولا يتوافق مع الإصدار 2.0 من تصحيح أخطاء Android عبر Wi-Fi. للتحديث إلى Android 17 أو إصدار أحدث، تحقَّق مما إذا كان جهازك يتضمّن أي تحديثات نظام معلّقة. التحقّق من إصدار Android وتحديثه

الإبلاغ عن مشكلة جديدة

إذا استمرّت المشاكل في الاتصال بجهازك لاسلكيًا، يمكنك الإبلاغ عن مشكلة جديدة. يُرجى التأكّد من تقديم المعلومات التالية في بلاغك:

  • سجلّات جهازك: أعِد إنتاج المشكلة وأرفِق سجلّات الجهاز.
  • سجلّات adb على محطة العمل:
    1. اضبط متغيّر البيئة ADB_TRACE=all.
    2. أعِد تشغيل خادم adb من خلال تنفيذ adb kill-server ثم adb start-server.
    3. أعِد عرض المشكلة.
    4. تحديد موقع ملفات السجلّ: شغِّل adb server-status وأرفِق ملف السجلّ المشار إليه في الناتج log_absolute_path.

الاتصال لاسلكيًا بجهاز بعد الاتصال الأوّلي عبر USB (الخيار الوحيد المتاح على الإصدار 10 من نظام التشغيل Android والإصدارات الأقدم)

ملاحظة: تنطبق سير العمل هذه أيضًا على الإصدار 11 من نظام التشغيل Android (والإصدارات الأحدث)، مع العلم أنّها تتضمّن أيضًا عملية ربط *أولي* عبر كابل USB.

ملاحظة: لا تنطبق التعليمات التالية على أجهزة Wear التي تعمل بالإصدار 10 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 29) أو الإصدارات الأقدم. راجِع الدليل حول تصحيح أخطاء تطبيق Wear OS للحصول على مزيد من المعلومات.

يتواصل adb عادةً مع الجهاز عبر USB، ولكن يمكنك أيضًا استخدام adb عبر شبكة Wi-Fi. لتوصيل جهاز يعمل بالإصدار 10 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 29) أو إصدار أقدم، اتّبِع الخطوات الأولية التالية عبر كابل USB:

  1. وصِّل جهاز Android وadb الكمبيوتر المضيف بشبكة Wi-Fi مشتركة.
  2. ملاحظة: يُرجى العِلم أنّه ليست كل نقاط الوصول مناسبة. قد تحتاج إلى استخدام نقطة وصول تم ضبط جدار الحماية فيها بشكلٍ سليم لتتوافق مع adb.

  3. وصِّل الجهاز بالكمبيوتر المضيف باستخدام كابل USB.
  4. اضبط جهاز الاختبار على الاستماع إلى اتصال بروتوكول TCP/IP على المنفذ 5555:
    adb tcpip 5555
    
  5. افصل كابل USB عن جهاز الاختبار.
  6. ابحث عن عنوان IP لجهاز Android. على سبيل المثال، في جهاز Nexus، يمكنك العثور على عنوان IP من خلال الانتقال إلى الإعدادات > لمحة عن الجهاز اللوحي (أو لمحة عن الهاتف) > الحالة > عنوان IP.
  7. اتّبِع الخطوات التالية للاتصال بالجهاز باستخدام عنوان IP:
    adb connect device_ip_address:5555
    
  8. تأكَّد من أنّ الكمبيوتر المضيف متصل بجهاز الاختبار:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

تم الآن ربط جهازك بشبكة "adb".

في حال انقطع اتصال adb بجهازك:

  • تأكَّد من أنّ المضيف لا يزال متصلاً بشبكة Wi-Fi نفسها التي يتصل بها جهاز Android.
  • أعِد الربط من خلال تنفيذ الخطوة adb connect مرة أخرى.
  • إذا لم ينجح ذلك، أعِد ضبط مضيف adb باتّباع الخطوات التالية:
    adb kill-server
    

    بعد ذلك، ابدأ من جديد.

طلب البحث عن الأجهزة

قبل إصدار أوامر adb، من المفيد معرفة مثيلات الأجهزة المتصلة بخادم adb. أنشئ قائمة بالأجهزة المتصلة باستخدام الأمر devices:

  adb devices -l
  

في المقابل، تطبع adb معلومات الحالة هذه لكل جهاز:

  • الرقم التسلسلي: adb ينشئ سلسلة لتعريف الجهاز بشكلٍ فريد من خلال رقم المنفذ. في ما يلي مثال على رقم تسلسلي: emulator-5554
  • الحالة: يمكن أن تكون حالة اتصال الجهاز إحدى الحالات التالية:
    • offline: الجهاز غير متصل بشبكة adb أو لا يستجيب.
    • device: الجهاز متصل بخادم adb. يُرجى العِلم أنّ هذه الحالة لا تعني أنّ نظام Android قد تم تشغيله بالكامل وأصبح جاهزًا للعمل، لأنّ الجهاز يتصل بـ adb أثناء استمرار عملية تشغيل النظام. بعد بدء التشغيل، تكون هذه هي حالة التشغيل العادية للجهاز.
    • no device: لم يتم توصيل أي جهاز.
  • الوصف: إذا أدرجت الخيار -l، سيخبرك الأمر devices عن نوع الجهاز. وتكون هذه المعلومات مفيدة عندما تكون لديك أجهزة متعددة متصلة لتتمكّن من التمييز بينها.

يوضّح المثال التالي الأمر devices ونتائجه. هناك ثلاثة أجهزة قيد التشغيل. أول سطرَين في القائمة هما محاكيان، والسطر الثالث هو جهاز متصل بالكمبيوتر.

$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo

المحاكي غير مُدرَج

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

  • خادم adb غير نشط.
  • يمكنك استخدام الأمر emulator مع الخيار -port أو -ports مع قيمة منفذ ذات رقم فردي بين 5554 و5584.
  • المنفذ ذو الرقم الفردي الذي اخترته غير مشغول، لذا يمكن إجراء اتصال المنفذ على رقم المنفذ المحدّد، أو إذا كان مشغولاً، سيتحوّل المحاكي إلى منفذ آخر يستوفي المتطلبات الواردة في النقطة 2.
  • يجب بدء تشغيل خادم adb بعد بدء تشغيل المحاكي.

إحدى طرق تجنُّب هذه المشكلة هي السماح للمحاكي باختيار منافذه الخاصة وعدم تشغيل أكثر من 16 محاكيًا في المرة الواحدة. هناك طريقة أخرى وهي بدء تشغيل خادم adb دائمًا قبل استخدام الأمر emulator، كما هو موضّح في الأمثلة التالية.

المثال 1: في تسلسل الأوامر التالي، يبدأ الأمر adb devices تشغيل الخادم adb، ولكن لا تظهر قائمة الأجهزة.

أوقِف خادم adb وأدخِل الأوامر التالية بالترتيب الموضّح. بالنسبة إلى اسم المحاكي الافتراضي لنظام Android، أدخِل اسمًا صالحًا من نظامك. للحصول على قائمة بأسماء الأجهزة الافتراضية لنظام التشغيل Android، اكتب emulator -list-avds. يقع الأمر emulator في الدليل android_sdk/tools.

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices

List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

المثال 2: في تسلسل الأوامر التالي، تعرض adb devices قائمة الأجهزة لأنّه تم بدء تشغيل الخادم adb أولاً.

لعرض المحاكي في الناتج adb devices، أوقِف الخادم adb، ثم أعِد تشغيله بعد استخدام الأمر emulator وقبل استخدام الأمر adb devices، كما يلي:

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

لمزيد من المعلومات حول خيارات سطر الأوامر الخاصة بالمحاكي، راجِع خيارات بدء التشغيل من سطر الأوامر.

إرسال أوامر إلى جهاز معيّن

إذا كانت عدة أجهزة تعمل، يجب تحديد جهاز الاختبار عند إصدار الأمر adb. لتحديد الهدف، اتّبِع الخطوات التالية:

  1. استخدِم الأمر devices للحصول على الرقم التسلسلي للجهاز المستهدف.
  2. بعد الحصول على الرقم التسلسلي، استخدِم الخيار -s مع الأوامر adb لتحديد الرقم التسلسلي.
    1. إذا كنت ستصدر الكثير من أوامر adb، يمكنك ضبط متغيّر البيئة $ANDROID_SERIAL ليحتوي على الرقم التسلسلي بدلاً من ذلك.
    2. في حال استخدام كل من -s و$ANDROID_SERIAL، ستلغي -s قيمة $ANDROID_SERIAL.

في المثال التالي، يتم الحصول على قائمة بالأجهزة المتصلة، ثم يتم استخدام الرقم التسلسلي لأحد الأجهزة لتثبيت helloWorld.apk على هذا الجهاز:

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

ملاحظة: إذا أصدرت أمرًا بدون تحديد جهاز الاختبار عند توفّر أجهزة متعددة، ستعرض adb رسالة خطأ "adb: أكثر من جهاز/محاكي واحد".

إذا كانت لديك أجهزة متعددة متاحة ولكن جهاز واحد فقط هو محاكي، استخدِم الخيار -e لإرسال الأوامر إلى المحاكي. إذا كانت هناك أجهزة متعددة ولكن تم توصيل جهاز واحد فقط، استخدِم الخيار -d لإرسال الأوامر إلى الجهاز.

تثبيت تطبيق

يمكنك استخدام adb لتثبيت حزمة APK على محاكي أو جهاز متصل باستخدام الأمر install:

adb install path_to_apk

يجب استخدام الخيار -t مع الأمر install عند تثبيت حزمة APK تجريبية. لمزيد من المعلومات، يُرجى الاطّلاع على -t.

لتثبيت حِزم APK متعددة، استخدِم install-multiple. ويكون ذلك مفيدًا إذا نزّلت جميع حِزم APK الخاصة بجهاز معيّن لتطبيقك من Play Console وأردت تثبيتها على محاكي أو جهاز فعلي.

لمزيد من المعلومات حول كيفية إنشاء ملف APK يمكنك تثبيته على مثيل محاكي/جهاز، راجِع إنشاء تطبيقك وتشغيله.

ملاحظة: إذا كنت تستخدم "استوديو Android"، لن تحتاج إلى استخدام adb مباشرةً لتثبيت تطبيقك على المحاكي أو الجهاز. بدلاً من ذلك، يتولّى "استوديو Android" عملية تجميع التطبيق وتثبيته.

إعداد قاعدة إعادة توجيه المنفذ

استخدِم الأمر forward لإعداد إعادة توجيه منفذ عشوائي، ما يؤدي إلى إعادة توجيه الطلبات على منفذ مضيف معيّن إلى منفذ مختلف على جهاز. يضبط المثال التالي إعادة توجيه المنفذ 6100 للمضيف إلى المنفذ 7100 للجهاز:

adb forward tcp:6100 tcp:7100

يضبط المثال التالي عملية إعادة توجيه منفذ المضيف 6100 إلى local:logd:

adb forward tcp:6100 local:logd

قد يكون ذلك مفيدًا إذا كنت تحاول تحديد ما يتم إرساله إلى منفذ معيّن على الجهاز. سيتم تسجيل جميع البيانات التي تم تلقّيها في برنامج نظام التسجيل وعرضها في سجلّات الجهاز.

نسخ الملفات من جهاز وإليه

استخدِم الأمرَين pull وpush لنسخ الملفات إلى جهاز ومنه. على عكس الأمر install، الذي ينسخ ملف APK فقط إلى موقع جغرافي معيّن، يتيح لك الأمران pull وpush نسخ أدلة وملفات عشوائية إلى أي موقع جغرافي في الجهاز.

لنسخ ملف أو دليل وأدلته الفرعية من الجهاز، اتّبِع الخطوات التالية:

adb pull remote local

لنسخ ملف أو دليل ودلائله الفرعية إلى الجهاز، اتّبِع الخطوات التالية:

adb push local remote

استبدِل local وremote بمسارات الملفات أو الدليل المستهدَف على جهاز التطوير (المحلي) وعلى الجهاز (عن بُعد). على سبيل المثال:

adb push myfile.txt /sdcard/myfile.txt

إيقاف خادم adb

في بعض الحالات، قد تحتاج إلى إنهاء عملية خادم adb ثم إعادة تشغيلها لحلّ المشكلة. على سبيل المثال، قد يحدث ذلك إذا لم يستجب adb لأحد الطلبات.

لإيقاف خادم adb، استخدِم الأمر adb kill-server. يمكنك بعد ذلك إعادة تشغيل الخادم عن طريق إصدار أي أمر آخر من أوامر adb.

إصدار أوامر adb

أصدِر أوامر adb من سطر أوامر على جهاز التطوير أو من نص برمجي باستخدام ما يلي:

adb [-d | -e | -s serial_number] command

إذا كان هناك محاكي واحد فقط قيد التشغيل أو جهاز واحد فقط متصل، يتم إرسال الأمر adb إلى هذا الجهاز تلقائيًا. إذا كانت هناك محاكيات متعددة قيد التشغيل و/أو أجهزة متعددة متصلة، عليك استخدام الخيار -d أو -e أو -s لتحديد جهاز الاختبار الذي يجب توجيه الأمر إليه.

يمكنك الاطّلاع على قائمة تفصيلية بجميع أوامر adb المتاحة باستخدام الأمر التالي:

adb --help

إصدار أوامر shell

يمكنك استخدام الأمر shell لإصدار أوامر الجهاز من خلال adb أو لبدء واجهة تفاعلية. لإصدار أمر واحد، استخدِم الأمر shell على النحو التالي:

adb [-d |-e | -s serial_number] shell shell_command

لبدء واجهة تفاعلية على جهاز، استخدِم الأمر shell على النحو التالي:

adb [-d | -e | -s serial_number] shell

للخروج من نافذة تفاعلية، اضغط على Control+D أو اكتب exit.

يوفّر نظام التشغيل Android معظم أدوات سطر الأوامر المعتادة في Unix. للحصول على قائمة بالأدوات المتاحة، استخدِم الأمر التالي:

adb shell ls /system/bin

تتوفّر المساعدة لمعظم الأوامر من خلال الوسيطة --help. يتم توفير العديد من أوامر shell من خلال toybox. تتوفّر المساعدة العامة التي تنطبق على جميع أوامر Toybox من خلال toybox --help.

في الإصدار 23 من "أدوات منصة Android" والإصدارات الأحدث، تتعامل adb مع الوسيطات بالطريقة نفسها التي يتعامل بها الأمر ssh(1). وقد أدّى هذا التغيير إلى حلّ الكثير من المشاكل المتعلّقة بإدخال الأوامر، كما أتاح تنفيذ الأوامر التي تتضمّن أحرفًا وصفية في shell، مثل adb install Let\'sGo.apk، بأمان. يعني هذا التغيير أنّ تفسير أي أمر يحتوي على أحرف وصفية خاصة بنظام التشغيل قد تغيّر أيضًا.

على سبيل المثال، أصبح adb shell setprop key 'two words' الآن خطأ، لأنّ علامات الاقتباس يتم تجاهلها من خلال الصدفة المحلية، ويرى الجهاز adb shell setprop key two words. لكي يعمل الأمر، يجب وضع علامات اقتباس مرتين، مرة واحدة للصدفة المحلية ومرة واحدة للصدفة البعيدة، كما تفعل مع ssh(1). على سبيل المثال، تعمل adb shell setprop key "'two words'" لأنّ الصدفة المحلية تأخذ مستوى الاقتباس الخارجي، بينما يظل الجهاز يرى مستوى الاقتباس الداخلي: setprop key 'two words'. يمكنك أيضًا استخدام علامة الهروب، ولكن عادةً ما يكون استخدام علامات الاقتباس مرتين أسهل.

يمكنك الاطّلاع أيضًا على أداة سطر الأوامر Logcat، وهي أداة مفيدة لمراقبة سجلّ النظام.

مدير نشاط المكالمات

يمكنك داخل adb shell إصدار أوامر باستخدام أداة "مدير الأنشطة" (am) لتنفيذ إجراءات مختلفة على النظام، مثل بدء نشاط وإيقاف عملية بالقوة وبث هدف وتعديل خصائص شاشة الجهاز وغير ذلك.

أثناء استخدام shell، تكون بنية الجملة am كما يلي:

am command

يمكنك أيضًا إصدار أمر "مدير الأنشطة" مباشرةً من adb بدون إدخال shell عن بُعد. على سبيل المثال:

adb shell am start -a android.intent.action.VIEW

الجدول 1. أوامر "مدير النشاط" المتاحة

الأمر الوصف
start [options] intent ابدأ Activity المحدّد بواسطة intent.

اطّلِع على مواصفات وسيطات الأهداف.

الخيارات هي:

  • -D: تفعيل تصحيح الأخطاء
  • -W: انتظِر إلى أن يكتمل الإطلاق.
  • --start-profiler file: ابدأ أداة تحليل الأداء وأرسِل النتائج إلى file.
  • -P file: مثل --start-profiler، ولكن يتوقف إنشاء الملف الشخصي عندما يصبح التطبيق غير نشط.
  • ‫-R count: كرر عملية تشغيل النشاط count مرّات. قبل كل تكرار، سيتم إنهاء النشاط الأعلى.
  • -S: فرض إيقاف التطبيق المستهدف قبل بدء النشاط
  • --opengl-trace: تفعيل تتبُّع وظائف OpenGL
  • --user user_id | current: حدِّد المستخدم الذي سيتم التشغيل به. وفي حال عدم التحديد، سيتم التشغيل باستخدام حساب المستخدم الحالي.
  • ‫--debug-link: (الإصدار 17 من نظام التشغيل Android والإصدارات الأحدث) تشخيص عنوان URL وحلّ الهدف لروابط التطبيقات، وطباعة فلاتر الأهداف المتطابقة في البيان وقواعد "روابط التطبيقات الديناميكية"
startservice [options] intent ابدأ Service المحدّد بواسطة intent.

اطّلِع على مواصفات وسيطات الأهداف.

الخيارات هي:

  • --user user_id | current: حدِّد المستخدم الذي سيتم تشغيل التطبيق به. في حال عدم تحديدها، سيتم التشغيل بصفتك المستخدم الحالي.
force-stop package فرض إيقاف كل ما يرتبط بـ "package"
kill [options] package أوقِف جميع العمليات المرتبطة بـ "package". لا يؤدي هذا الأمر إلا إلى إيقاف العمليات التي يمكن إيقافها بأمان ولن تؤثر في تجربة المستخدم.

الخيارات هي:

  • --user user_id | all | current: حدِّد عمليات المستخدم التي تريد إيقافها. في حال عدم تحديدها، سيتم إيقاف جميع عمليات المستخدمين.
kill-all إنهاء جميع العمليات التي تعمل في الخلفية
broadcast [options] intent إصدار رسالة Intent

اطّلِع على مواصفات وسيطات الأهداف.

الخيارات هي:

  • [--user user_id | all | current]: حدِّد المستخدم الذي تريد إرسال الرسالة إليه. في حال عدم تحديدها، سيتم إرسالها إلى جميع المستخدمين.
instrument [options] component ابدأ الرصد باستخدام مثيل Instrumentation. عادةً ما يكون العنصر المستهدف component هو النموذج test_package/runner_class.

الخيارات هي:

  • -r: طباعة النتائج الأولية (بدون فك الترميز report_key_streamresult). يجب استخدام هذا الخيار مع [-e perf true] لإنشاء نتائج أولية لقياس الأداء.
  • -e name value: اضبط الوسيطة name على value. بالنسبة إلى أدوات تشغيل الاختبارات، يكون التنسيق الشائع هو -e testrunner_flag value[,value...].
  • -p file: كتابة بيانات تحديد الملف الشخصي إلى file
  • ‫-w: انتظِر إلى أن تنتهي عملية جمع البيانات قبل الرجوع. هذا الحقل مطلوب لتطبيق Test Runner.
  • --no-window-animation: إيقاف الصور المتحركة للنوافذ أثناء التشغيل
  • ‫--user user_id | current: حدِّد أداة قياس أداء المستخدم التي يتم تشغيلها. في حال عدم تحديدها، سيتم تشغيلها باسم المستخدم الحالي.
profile start process file ابدأ أداة تحليل الأداء على process، واكتب النتائج في file.
profile stop process أوقِف أداة تحليل الأداء على process.
dumpheap [options] process file تفريغ مجموعة process، والكتابة إلى file

الخيارات هي:

  • ‫--user [user_id | current]: عند تقديم اسم عملية، حدِّد مستخدم العملية المطلوب تفريغها. في حال عدم تحديدها، يتم استخدام المستخدم الحالي.
  • ‫-b [| png | jpg | webp]: تفريغ الصور النقطية من ذاكرة الرسومات (مستوى واجهة برمجة التطبيقات 35 والإصدارات الأحدث). يمكنك اختياريًا تحديد التنسيق الذي تريد استخدامه في التفريغ (PNG تلقائيًا).
  • ‫-n: يتم تفريغ الذاكرة الأصلية بدلاً من الذاكرة المُدارة.
dumpbitmaps [options] [-p process] تفريغ معلومات الصورة النقطية من process (مستوى واجهة برمجة التطبيقات 36 والإصدارات الأحدث).

الخيارات هي:

  • ‫-d|--dump [format]: تعرض هذه السمة محتوى الصورة النقطية في format المحدّد، والذي يمكن أن يكون أحد الخيارات التالية: png أو jpg أو webp. إذا لم يتم تحديد أي خيار، سيتم استخدام png تلقائيًا. سيتم إنشاء ملف zip dumpbitmaps-<time>.zip يحتوي على الصور النقطية.
  • -p process: تفريغ الصور النقطية من process، يمكن تحديد -p process عدة مرات.
في حال عدم تحديد process، سيتم تفريغ الصور النقطية من جميع العمليات.
set-debug-app [options] package اضبط تطبيق package على وضع تصحيح الأخطاء.

الخيارات هي:

  • -w: انتظار مصحّح الأخطاء عند بدء تشغيل التطبيق
  • --persistent: الاحتفاظ بهذه القيمة
clear-debug-app محو الحزمة السابقة التي تم ضبطها لتصحيح الأخطاء باستخدام set-debug-app
monitor [options] ابدأ مراقبة الأعطال أو أخطاء ANR.

الخيارات هي:

  • ‫--gdb: بدء gdbserv على المنفذ المحدّد عند حدوث عُطل أو خطأ ANR
screen-compat {on | off} package التحكّم في وضع التوافق مع الشاشة في package
display-size [reset | widthxheight] تجاوز حجم العرض على شاشة الجهاز يفيد هذا الأمر في اختبار تطبيقك على أحجام شاشات مختلفة من خلال محاكاة دقة شاشة صغيرة باستخدام جهاز بشاشة كبيرة، والعكس صحيح.

مثال:
am display-size 1280x800

display-density dpi تجاوز كثافة العرض على الجهاز يكون هذا الأمر مفيدًا لاختبار تطبيقك على كثافات شاشة مختلفة من خلال محاكاة بيئة شاشة عالية الكثافة باستخدام شاشة منخفضة الكثافة، والعكس صحيح.

مثال:
am display-density 480

to-uri intent اطبع مواصفات الغرض المحدّد كمعرّف URI.

اطّلِع على مواصفات وسيطات الأهداف.

to-intent-uri intent اطبع مواصفات الغرض المحدّدة كمعرّف موارد منتظم (URI) intent:.

اطّلِع على مواصفات وسيطات الأهداف.

memory-limiter subcommand [options]

تعديل حدود الذاكرة المفروضة على الأجهزة التي تعمل بالإصدار 17 من نظام التشغيل Android والإصدارات الأحدث أو إيقافها ليس لهذا الإعداد أي تأثير في الأجهزة التي تعمل بالإصدار 16 من نظام التشغيل Android والإصدارات الأقدم.

الأوامر الفرعية هي:

  • ‫ignore uid|none|all: توجّه أداة تحديد سعة الذاكرة إلى تجاهل بعض العمليات أو جميعها. يؤدي تمرير رقم تعريف المستخدم (UID) (رقم تعريف مستخدم Android) إلى توجيه أداة الحد من استخدام الذاكرة لتجاهل فرض القيود على جميع العمليات المرتبطة برقم تعريف المستخدم هذا. يمكنك أيضًا إدخال all (لتجاهل جميع التطبيقات) أو none (لعدم تجاهل أي تطبيقات). يؤدي تمرير none إلى إلغاء أي طلبات سابقة إلى am memory-limiter ignore.

    إذا طلبت من أداة الحد من استخدام الذاكرة تجاهل معرّف مستخدم (UID)، سيظل بإمكانك تطبيق حد يدوي على الذاكرة لعملية داخل التطبيق من خلال استدعاء am memory-limiter manual.

  • ‫manual pid limit|max|none: يوجّه النظام إلى فرض قيود على الذاكرة في العملية التي تحمل معرّف العملية (PID) المحدّد. يتم تحديد قيود الذاكرة كعدد صحيح من الميغابايت، على سبيل المثال، يشير تمرير القيمة 30 إلى أنّ العملية تقتصر على 30 ميغابايت من الذاكرة. يؤدي تمرير max إلى إزالة جميع حدود الذاكرة في تلك العملية. يؤدي تمرير none إلى إزالة أي حدود تم ضبطها يدويًا على العملية، ما يؤدي إلى استعادة الحدّ التلقائي للنظام (إن وُجد).
  • status: تعرض هذه السمة الحالة الحالية لأداة تحديد حجم الذاكرة. يتضمّن الحالة حدود الذاكرة المفروضة على العمليات المرئية وغير المرئية.

مواصفات وسيطات الغرض

بالنسبة إلى أوامر "أداة إدارة الأنشطة" التي تتضمّن وسيطة intent، يمكنك تحديد الغرض باستخدام الخيارات التالية:

استدعاء أداة إدارة الحِزم (pm)

يمكنك داخل برنامج تنفيذ الأوامر adb إصدار أوامر باستخدام أداة إدارة الحِزم (pm) لتنفيذ إجراءات وطلبات بحث على حِزم التطبيقات المثبَّتة على الجهاز.

أثناء استخدام shell، تكون بنية الجملة pm كما يلي:

pm command

يمكنك أيضًا إصدار أمر مدير الحزمة مباشرةً من adb بدون إدخال غلاف بعيد. على سبيل المثال:

adb shell pm uninstall com.example.MyApp

الجدول 2. أوامر أداة إدارة الحِزم المتاحة

الأمر الوصف
list packages [options] filter طباعة جميع الحِزم، أو الحِزم التي يتضمّن اسم حزمتها النص الوارد في filter فقط

الخيارات:

  • -f: عرض الملف المرتبط
  • ‫-d: فلترة الحِزم لعرض الحِزم غير المفعّلة فقط
  • ‫-e: فلترة الحِزم لعرض الحِزم المفعّلة فقط
  • -s: فلترة لعرض حِزم النظام فقط
  • -3: فلترة النتائج لعرض الحِزم التابعة لجهات خارجية فقط
  • -i: اطّلِع على أداة التثبيت للحِزم.
  • ‫-u: لتضمين الحِزم التي تم إلغاء تثبيتها
  • ‫--user user_id: مساحة المستخدم التي سيتم البحث فيها.
list permission-groups طباعة جميع مجموعات الأذونات المعروفة
list permissions [options] group طباعة جميع الأذونات المعروفة، ويمكن الاقتصار على تلك الموجودة في group.

الخيارات:

  • -g: التنظيم حسب المجموعة
  • -f: لطباعة جميع المعلومات
  • ‫-s: ملخّص قصير
  • -d: عرض الأذونات الخطيرة فقط
  • -u: أدرِج الأذونات التي سيراها المستخدمون فقط.
list instrumentation [options] تعرض هذه السمة جميع حِزم الاختبار.

الخيارات:

  • استبدِل -f بقائمة ملفات APK لحزمة الاختبار.
  • ‫target_package: لعرض حِزم الاختبار لهذا التطبيق فقط
list features طباعة جميع ميزات النظام
list libraries طباعة جميع المكتبات المتوافقة مع الجهاز الحالي
list users طباعة جميع المستخدمين على النظام
path package اطبع مسار حزمة APK الخاصة بـ package المحدّد.
install [options] path تثبيت حزمة يحدّدها path على النظام

الخيارات:

  • -r: إعادة تثبيت تطبيق حالي مع الاحتفاظ ببياناته
  • ‫-t: السماح بتثبيت حِزم APK التجريبية. ينشئ Gradle حِزمة APK للاختبار عندما تنفّذ تطبيقك أو تصحّحه فقط أو عندما تستخدم الأمر إنشاء > إنشاء حِزمة APK في &quot;استوديو Android&quot;. إذا تم إنشاء حزمة APK باستخدام حزمة تطوير برامج (SDK) لمعاينة الإصدارات التجريبية، يجب تضمين الخيار -t مع الأمر install إذا كنت تثبِّت حزمة APK تجريبية.
  • -i installer_package_name: حدِّد اسم حزمة أداة التثبيت.
  • استبدِل --user user_id باسم المستخدم الذي سيتم تثبيت الحزمة له. يتم تلقائيًا تثبيت الحزمة لجميع المستخدمين الحاليين على الجهاز.
  • --install-location location: اضبط موقع التثبيت باستخدام إحدى القيم التالية:
    • 0: استخدام موقع التثبيت التلقائي
    • 1: تثبيت التطبيق على مساحة التخزين الداخلية للجهاز
    • 2: التثبيت على وسائط تخزين خارجية
  • -f: تثبيت الحزمة في ذاكرة النظام الداخلية
  • ‫-d: السماح بخفض رمز الإصدار.
  • -g: منح جميع الأذونات المُدرَجة في بيان التطبيق
  • --fastdeploy: لتعديل حزمة مثبَّتة بسرعة من خلال تعديل أجزاء حزمة APK التي تم تغييرها فقط.
  • --incremental: تثبِّت هذه الميزة جزءًا كافيًا من حزمة APK لتشغيل التطبيق أثناء بث البيانات المتبقية في الخلفية. لاستخدام هذه الميزة، يجب توقيع حزمة APK وإنشاء ملف الإصدار 4 من مخطّط توقيع حِزم APK ووضع هذا الملف في الدليل نفسه الذي توجد فيه حزمة APK. لا تتوفّر هذه الميزة إلا على أجهزة معيّنة. يفرض هذا الخيار على adb استخدام الميزة أو إيقافها في حال عدم توفّرها، مع تقديم معلومات تفصيلية عن سبب الإيقاف. أضِف الخيار --wait إلى الانتظار إلى أن يكتمل تثبيت حزمة APK بالكامل قبل منح إذن الوصول إليها.

    تمنع --no-incremental adb من استخدام هذه الميزة.

uninstall [options] package يزيل حزمة من النظام.

الخيارات:

  • -k: الاحتفاظ بدليلَي البيانات وذاكرة التخزين المؤقت بعد إزالة الحزمة
  • ‫--user user_id: تحدّد المستخدم الذي ستتم إزالة الحزمة منه. تتم تلقائيًا إزالة الحزمة لجميع المستخدمين على الجهاز.
  • --versionCode version_code: لا يتم إلغاء التثبيت إلا إذا كان للتطبيق رمز الإصدار المحدّد.
clear package حذف جميع البيانات المرتبطة بحزمة
enable package_or_component تفعيل الحزمة أو المكوّن المحدّدَين (يُكتبان على النحو التالي: "package/class").
disable package_or_component إيقاف الحزمة أو المكوّن المحدّدَين (المكتوبَين بالتنسيق "package/class").
disable-user [options] package_or_component

الخيارات:

  • --user user_id: تمثّل المستخدم المطلوب إيقافه.
grant package_name permission منح إذن لأحد التطبيقات: على الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 23) والإصدارات الأحدث، يمكن أن يكون الإذن أي إذن تم تحديده في بيان التطبيق. على الأجهزة التي تعمل بالإصدار 5.1 من نظام التشغيل Android (المستوى 22 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يجب أن يكون إذنًا اختياريًا يحدّده التطبيق.
revoke package_name permission إبطال إذن من تطبيق: على الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن أن يكون الإذن أي إذن تم تحديده في بيان التطبيق. على الأجهزة التي تعمل بالإصدار 5.1 من نظام التشغيل Android (المستوى 22 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يجب أن يكون إذنًا اختياريًا يحدّده التطبيق.
set-install-location location غيِّر موقع التثبيت التلقائي. قيم الموقع الجغرافي:
  • 0: تلقائي: السماح للنظام بتحديد أفضل موقع جغرافي
  • 1: داخلي: يتم التثبيت على مساحة التخزين على الجهاز.
  • 2: خارجي: التثبيت على وسائط خارجية

ملاحظة: هذا الإجراء مخصّص لتصحيح الأخطاء فقط. قد يؤدي استخدام هذه الميزة إلى تعطُّل التطبيقات وسلوكيات أخرى غير مرغوب فيها.

get-install-location تعرِض هذه السمة موقع التثبيت الحالي. قيم العائد:
  • 0 [auto]: السماح للنظام بتحديد أفضل موقع جغرافي
  • 1 [internal]: التثبيت على مساحة التخزين على الجهاز
  • ‫2 [external]: التثبيت على وسائط خارجية
set-permission-enforced permission [true | false] تحدِّد هذه السمة ما إذا كان يجب فرض الإذن المحدّد.
trim-caches desired_free_space تقليل حجم ملفات ذاكرة التخزين المؤقت للوصول إلى المساحة الحرة المحدّدة
create-user user_name أنشئ مستخدمًا جديدًا باستخدام user_name المحدّد، مع طباعة معرّف المستخدم الجديد.
remove-user user_id إزالة المستخدم الذي يحمل المعرّف user_id، مع حذف جميع البيانات المرتبطة بهذا المستخدم
get-max-users طباعة الحد الأقصى لعدد المستخدمين الذين يتيحهم الجهاز
get-app-links [options] [package]

طباعة حالة إثبات ملكية النطاق للحزمة المحدّدة package، أو لجميع الحِزم إذا لم يتم تحديد أي حزمة يتم تحديد رموز الحالة على النحو التالي:

  • none: لم يتم تسجيل أي بيانات لهذا النطاق
  • verified: تم التحقّق من النطاق بنجاح
  • ‫approved: تمت الموافقة عليه بشكل إلزامي، عادةً من خلال shell
  • ‫denied: تم الرفض الإجباري، عادةً من خلال shell
  • ‫migrated: تم الاحتفاظ بالتحقّق من حساب قديم
  • ‫restored: تم الاحتفاظ بعملية إثبات الهوية من عملية استعادة بيانات المستخدم
  • ‫legacy_failure: تم رفضها من قِبل خدمة التحقّق القديمة، والسبب غير معروف
  • ‫system_configured: تمت الموافقة عليه تلقائيًا من خلال إعدادات الجهاز
  • ‫ >= 1024: رمز خطأ مخصّص خاص بأداة التحقّق من الجهاز

الخيارات هي:

  • ‫--user user_id: تضمين اختيارات المستخدم تضمين جميع النطاقات، وليس فقط تلك التي تم التحقّق منها تلقائيًا
reset-app-links [options] [package]

إعادة ضبط حالة إثبات ملكية النطاق للحزمة المحدّدة أو لجميع الحِزم في حال عدم تحديد أي حزمة

  • ‫package: الحزمة المطلوب إعادة ضبطها، أو "all" لإعادة ضبط جميع الحِزم

الخيارات هي:

  • ‫--user user_id: تضمين اختيارات المستخدم تضمين جميع النطاقات، وليس فقط تلك التي تم التحقّق منها تلقائيًا
verify-app-links [--re-verify] [package]

بث طلب تحقّق من package المحدّد أو من جميع الحِزم في حال عدم تحديد أي حزمة يتم إرسالها فقط إذا لم تسجّل الحزمة ردًا من قبل.

  • ‫--re-verify: إرسال حتى إذا سجّلت الحزمة ردًا
set-app-links [--package package] state domains

اضبط حالة نطاق لحزمة يدويًا. يجب أن تعرّف الحزمة النطاق على أنّه autoVerify لكي تعمل هذه الميزة. لن يعرض هذا الأمر رسالة خطأ للنطاقات التي تعذّر تطبيقه عليها.

  • ‫--package package: الحزمة المطلوب ضبطها، أو "all" لضبط جميع الحِزم
  • ‫state: الرمز المستخدَم لضبط النطاقات. القيم الصالحة هي:
    • ‫STATE_NO_RESPONSE (0): إعادة الضبط كما لو لم يتم تسجيل أي ردّ على الإطلاق
    • ‫STATE_SUCCESS (1): التعامل مع النطاق على أنّه تم إثبات ملكيته بنجاح من خلال وكيل إثبات ملكية النطاق. يُرجى العِلم أنّ وكيل إثبات ملكية النطاق يمكنه إلغاء هذا الإعداد.
    • STATE_APPROVED (2): يتم التعامل مع النطاق على أنّه معتمَد دائمًا، ما يمنع وكيل إثبات ملكية النطاق من تغييره.
    • ‫STATE_DENIED (3): يتم التعامل مع النطاق على أنّه مرفوض دائمًا، ما يمنع وكيل إثبات ملكية النطاق من تغييره.
  • ‫domains: قائمة بالنطاقات المراد تغييرها مفصولة بمسافات، أو "all" لتغيير كل النطاقات
set-app-links-user-selection --user user_id [--package package] enabled domains

تحديد حالة اختيار مستخدم مضيف لحزمة يدويًا يجب أن تعرّف الحزمة النطاق لكي تعمل هذه الميزة. لن يعرض هذا الأمر رسالة خطأ للنطاقات التي تعذّر تطبيقه عليها.

  • استبدِل --user user_id بالمستخدِم الذي تريد تغيير اختياراته.
  • ‫--package package: الحزمة المطلوب ضبطها
  • ‫enabled: لتحديد ما إذا كنت تريد الموافقة على النطاق
  • ‫domains: قائمة بالنطاقات مفصولة بمسافات لتغييرها، أو "all" لتغيير كل النطاقات
set-app-links-allowed --user user_id [--package package] allowed

تبديل إعداد معالجة الروابط الذي تم التحقّق منه تلقائيًا لإحدى الحِزم

  • استبدِل --user user_id بالمستخدِم الذي تريد تغيير اختياراته.
  • ‫--package package: الحزمة المطلوب ضبطها، أو "all" لضبط جميع الحِزم، وسيتم إعادة ضبط الحِزم في حال عدم تحديد أي حزمة
  • ‫allowed: true للسماح للحزمة بفتح الروابط التي تم التحقّق منها تلقائيًا، false لإيقاف هذه الميزة
get-app-link-owners --user user_id [--package package] domains

طباعة المالكين لنطاق معيّن لمستخدم معيّن بترتيب الأولوية من الأدنى إلى الأعلى

  • ‫--user user_id: المستخدم الذي سيتم البحث عنه
  • ‫--package package: يمكن أيضًا طباعة جميع نطاقات الويب المحدّدة في الحزمة، أو "all" لطباعة جميع الحِزم
  • ‫domains: قائمة بالنطاقات المطلوب البحث عنها مفصولة بمسافات

الاتصال بإدارة سياسات الأجهزة (dpm)

للمساعدة في تطوير تطبيقات إدارة الأجهزة واختبارها، يمكنك إصدار أوامر إلى أداة &quot;مدير سياسات الأجهزة&quot; (dpm). استخدِم الأداة للتحكّم في تطبيق المشرف النشط أو تغيير بيانات حالة إحدى السياسات على الجهاز.

أثناء استخدام shell، تكون dpmالصيغة كما يلي:

dpm command

يمكنك أيضًا إصدار أمر "مدير سياسات الأجهزة" مباشرةً من adb بدون إدخال shell عن بُعد:

adb shell dpm command

الجدول 3. أوامر "مدير سياسات الجهاز" المتاحة

الأمر الوصف
set-active-admin [options] component يضبط component كمشرف نشط.

الخيارات هي:

  • استبدِل --user user_id بالمستخدم المستهدَف. يمكنك أيضًا تمرير --user current لاختيار المستخدم الحالي.
set-profile-owner [options] component اضبط component كمشرف نشط وحِزمته كمالك للملف الشخصي لمستخدم حالي.

الخيارات هي:

  • استبدِل --user user_id بالمستخدم المستهدَف. يمكنك أيضًا تمرير --user current لاختيار المستخدم الحالي.
  • --name name: حدِّد اسم المؤسسة الذي يمكن لشخص عادي قراءته.
set-device-owner [options] component اضبط component كمشرف نشط وحِزمته كمالك للجهاز.

الخيارات هي:

  • استبدِل --user user_id بالمستخدم المستهدَف. يمكنك أيضًا تمرير --user current لاختيار المستخدم الحالي.
  • --name name: حدِّد اسم المؤسسة الذي يمكن لشخص عادي قراءته.
remove-active-admin [options] component إيقاف مشرف نشط يجب أن يعرّف التطبيق android:testOnly في ملف البيان. يزيل هذا الأمر أيضًا مالكي الأجهزة والملفات الشخصية.

الخيارات هي:

  • استبدِل --user user_id بالمستخدم المستهدَف. يمكنك أيضًا تمرير --user current لاختيار المستخدم الحالي.
clear-freeze-period-record محو سجل فترات التجميد التي تم ضبطها سابقًا لتحديثات النظام عبر شبكة غير سلكية ويكون ذلك مفيدًا لتجنُّب القيود المتعلقة بجدولة الأجهزة عند تطوير تطبيقات تدير فترات التجميد. اطّلِع على مقالة إدارة تحديثات النظام.

يتوفّر هذا الإعداد على الأجهزة التي تعمل بالإصدار 9.0 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) والإصدارات الأحدث.

force-network-logs إجبار النظام على إعداد أي سجلّات شبكة حالية لاسترجاعها من خلال وحدة تحكّم بسياسة الجهاز (DPC) إذا كانت هناك سجلّات اتصال أو سجلّات نظام أسماء النطاقات متاحة، سيتلقّى DPC onNetworkLogsAvailable() رد الاتصال. مزيد من المعلومات حول تسجيل نشاط الشبكة

هذا الأمر يخضع لقيود على معدّل الاستخدام. يتوفّر هذا الإعداد على الأجهزة التي تعمل بالإصدار 9.0 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) والإصدارات الأحدث.

force-security-logs فرض إتاحة أي سجلّات أمان حالية لوحدة التحكّم بسياسة الجهاز (DPC) إذا كانت هناك سجلّات متاحة، سيتلقّى DPC onSecurityLogsAvailable() رد الاتصال. الاطّلاع على سجلّ نشاط أجهزة المؤسسة

هذا الأمر يخضع لقيود على معدّل الاستخدام. يتوفّر هذا الإعداد على الأجهزة التي تعمل بالإصدار 9.0 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) والإصدارات الأحدث.

أخذ لقطة شاشة

الأمر screencap هو أداة مساعدة في واجهة الأوامر لأخذ لقطة شاشة من شاشة الجهاز.

أثناء استخدام shell، تكون بنية الجملة screencap كما يلي:

screencap filename

لاستخدام screencap من سطر الأوامر، أدخِل ما يلي:

adb shell screencap /sdcard/screen.png

في ما يلي مثال على جلسة لقطة شاشة، باستخدام shell adb لالتقاط لقطة الشاشة والأمر pull لتنزيل الملف من الجهاز:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

بدلاً من ذلك، إذا حذفت اسم الملف، ستكتب screencap الصورة في الإخراج العادي. عند دمجه مع الخيار -p لتحديد تنسيق PNG، يمكنك بث لقطة شاشة الجهاز مباشرةً إلى ملف على جهازك المحلي.

في ما يلي مثال على التقاط لقطة شاشة وحفظها محليًا في أمر واحد:

# use 'exec-out' instead of 'shell' to get raw data
$ adb exec-out screencap -p > screen.png

تسجيل فيديو

الأمر screenrecord هو أداة مساعدة في shell لتسجيل شاشة الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 19) والإصدارات الأحدث. تسجّل الأداة نشاط الشاشة في ملف MPEG-4. يمكنك استخدام هذا الملف لإنشاء فيديوهات ترويجية أو تدريبية أو لتصحيح الأخطاء واختبارها.

في shell، استخدِم البنية التالية:

screenrecord [options] filename

لاستخدام screenrecord من سطر الأوامر، أدخِل ما يلي:

adb shell screenrecord /sdcard/demo.mp4

أوقِف تسجيل الشاشة بالضغط على Control+C. وإلّا، سيتوقّف التسجيل تلقائيًا بعد ثلاث دقائق أو عند بلوغ الحد الزمني الذي حدّده --time-limit.

لبدء تسجيل شاشة جهازك، نفِّذ الأمر screenrecord لتسجيل الفيديو. بعد ذلك، نفِّذ الأمر pull لتنزيل الفيديو من الجهاز إلى الكمبيوتر المضيف. في ما يلي مثال على جلسة تسجيل:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

يمكن لأداة screenrecord تسجيل الشاشة بأي دقة ومعدل نقل بيانات متوافقَين تطلبهما، مع الاحتفاظ بنسبة العرض إلى الارتفاع لشاشة الجهاز. تسجّل الأداة بدقة العرض والاتجاه الأصليين تلقائيًا، وبمدة قصوى تبلغ ثلاث دقائق.

في ما يلي القيود المفروضة على الأداة screenrecord:

  • لا يتم تسجيل الصوت مع ملف الفيديو.
  • لا تتوفّر ميزة تسجيل الفيديو على الأجهزة التي تعمل بنظام التشغيل Wear OS.
  • قد لا تتمكّن بعض الأجهزة من التسجيل بدقة العرض الأصلية. إذا واجهت مشاكل في تسجيل الشاشة، جرِّب استخدام درجة دقة أقل للشاشة.
  • لا يمكن تدوير الشاشة أثناء التسجيل. إذا تم تدوير الشاشة أثناء التسجيل، سيتم قطع جزء من الشاشة في التسجيل.

الجدول 4. خيارات screenrecord

الخيارات الوصف
--help عرض بنية الأوامر وخياراتها
--size widthxheight اضبط حجم الفيديو: 1280x720. القيمة التلقائية هي دقة العرض الأصلية للجهاز (إذا كانت متوافقة)، أو 1280x720 إذا لم تكن متوافقة. للحصول على أفضل النتائج، استخدِم حجمًا متوافقًا مع برنامج ترميز Advanced Video Coding (AVC) على جهازك.
--bit-rate rate اضبط معدّل نقل بيانات الفيديو بالميغابت في الثانية. القيمة التلقائية هي 20 ميغابت في الثانية. يمكنك زيادة معدّل نقل البيانات لتحسين جودة الفيديو، ولكن سيؤدي ذلك إلى زيادة حجم ملفات الأفلام. يضبط المثال التالي معدّل نقل البيانات للتسجيل على 6 ميغابت في الثانية:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time اضبط الحد الأقصى لوقت التسجيل بالثواني. القيمة التلقائية والحد الأقصى للقيمة هو 180 (3 دقائق).
--rotate تدوير الناتج بمقدار 90 درجة هذه الميزة تجريبية.
--verbose عرض معلومات السجلّ على شاشة سطر الأوامر إذا لم تضبط هذا الخيار، لن تعرض الأداة أي معلومات أثناء التشغيل.

قراءة ملفات ART الشخصية للتطبيقات

بدءًا من Android 7.0 (مستوى واجهة برمجة التطبيقات 24)، يجمع وقت تشغيل Android ‏ (ART) ملفات تعريف التنفيذ للتطبيقات المثبَّتة، والتي تُستخدَم لتحسين أداء التطبيقات. افحص الملفات الشخصية التي تم جمعها للتعرّف على الطرق التي يتم تنفيذها بشكل متكرر والفئات التي يتم استخدامها أثناء بدء تشغيل التطبيق.

ملاحظة: لا يمكن استرداد اسم ملف بيانات تنفيذ التطبيق إلا إذا كان لديك إذن وصول إلى جذر نظام الملفات، مثلاً على محاكي.

لإنشاء نموذج نصي لمعلومات الملف الشخصي، استخدِم الأمر التالي:

adb shell cmd package dump-profiles package

لاسترداد الملف الناتج، استخدِم الأمر التالي:

adb pull /data/misc/profman/package.prof.txt

إعادة ضبط الأجهزة الاختبارية

إذا كنت تختبر تطبيقك على أجهزة اختبار متعددة، قد يكون من المفيد إعادة ضبط جهازك بين الاختبارات، مثلاً لإزالة بيانات المستخدم وإعادة ضبط بيئة الاختبار. يمكنك إعادة ضبط جهاز اختبار يعمل بالإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو إصدار أحدث على الإعدادات الأصلية باستخدام أمر shell testharness adb، كما هو موضّح أدناه:

adb shell cmd testharness enable

عند استعادة الجهاز باستخدام testharness، يتم تلقائيًا الاحتفاظ بنسخة احتياطية من مفتاح RSA الذي يتيح تصحيح الأخطاء من خلال محطة العمل الحالية في موقع جغرافي دائم. أي أنّه بعد إعادة ضبط الجهاز، يمكن لمحطة العمل مواصلة تصحيح الأخطاء وإصدار أوامر adb للجهاز بدون تسجيل مفتاح جديد يدويًا.

بالإضافة إلى ذلك، للمساعدة في تسهيل عملية مواصلة اختبار تطبيقك وجعلها أكثر أمانًا، يؤدي استخدام testharness لاستعادة جهاز إلى تغيير إعدادات الجهاز التالية أيضًا:

  • يضبط الجهاز بعض إعدادات النظام حتى لا تظهر معالجات الإعداد الأولي للجهاز. أي أنّ الجهاز يدخل في حالة يمكنك من خلالها تثبيت تطبيقك وتصحيح أخطائه واختباره بسرعة.
  • الإعدادات:
    • يؤدي ذلك إلى إيقاف شاشة القفل.
    • يتم إيقاف تنبيهات الطوارئ.
    • توقِف هذه الميزة المزامنة التلقائية للحسابات.
    • يؤدي هذا الخيار إلى إيقاف التحديثات التلقائية للنظام.
  • غير ذلك:
    • يؤدي إلى إيقاف تطبيقات الأمان المثبَّتة مسبقًا.

إذا كان تطبيقك بحاجة إلى رصد الإعدادات التلقائية للأمر testharness والتكيّف معها، استخدِم ActivityManager.isRunningInUserTestHarness().

sqlite

يبدأ sqlite3 برنامج سطر الأوامر sqlite لفحص قواعد بيانات SQLite. ويتضمّن أوامر مثل .dump لطباعة محتوى جدول و.schema لطباعة عبارة SQL CREATE لجدول حالي. يمكنك أيضًا تنفيذ أوامر SQLite من سطر الأوامر، كما هو موضّح:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

ملاحظة: لا يمكن الوصول إلى قاعدة بيانات SQLite إلا إذا كان لديك إذن وصول إلى جذر نظام الملفات، مثلاً على محاكي.

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات سطر الأوامر sqlite3.

البرامج الخلفية لـ adb عبر USB

يمكن لخادم adb التفاعل مع حزمة USB من خلال نظامَين خلفيَّين. يمكنه استخدام الخلفية الأصلية لنظام التشغيل (Windows أو Linux أو macOS) أو استخدام خلفية libusb. لا تتوفّر بعض الميزات، مثل attach وdetach ورصد سرعة USB، إلا عند استخدام libusb كخادم خلفي.

يمكنك اختيار واجهة خلفية باستخدام متغيّر البيئة ADB_LIBUSB. إذا لم يتم ضبطها، سيستخدم adb الخلفية التلقائية. يختلف السلوك التلقائي باختلاف نظام التشغيل. اعتبارًا من الإصدار 34 من Android Debug Bridge، يتم استخدام الخلفية libusb تلقائيًا على جميع أنظمة التشغيل باستثناء Windows، حيث يتم استخدام الخلفية الأصلية تلقائيًا. في حال ضبط ADB_LIBUSB، يحدّد هذا الإعداد ما إذا كان سيتم استخدام الخلفية الأصلية أو libusb. راجِع صفحة دليل adb للحصول على مزيد من المعلومات حول متغيرات بيئة adb.

الخدمات الخلفية لنظام mDNS في adb

يستخدم ADB بروتوكول mDNS (نظام أسماء النطاقات المتعدد البث) لربط الخادم والأجهزة تلقائيًا بهدف تصحيح الأخطاء لاسلكيًا. اعتبارًا من الإصدار 37 من ADB، يتضمّن خادم ADB نظامَين خلفيَّين لبروتوكول mDNS، هما libadbmdns وopenscreen.

libadbmdns هو الخادم الخلفي التلقائي والمُقترَح. يمكن تغيير هذا السلوك باستخدام متغيّر البيئة ADB_MDNS_OPENSCREEN (يجب ضبطه على 1 أو 0). يبدأ توفير الدعم لخادم Openscreen الخلفي على نظام التشغيل macOS في الإصدار 35 من "جسر تصحيح الأخطاء في Android" (ADB). يتوافق هذا الإصدار مع نظامَي التشغيل Windows وLinux.

وضع "اللقطات المتتالية" في أداة ADB (بدءًا من الإصدار 36.0.0 من أداة ADB)

&quot;وضع الإرسال السريع&quot; هو ميزة تجريبية تتيح لأداة ADB مواصلة إرسال حِزم إلى جهاز حتى قبل أن يستجيب الجهاز للحزمة السابقة. يؤدي ذلك إلى زيادة معدل نقل البيانات في ADB بشكل كبير عند نقل الملفات الكبيرة، كما يقلّل من وقت الاستجابة أثناء تصحيح الأخطاء.

يكون "وضع الالتقاط المتواصل" غير مفعَّل تلقائيًا. لتفعيل الميزة، اتّبِع أحد الإجراءات التالية:

  • اضبط متغيّر البيئة ADB_BURST_MODE على 1.
  • في &quot;استوديو Android&quot;، انتقِل إلى إعدادات مصحّح الأخطاء من خلال ملف (أو استوديو Android على نظام التشغيل macOS) > الإعدادات > الإنشاء والتنفيذ والنشر > مصحّح الأخطاء، ثم اضبط وضع التشغيل السريع لخادم ADB على مفعَّل.