اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
أرقام تعريف الأجهزة غير القابلة للتغيير
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في الإصدار 6 من نظام التشغيل Android والإصدارات الأحدث، تم منع مقدّمي خدمة Wi-Fi وأدوات تحليل الحِزم من استرداد عنوان MAC التلقائي للجهاز من خلال حِزمة Wi-Fi من طلبات الشبكة. بدءًا من Android 10، تم فرض قيود إضافية تحدّ من الوصول إلى ملف تعريف
المعرّف (ID) للجهاز إلى التطبيقات التي تمتلك
مستوى الإذنالمميّز. ويحمي ذلك أرقام تعريف الأجهزة، مثل
- أرقام الهوية الدولية للجهاز الجوّال (IMEI) وMEID وESN وIMSI للاتصالات الهاتفية
- الأرقام التسلسلية للإصدار أو بطاقة SIM أو USB
المستخدمون الذين يمكنهم الوصول إلى أرقام تعريف الأجهزة
يتم حظر أرقام تعريف الأجهزة على جميع
أجهزة Android 10، حتى إذا كانت التطبيقات تستهدف الإصدار 9 من Android أو إصدارًا أقدم. يمكن الوصول إلى أرقام تعريف الأجهزة من خلال:
الوصول إلى الحِزم المميّزة
يجب أن تكون الحزمة مفوَّضة للوصول إلى أرقام تعريف الأجهزة. يجب أن يكون لديه إذن
READ_PRIVILEGED_PHONE_STATE
في فئة
Manifest.permission
، وأن يكون مُدرَجًا في القائمة المسموح بها في ملف
privapp-permission.xml
. للحصول على معلومات حول عملية إضافة التطبيقات إلى القائمة المسموح بها، يُرجى الاطّلاع على إضافة التطبيقات إلى القائمة المسموح بها
للحصول على أذونات مميّزة.
للحصول على معلومات عن الحصول على معرّف فريد لحزمة غير مفوَّضة،
يُرجى الرجوع إلى
حالات الاستخدام الشائعة والمعرّف المناسب لاستخدامه.
أرقام تعريف الأجهزة المحظورة وعناوين MAC العشوائية
لتقييد معرّفات الأجهزة بشكل أكبر، تُرسِل جميع الأجهزة التي تعمل بالإصدار 10 من نظام Android عناوين MAC عشوائية تلقائيًا لكلٍّ من
طلبات الاستكشاف والطلبات المرتبطة، ويجب أن يكون لها عنوان MAC عشوائي مختلف
لكل SSID. لا تستخدِم عنوان MAC التلقائي للجهاز في وضع العميل أو نقطة الشدَّد
الوصول (AP) أو حالات استخدام Wi-Fi Direct. يجب أن يظل التطبيق مخفيًا عن
واجهات برمجة التطبيقات المتاحة للجميع والتي لا تتمتع بصلاحيات خاصة. يجب أن يكون لدى التطبيقات المميّزة التي
تتطلّب عرض عنوان MAC التلقائي إذن
LOCAL_MAC_ADDRESS
.
يمكن للمستخدمين الاحتفاظ بعنوان MAC التلقائي العشوائي الذي تم تخصيصه لكل SSID.
يمكن الاطّلاع على الخيار ضمن الخصوصية في
الإعدادات > تفاصيل الشبكة. للتعرّف على كيفية
الحصول على عنوان MAC عشوائي، يُرجى الاطّلاع على مقالة
عناوين MAC العشوائية.
الشكل 1: يظهر عنوان MAC بشكل عشوائي ضمن "الخصوصية" في تفاصيل الشبكة.
التطبيقات التي تستدعي واجهات برمجة تطبيقات أرقام تعريف الأجهزة
يجب أن تستوفي التطبيقات التي تستدعي واجهات برمجة تطبيقات أرقام تعريف الأجهزة متطلبات Android 10. بخلاف ذلك، عند محاولة الوصول إلى
أرقام تعريف الأجهزة، يتم عرض ما يلي:
- التطبيقات التي تستهدف الإصدار 10 من Android
- التطبيقات التي تستهدف الإصدار 9 من Android أو الإصدارات الأقدم
- إذا كان لديهم الإذن
READ_PHONE_STATE
، يتم عرض استجابة null
أو
بيانات العنصر النائب.
- وفي حال عدم استيفاء هذه المتطلبات، تُرسِل واجهات برمجة التطبيقات الخاصة بمعرّف الجهاز
SecurityException
التي تحتوي على اسم الطريقة التي تمّ استدعاؤها، وإشارة إلى أنّ التطبيق المُطلِب
لا يستوفي متطلبات الوصول إلى المعرّف المطلوب.
لمزيد من المعلومات عن أرقام تعريف الأجهزة الثابتة، يُرجى الاطّلاع على معرّفات الأجهزة التي لا يمكن إعادة ضبطها وأفضل الممارسات
للمعرّفات الفريدة.
الاختبار
يجب منع التطبيقات من الوصول إلى الرقم التسلسلي للجهاز، وكذلك إلى رمز IMEI أو MEID والرقم التسلسلي لشريحة SIM ورقم تعريف المشترك، حيثما ينطبق ذلك. يجب أن تستوفي أيضًا التطبيقات التي لديها
إذن بالوصول إلى هذه المعرّفات أحد المعايير المدرَجة ضمن المستخدمون الذين يمكنهم الوصول إلى أرقام تعريف الأجهزة.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Immutable device IDs\n\nIn Android 6 and higher, Wi-Fi service providers and packet analyzers have\nbeen restricted from retrieving a device's factory MAC address through the\nWi-Fi stack from network requests. Starting in Android 10, additional restrictions are in place that limit access to device\nidentifiers (IDs) to apps with the [privileged](/docs/core/permissions/perms-allowlist)[permission\nlevel](https://developer.android.com/reference/android/R.attr.html#protectionLevel). This protects device IDs such as\n\n- telephony IMEI, MEID, ESN, and IMSI numbers.\n- build, SIM, or USB serial numbers.\n\n### Who can access device IDs\n\nDevice IDs are restricted on all Android 10\ndevices, even if apps target Android 9 or lower. Device IDs can be accessed by:\n\n- The default SMS app.\n- Apps with both [READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the `\n `[Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class, and allowlisting in the `privapp-permission.xml` file. These must also be loaded in the `priv-app` directory.\n- Apps with carrier privileges as defined in [UICC Carrier\n Privileges](/docs/core/connect/uicc).\n- A device owner or profile owner with [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission granted in the [Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class. (Allowlisting isn't required.)\n\n#### Privileged packages access\n\nA package must be privileged to access device IDs. It must have\n[READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the\n`Manifest.permission` class, and be allowlisted in the\n`privapp-permission.xml` file. For information on the allowlist\nprocess, see [Privileged\nPermission Allowlisting](/docs/core/permissions/perms-allowlist).\n\nFor information on getting a unique ID for a *nonprivileged* package,\nrefer to [Common use cases and the appropriate identifier to use](https://developer.android.com/training/articles/user-data-ids#common-use-cases).\n\n#### Restricted device IDs and randomized MAC addresses\n\nTo further restrict device IDs, all devices on Android 10 transmit randomized MAC addresses by default for both\nprobe and associated requests, and must have a different randomized MAC address\nfor each SSID. Don't use the device factory MAC address in client mode, soft\naccess point (AP), or Wi-Fi Direct use cases. It must remain hidden from\npublicly accessible APIs that aren't privileged apps. Privileged apps that\nrequire the factory MAC address to be returned are required to have\n`LOCAL_MAC_ADDRESS` permission.\n\nUsers have the option to keep the *default randomized* MAC address that's assigned to each SSID.\nThe option is viewable under **Privacy** in\n**Settings** \\\u003e **Network details** . To learn about\nobtaining a randomized MAC address see [Randomized MAC addresses](https://developer.android.com/about/versions/10/privacy/changes#data-ids).\n\n**Figure 1.**MAC address shows as randomized under Privacy in Network details.\n\n#### Apps that invoke device ID APIs\n\nApps that invoke device ID APIs must meet the Android 10 requirements. Otherwise, when they try to access\ndevice IDs the following is returned:\n\n- Apps targeting Android 10\n - [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) is thrown from the device ID APIs.\n- Apps targeting Android 9 or earlier\n - If they have the [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission, either a `null` response or placeholder data is returned.\n - If they don't, the device ID APIs throw [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) that contains the name of the method called, and an indication that the calling app doesn't meet the requirements to access the requested ID.\n\nFor more on immutable device IDs see [Nonresettable\ndevice identifiers](https://developer.android.com/about/versions/10/privacy/changes#data-ids) and [best practices\nfor unique identifiers](https://developer.android.com/training/articles/user-data-ids).\n\n### Testing\n\nApps *must* be prevented from accessing the device serial number and,\nwhere applicable, IMEI or MEID, SIM serial number, and subscriber ID. Apps with\npermission to access these IDs must also meet one of the criteria listed under\n[Who can access device IDs](#who-access)."]]