يمكنك استخدام المعلومات الواردة في هذه الصفحة لإنشاء ملفات التغييرات لجهازك المنتج.
يجب أن تحتوي كل وحدة Android جديدة على ملف إعداد لتوجيه نظام التصميم مع البيانات الوصفية للوحدة وتبعيات وقت التجميع وتعليمات التعبئة. يستخدم Android نظام تصميم Soong: راجع إنشاء Android للحصول على مزيد من المعلومات حول نظام Android نظام التصميم.
فهم طبقات التصميم
يشتمل تسلسل التصميم على طبقات التجريد التي تتجاوب مع الماكياج المادي للجهاز. يتم توضيح هذه الطبقات في الجدول أدناه. ترتبط كل طبقة بالطبقة التي أعلاها في علاقة واحد إلى متعدد. بالنسبة على سبيل المثال، يمكن أن يكون للهندسة أكثر من لوحة ويمكن أن تحتوي كل لوحة على أكثر من منتج واحد. يمكنك تعريف عنصر في طبقة معينة تخصص أحد العناصر في نفس الطبقة، مما يغني عن نسخ ويبسط الصيانة.
الطبقة | مثال | الوصف |
---|---|---|
المنتَج | myProduct وmyProduct_eu وmyProduct_eu_fr وj2 وsdk | تحدد طبقة المنتج مواصفات ميزة الشحن مثل الوحدات المراد إنشاؤها واللغات المدعومة التهيئة للغات مختلفة. بعبارة أخرى، هذا هو الاسم من المنتج الإجمالي. يتم تحديد المتغيرات الخاصة بالمنتج في ملفات تعريف المنتج لتعريف المنتج. يمكن أن يكتسب منتج ما من بيانات تعريفات المنتج، مما يبسط الصيانة. طريقة شائعة إنشاء منتج أساسي يحتوي على ميزات تنطبق على جميع المنتجات، ثم ننشئ خيارات المنتجات استنادًا إلى تلك القاعدة المنتج. على سبيل المثال، هناك منتجان يختلفان فقط في أن الأجهزة اللاسلكية (CDMA مقابل GSM) يمكن أن تكتسب من المنتج الأساسي نفسه الذي لا يعمل على تعريف الراديو. |
لوح/جهاز | مارلين، بلولاين، مرجان | تمثل طبقة اللوحة أو الجهاز الطبقة المادية للبلاستيك على الجهاز (أي التصميم الصناعي للجهاز). تمثل هذه الطبقة أيضًا المنطقة ورسومات المنتج. وتشمل هذه الأجهزة الملحقة على اللوحة التكوين. الأسماء المستخدمة هي مجرد رموز للوحة أو جهاز مختلف الإعدادات. |
مقوّسة | Shield، x86، Arm64 ، x86_64 | تصف الطبقة الهندسية تهيئة المعالج واجهة التطبيق الثنائية (ABI) التي تعمل على اللوحة. |
استخدام صيغ الإصدار
عند التصميم لمنتج معين، من المفيد أن يكون لديك معلومات
الاختلافات في إصدار الإصدار النهائي. في وحدة
يمكن للوحدة تحديد العلامات باستخدام LOCAL_MODULE_TAGS
،
والتي يمكن أن تكون قيمة واحدة أو أكثر من القيم optional
(التلقائية)،
debug
، وeng
.
إذا لم تحدِّد الوحدة علامة (بواسطة LOCAL_MODULE_TAGS
)، سيتم
يتم ضبط العلامة التلقائية على optional
. لا يتم تثبيت وحدة اختيارية إلا إذا
مطلوبة من خلال إعدادات المنتج في PRODUCT_PACKAGES
.
هذه هي صيغ الإصدار المحددة حاليًا.
الصيغة | الوصف |
---|---|
eng
|
هذه هي النكهة التلقائية.
|
user
|
الصيغة المقصودة أن تكون وحدات بت الإصدار النهائية.
|
userdebug
|
هذه السمة مثل user ، مع الاستثناءات التالية:
|
إرشادات بشأن تصحيح أخطاء المستخدم
يساعد تشغيل إصدار تصحيح أخطاء المستخدم في الاختبار مطوّري الأجهزة على فهم من أداء وقوة الإصدارات قيد التطوير. للحفاظ على الاتساق بين بُنى المستخدم وتصحيح أخطاء المستخدم، وتحقيق مقاييس موثوقة في التصاميم التي تُستخدم لتصحيح الأخطاء، على مطوّري الأجهزة اتّباع الإرشادات التالية:
- يتم تعريف userdebug على أنه إصدار للمستخدم مع تفعيل الوصول إلى الجذر، باستثناء:
- تطبيقات تصحيح أخطاء المستخدم فقط التي لا يشغّلها المستخدم إلا عند الطلب
- العمليات التي لا تعمل إلا أثناء الصيانة في وضع عدم النشاط (على الشاحن/الكامل
مشحونة)، مثل استخدام
dex2oatd
في مقابلdex2oat
لعمليات التجميع في الخلفية
- لا تضمِّن ميزات تم تفعيلها أو إيقافها تلقائيًا استنادًا إلى نوع التصميم. لا ننصح المطورين باستخدام أي شكل من أشكال التسجيل التي تؤثر على عمر البطارية، مثل التسجيل لتصحيح الأخطاء أو تسجيل لقطات لأجزاء من الذاكرة
- يجب تحديد أي ميزات تصحيح أخطاء تكون مفعّلة تلقائيًا في userdebug ومشاركتها مع جميع المطورين العاملين في المشروع. يجب تفعيل ميزات تصحيح الأخطاء لفترة محدودة فقط إلى أن يتم حلّ المشكلة المطلوب تصحيحها
تخصيص الإصدار باستخدام تراكبات الموارد
يستخدم نظام إصدار Android تراكبات الموارد لتخصيص
منتج في وقت الإنشاء. تحدِّد تراكبات الموارد المورد
الملفات التي يتم تطبيقها على الإعدادات الافتراضية. لاستخدام تراكبات الموارد، عليك تعديل المشروع
ملف التصميم لضبط PRODUCT_PACKAGE_OVERLAYS
على
بالنسبة إلى دليلك ذي المستوى الأعلى. يصبح هذا المسار جذر الظل يتم البحث عنه مع
الجذر الحالي عندما يبحث نظام الإصدار عن الموارد.
ويتم تضمين الإعدادات الأكثر تخصيصًا في الملف frameworks/base/core/res/res/values/config.xml.
لإعداد تراكب موارد على هذا الملف، أضف دليل التراكب إلى ملف إنشاء المشروع باستخدام أحد الخيارات التالية:
PRODUCT_PACKAGE_OVERLAYS := device/device-implementer/device-name/overlay
أو
PRODUCT_PACKAGE_OVERLAYS := vendor/vendor-name/overlay
بعد ذلك، أضف ملف تراكب إلى الدليل، على سبيل المثال:
vendor/foobar/overlay/frameworks/base/core/res/res/values/config.xml
يتم استبدال أي سلاسل أو صفائف سلاسل موجودة في ملف تراكب config.xml
تلك الموجودة في الملف الأصلي.
إنشاء منتج
يمكنك تنظيم ملفات المصدر لجهازك بعدة طرق مختلفة. إليك الموجز ووصفًا لطريقة واحدة لتنظيم تنفيذ Pixel.
يتم تنفيذ هاتف Pixel باستخدام إعداد رئيسي للجهاز يُسمى
marlin
ومن إعدادات الجهاز هذه، يتم إنشاء منتج باستخدام
ملف تعريف المنتج makefile الذي يعلن عن معلومات خاصة بالمنتج حول
الجهاز مثل الاسم والطراز. يمكنك الاطّلاع على
device/google/marlin
للاطّلاع على طريقة إعداد كل ذلك.
كتابة ملفات تصميم المنتجات
توضّح الخطوات التالية كيفية إعداد ملفات صناعة المنتجات بطريقة مشابهة بالنسبة إلى مجموعة منتجات Pixel:
- إنشاء
device/<company-name>/<device-name>
دليل المنتج. مثلاً:device/google/marlin
سيحتوي هذا الدليل على رمز مصدر لجهازك إلى جانب ملفات التغييرات لإنشائها. - أنشِئ ملف
device.mk
بتنسيق يحدِّد الملفات والوحدات المطلوبة الخاص بك. على سبيل المثال، يُرجى مراجعةdevice/google/marlin/device-marlin.mk
. - إنشاء ملف تعريفي لتعريف المنتج لإنشاء منتج معيّن استنادًا إلى الجهاز تشير رسالة الأشكال البيانية
ملف makefile التالي مأخوذ من
device/google/marlin/aosp_marlin.mk
كمثال. لاحظ أن المنتج يكتسب منdevice/google/marlin/device-marlin.mk
وvendor/google/marlin/device-vendor-marlin.mk
ملف من خلال ملف makefile أثناء أيضًا الإعلان عن المعلومات المتعلقة بالمنتج مثل الاسم والعلامة التجارية والطراز.# Inherit from the common Open Source product configuration $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) PRODUCT_NAME := aosp_marlin PRODUCT_DEVICE := marlin PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP on msm8996 PRODUCT_MANUFACTURER := Google PRODUCT_RESTRICT_VENDOR_FILES := true PRODUCT_COPY_FILES += device/google/marlin/fstab.common:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.marlin $(call inherit-product, device/google/marlin/device-marlin.mk) $(call inherit-product-if-exists, vendor/google_devices/marlin/device-vendor-marlin.mk) PRODUCT_PACKAGES += \ Launcher3QuickStep \ WallpaperPicker
راجِع ضبط متغيّرات تعريف المنتجات للحصول على معلومات إضافية المتغيرات الخاصة بالمنتج والتي يمكنك إضافتها إلى ملفات Makefiles.
- أنشِئ ملف
AndroidProducts.mk
يشير إلى ملفات Makefiles الخاصة بالمنتج. ضِمن هذا المثال، تكون هناك حاجة إلى ملف makefile فقط لتعريف المنتج. المثال أدناه مأخوذ منdevice/google/marlin/AndroidProducts.mk
(الذي يحتوي على كل من marlin وPixel وسمك شراع، Pixel XL، الذي شارك معظم الإعدادات):PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_marlin.mk \ $(LOCAL_DIR)/aosp_sailfish.mk COMMON_LUNCH_CHOICES := \ aosp_marlin-userdebug \ aosp_sailfish-userdebug
- يمكنك إنشاء ملف إعداد
BoardConfig.mk
يحتوي على إعدادات خاصة باللوحة. على سبيل المثال، يُرجى مراجعةdevice/google/marlin/BoardConfig.mk
. - على نظام التشغيل Android 9 والإصدارات الأقدم فقط، أنشئ
ملف واحد (
vendorsetup.sh
) لإضافة منتجك ("مزيج غداء") إلى التصميم جنبًا إلى جنب مع خيار الإصدار مفصولة بشرطة. مثل:add_lunch_combo <product-name>-userdebug
- وفي هذه المرحلة، يمكنك إنشاء المزيد من خيارات المنتج استنادًا إلى الجهاز نفسه.
ضبط متغيّرات تعريفات المنتجات
يتم تحديد المتغيرات الخاصة بالمنتج في ملف makefile الخاص بالمنتج. يعرض الجدول بعضًا من المتغيرات المحفوظة في ملف تعريف المنتج.
متغير | الوصف | مثال |
---|---|---|
PRODUCT_AAPT_CONFIG
|
aapt من الإعدادات التي سيتم استخدامها عند إنشاء الحِزم.
|
|
PRODUCT_BRAND
|
العلامة التجارية (مثل مشغّل شبكة الجوّال) التي يتم تخصيص البرنامج لها. | |
PRODUCT_CHARACTERISTICS
|
aapt للسماح بإضافة موارد خاصة بخيارات المنتج إلى حزمة.
|
tablet ، nosdcard
|
PRODUCT_COPY_FILES
|
قائمة كلمات مثل source_path:destination_path . الملف في المسار المصدر
إلى مسار الوجهة عند إنشاء هذا المنتج. قواعد النسخ
يتم تحديد الخطوات في config/makefile .
|
|
PRODUCT_DEVICE
|
اسم التصميم الصناعي. هذا أيضًا هو اسم اللوحة، ويستخدمها نظام التصميم
لتحديد موقع "BoardConfig.mk ".
|
tuna
|
PRODUCT_LOCALES
|
قائمة مفصولة بمسافات تضم رموز لغة مكونة من حرفين وأزواج رموز بلد مكونة من حرفين
ووصف العديد من الإعدادات للمستخدم، مثل لغة واجهة المستخدم والوقت والتاريخ
وتنسيق العملة. يتم استخدام اللغة الأولى المدرجة في PRODUCT_LOCALES كـ
اللغة الافتراضية للمنتج.
|
en_GB ، de_DE ، es_ES ، fr_CA
|
PRODUCT_MANUFACTURER
|
اسم الشركة المصنّعة |
acme
|
PRODUCT_MODEL
|
تمثّل هذه السمة اسم المنتج النهائي المرئي للمستخدم. | |
PRODUCT_NAME
|
اسم مرئي للمستخدم النهائي للمنتج النهائي تظهر في الإعدادات > لمحة عن. | |
PRODUCT_OTA_PUBLIC_KEYS
|
قائمة المفاتيح العامة للمنتج عبر شبكة غير سلكيّة (OTA) | |
PRODUCT_PACKAGES
|
قائمة حِزم APK والوحدات المطلوب تثبيتها | جهات اتصال التقويم |
PRODUCT_PACKAGE_OVERLAYS
|
تحدّد هذه السمة ما إذا كنت تريد استخدام الموارد التلقائية أو إضافة أيّ عناصر مركّبة خاصة بالمنتج. |
vendor/acme/overlay
|
PRODUCT_SYSTEM_PROPERTIES
|
قائمة بعمليات تخصيص خصائص النظام بالتنسيق "key=value" للملف
قسم من نظام التشغيل. يمكن ضبط خصائص النظام للأقسام الأخرى من خلال
PRODUCT_<PARTITION>_PROPERTIES كما في
PRODUCT_VENDOR_PROPERTIES لقسم المورّد. قسم متوافق
الأسماء: SYSTEM ، VENDOR ، ODM ،
SYSTEM_EXT ، وPRODUCT .
|
ضبط فلتر اللغة والمكان التلقائيَّين
استخدِم هذه المعلومات لضبط فلتر اللغة التلقائية ولغة النظام، ثم فعّل فلتر اللغة لنوع جهاز جديد.
الخصائص
ضبط كل من اللغة التلقائية وفلتر لغة النظام باستخدام نظام مخصّص المواقع:
ro.product.locale
: لضبط اللغة التلقائية تم تعيين هذا في البداية على لغة في متغيرPRODUCT_LOCALES
؛ يمكنك إلغاء هذه القيمة. (لمزيد من المعلومات، راجع جدول ضبط متغيّرات تعريف المنتج)ro.localization.locale_filter
: لضبط فلتر اللغة، باستخدام تعبير عادي يتم تطبيقه على أسماء اللغات. مثل:- الفلتر الشامل:
^(de-AT|de-DE|en|uk).*
- يسمح باللغة الألمانية فقط (النمسا وألمانيا فقط) )، وجميع إصدارات الإنجليزية من الإنجليزية والأوكرانية - الفلتر الحصري:
^(?!de-IT|es).*
- باستثناء الألمانية (خيار إيطاليا) وكل المنتجات من الإسبانية.
- الفلتر الشامل:
تفعيل فلتر اللغة
لتفعيل الفلتر، اضبط قيمة سلسلة خاصية النظام ro.localization.locale_filter
.
من خلال ضبط قيمة خاصية الفلتر واللغة التلقائية من خلال oem/oem.prop
أثناء
معايرة المصنع، يمكنك ضبط القيود بدون تطبيق الفلتر على صورة النظام.
ويمكنك التأكد من اختيار هذه الخصائص من قسم المصنّع الأصلي للجهاز من خلال إضافتها إلى
متغيّر PRODUCT_OEM_PROPERTIES
كما هو موضّح أدناه:
# Delegation for OEM customization PRODUCT_OEM_PROPERTIES += \ ro.product.locale \ ro.localization.locale_filter
ثم في مرحلة الإنتاج، تتم كتابة القيم الفعلية على oem/oem.prop
لتعكس الهدف
متطلبات المشروع. وبهذه الطريقة، يتم الاحتفاظ بالقيم الافتراضية أثناء إعادة الضبط على الإعدادات الأصلية، وبالتالي
الإعدادات الأولية تمامًا مثل الإعداد الأول للمستخدم.
تعيين ADB_VENDOR_KEYS للاتصال عبر USB
يتيح متغيّر بيئة ADB_VENDOR_KEYS
للشركات المصنّعة للأجهزة الوصول إلى
إصدارات قابلة لتصحيح الأخطاء (-userdebug و-eng، ولكن ليس -user) باستخدام adb بدون تفويض يدوي.
ينشئ adb عادةً مفتاح مصادقة فريدًا لـ RSA في كل كمبيوتر عميل، وسيرسله
بأي جهاز متصل. هذا هو مفتاح RSA المعروض في مربّع حوار تفويض أداة Adb. على سبيل المثال،
بديل، يمكنك إنشاء مفاتيح معروفة في صورة النظام ومشاركتها مع عميل adb.
يعد ذلك مفيدًا لتطوير نظام التشغيل وخاصةً في ما يتعلق بالاختبار لأنه يتجنب الحاجة إلى إجراء
التفاعل مع مربّع حوار تفويض أداة Adb.
لإنشاء مفاتيح الموردين، على شخص واحد (عادةً ما يكون مدير إصدار) إجراء ما يلي:
- يمكنك إنشاء مفتاحَي تشفير باستخدام "
adb keygen
". بالنسبة إلى أجهزة Google، تُنشئ Google نموذجًا جديدًا مفتاحَي التشفير لكل إصدار جديد من نظام التشغيل. - تحقَّق من أزواج المفاتيح في مكان ما ضمن شجرة المصدر. تخزنها Google في
vendor/google/security/adb/
، على سبيل المثال. - يمكنك ضبط متغيّر الإصدار
PRODUCT_ADB_KEYS
للإشارة إلى دليل المفاتيح. وتُجري Google ذلك من خلال إضافة ملفAndroid.mk
في الدليل الرئيسي بعنوانPRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub
، الذي في ضمان تذكُّر إنشاء مفتاحَي تشفير جديدَين لكل إصدار من إصدارات نظام التشغيل.
إليك ملف makefile الذي تستخدمه Google في الدليل حيث نخزّن أزواج المفاتيح التي تم تسجيل الوصول إليها لكل الإصدار:
PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub ifeq ($(wildcard $(PRODUCT_ADB_KEYS)),) $(warning ========================) $(warning The adb key for this release) $(warning ) $(warning $(PRODUCT_ADB_KEYS)) $(warning ) $(warning does not exist. Most likely PLATFORM_VERSION in build/core/version_defaults.mk) $(warning has changed and a new adb key needs to be generated.) $(warning ) $(warning Please run the following commands to create a new key:) $(warning ) $(warning make -j8 adb) $(warning LOGNAME=android-eng HOSTNAME=google.com adb keygen $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS))) $(warning ) $(warning and upload/review/submit the changes) $(warning ========================) $(error done) endif
لاستخدام مفاتيح المورِّد هذه، يحتاج المهندس فقط إلى إعداد ADB_VENDOR_KEYS
متغير البيئة للإشارة إلى الدليل الذي يتم تخزين أزواج المفاتيح فيه.
يؤدي هذا الإجراء إلى توجيه adb
لتجربة هذه المفاتيح الأساسية أولاً، قبل الرجوع إلى المفتاح الذي تم إنشاؤه.
مفتاح مضيف يتطلب تفويضًا يدويًّا. في حال تعذّر على adb
الاتصال بشبكة غير مصرّح بها
جهاز، ستقترح رسالة الخطأ ضبط السمة ADB_VENDOR_KEYS
إذا لم يكن كذلك
التي تم تعيينها بالفعل.