اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
دمج التطبيقات غير المجمّعة
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تُعد التطبيقات التي تتضمّن "أداة الاتصال" و"الوسائط" و"مكتبة واجهة المستخدم في السيارة" و"الرسائل القصيرة"
تطبيقات غير مجمّعة (أي أنّها غير مجمّعة مع نظام التشغيل Android). وتشمل هذه التطبيقات منطق تلقّي البيانات من تطبيق الهاتف المصاحب وتجربة المستخدم على جانب السيارة، بما في ذلك إعدادات الربط وتسجيل الميزات. تعمل حِزم APK
المُنشأة من رمز غير مجمّع مع العديد من إصدارات النظام الأساسي.
الاطّلاع على الرمز
للاطّلاع على الرمز غير المجمّع، شغِّل ما يلي:
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq -j4
لمزيد من المعلومات عن العمل مع رمز المصدر في AOSP، اطّلِع على مقالة إعداد Repo
Client.
إنشاء الرمز البرمجي
يمكنك إنشاء الرمز البرمجي باستخدام "استوديو Android" أو من سطر الأوامر.
استوديو Android
لإنشاء الرمز البرمجي في "استوديو Android"، اتّبِع الخطوات التالية:
في "استوديو Android"، استورِد ملف التصميم التالي:
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
تأكَّد من ضبط إصدار Gradle JDK على 11 أو إصدار أحدث:
الشكل 1: اضبط Gradle JDK على الإصدار 11 في Android Studio.
سطر الأوامر
لإنشاء الرمز من سطر الأوامر:
اضبط موقع حزمة SDK لنظام التشغيل Android باستخدام إحدى الطريقتَين التاليتَين:
أنشئ
packages/apps/Car/libs/aaos-apps-gradle-project/local.properties
ثم
اضبط السمة sdk.dir
التي يحتوي عليها. يمكن لخدمة Android Studio تنفيذ ذلك
تلقائيًا عند فتح مشروع. على سبيل المثال، يمكنك استخدام
sdk.dir=/Users/MY-USERNAME/Library/Android/sdk
.
أو
اضبط متغيّر البيئة ANDROID_SDK_ROOT
باستخدام المسار إلى
حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
افتح موجه أوامر أو نافذة واجهة مستخدِم.
الانتقال إلى packages/apps/Car/libs/aaos-apps-gradle-project
.
شغِّل الأمر التالي:
./gradlew assemble
الحد الأدنى لمستويات واجهة برمجة التطبيقات المطلوبة
يعمل كل تطبيق غير مجمّع على منصات Android التي تعمل بالإصدار نفسه من
minSdkVersion
أو إصدار أحدث منه. يسرد الجدول التالي أدنى إصدار لواجهة برمجة التطبيقات متوافق مع كل تطبيق:
التطبيق |
الحد الأدنى لمستوى واجهة برمجة التطبيقات |
التقويم |
29 |
مكتبة واجهة المستخدم في السيارة |
29 |
CompanionDevice |
29 |
Dialer |
31 |
الوسائط |
30 |
Messenger (الرسائل القصيرة) |
30 |
مضيف AOSP |
29 |
دمج إصدار مُعدّ مسبقًا في صورة نظام
إذا كان إصدار نظام Android متوافقًا مع التطبيق (راجِع الجدول في
القسم السابق)، يمكنك إضافة حزمة APK إلى صورة النظام. ومع ذلك، تختلف
خطوات الدمج بين إصدارات نظام Android الأساسي.
الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث
لا يتضمّن الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث رمز المصدر للتطبيقات غير المجمّعة، ولكن
يمكنك تضمين حزمة APK مُنشأة مسبقًا في إصدار النظام الأساسي لحالات الاستخدام، مثل اختبار امتثال CDD
أو توفير التطبيقات المزوّدة بإذن وصول متميز. لتحديد حزمة APK، استخدِم قاعدة
android_app_import
Soong، كما هو موضّح في المثال التالي:
android_app_import {
name: "CarMediaApp",
apk: "CarMediaApp.apk",
privileged: true,
certificate: "platform", // Media must be signed by the platform
required: ["allowed_privapp_com.android.car.media"],
}
الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم
يتضمّن الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم رمز المصدر للتطبيقات غير المجمّعة، ولكن لا يزال بإمكانك تحديد حزمة APK مُسبقة الإنشاء لتضمينها. بما أنّ الإعداد التلقائي في Soong هو منح الأهمية أولاً لرمز المصدر على الإصدار المُعدّ مسبقًا، من الضروري ضبط العلامة
prefer
على true
داخل قاعدة android_app_import
، كما هو موضّح في المثال التالي:
android_app_import {
name: "CarDialerApp",
apk: "CarDialerApp.apk",
privileged: true,
presigned: true, // Dialer can have its own signature
required: ["allowed_privapp_com.android.car.dialer"],
overrides: ["Dialer"],
prefer: true, // The prebuilt replaces a source target with the same name
}
تفاصيل التطبيقات غير المجمّعة
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-06-12 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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-06-12 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Integrate unbundled apps\n\nApps that include Dialer, Media, Car UI Library, and SMS are considered\n*unbundled apps* (that is, they are unbundled from the Android platform). Such\napps include the logic for receiving data from the phone companion app and UX on\nthe car side, including settings for association and feature enrollment. APKs\nbuilt from unbundled code work with several versions of the platform.\n\nCheck out the code\n------------------\n\nTo check out the unbundled code, run the following: \n\n repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master\n repo sync -cq -j4\n\nTo learn more about working with AOSP source code, see [Initialize the Repo\nClient](/setup/download#initialize_the_repo_client).\n\nBuild the code\n--------------\n\nYou can build the code using Android Studio or from the command line.\n\n### Android Studio\n\nTo build the code in Android Studio:\n\n1. In Android Studio, import the following build file:\n\n packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle\n\n2. Ensure the Gradle JDK is set to Version 11 or higher:\n\n **Figure 1.** Set Gradle JDK to Version 11 in Android Studio.\n\n### Command line\n\nTo build the code from the command line:\n\n1. Set the Android SDK location using one of the following methods:\n\n - Create\n `packages/apps/Car/libs/aaos-apps-gradle-project/local.properties` and\n then set the `sdk.dir` property it contains. Android Studio can do this\n automatically when opening a project. For example, use\n `sdk.dir=/Users/MY-USERNAME/Library/Android/sdk`.\n\n *or*\n - Set the `ANDROID_SDK_ROOT` environment variable with the path to the\n Android SDK.\n\n2. Open a command prompt or a shell window.\n\n3. Go to `packages/apps/Car/libs/aaos-apps-gradle-project`.\n\n4. Run the following command:\n\n ./gradlew assemble\n\nMinimum required API levels\n---------------------------\n\nEach unbundled app works on Android platforms with a version equal to or greater\nthan its\n[`minSdkVersion`](https://developer.android.com/studio/publish/versioning). The\nfollowing table lists the minimum API version supported by each app:\n\n| App | Minimum API level |\n|---------------------------------------------|-------------------|\n| Calendar | 29 |\n| Car UI library | 29 |\n| CompanionDevice | 29 |\n| Dialer | 31 |\n| Media | 30 |\n| Messenger (SMS) | 30 |\n| [AOSP Host](/docs/automotive/hmi/aosp_host) | 29 |\n\nIntegrate a prebuild into a system image\n----------------------------------------\n\nIf the Android platform version is supported by the app (see the table in the\nprevious section), you can add the APK to the system image. However, the\nintegration steps differ between Android platform versions.\n\n### Android 13 and higher\n\nAndroid 13 and higher doesn't include source code for unbundled apps, but you\ncan include a prebuilt APK in the platform build for use cases such as CDD\ncompliance testing or provisioning privileged apps. To specify the APK, use the\n[`android_app_import`](https://ci.android.com/builds/latest/branches/aosp-build-tools/targets/linux/view/soong_build.html)\nSoong rule, as shown in the following example: \n\n android_app_import {\n name: \"CarMediaApp\",\n apk: \"CarMediaApp.apk\",\n privileged: true,\n certificate: \"platform\", // Media must be signed by the platform\n required: [\"allowed_privapp_com.android.car.media\"],\n }\n\n### Android 12 and lower\n\nAndroid 12 and lower includes source code for unbundled apps, but you can still\nspecify a prebuilt APK to include. Because the Soong default is to give\nprecedence to the source code over a prebuilt, it's necessary to set the\n`prefer` flag to `true` inside the `android_app_import` rule, as shown in the\nfollowing example: \n\n android_app_import {\n name: \"CarDialerApp\",\n apk: \"CarDialerApp.apk\",\n privileged: true,\n presigned: true, // Dialer can have its own signature\n required: [\"allowed_privapp_com.android.car.dialer\"],\n overrides: [\"Dialer\"],\n prefer: true, // The prebuilt replaces a source target with the same name\n }\n\nUnbundled app details\n---------------------\n\n| App/Distribution | Privileged unbundled *system signed* | Privileged unbundled *non-system signed* | Unbundled *don't need to be on system partition* |\n|------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|------------------------------------------|--------------------------------------------------|\n| App - [Calendar](https://android.googlesource.com/platform/packages/apps/Car/Calendar/+/refs/heads/mirror-car-apps-aosp-release) | | | X |\n| App - [CompanionDeviceSupport](https://android.googlesource.com/platform/packages/apps/Car/CompanionDeviceSupport/+log/refs/heads/main) | | X | |\n| App - [Dialer](https://android.googlesource.com/platform/packages/apps/Car/Dialer/+/refs/heads/mirror-car-apps-aosp-release) | | X | |\n| App - AOSP Host | | X | |\n| App - [Media](https://android.googlesource.com/platform/packages/apps/Car/Media/+/refs/heads/mirror-car-apps-aosp-release) | X | | |\n| App - [Messenger (SMS)](https://android.googlesource.com/platform/packages/apps/Car/Messenger/+/refs/heads/mirror-car-apps-aosp-release) | | X | |\n| Update distribution | OTA | OTA or Google Play | OTA or Google Play |"]]