قم بإعداد الوصول عن بعد

يقدم Android 14 ميزة الوصول عن بُعد الجديدة، والتي تتيح للشركاء تنشيط Android في السيارة عن بُعد لتنفيذ مهام محددة. على سبيل المثال، لتنفيذ وضع Garage بين عشية وضحاها لتطبيق تحديثات البرامج. يلزم وجود مكونات متعددة غير تابعة لنظام Android لسير العمل الشامل. لا يحدد Android أو يوفر تنفيذًا لمكونات غير Android (هذه المسؤولية تقع على عاتقك).

لمعرفة المزيد، راجع الأقسام التالية:

بنيان

يفترض المحتوى التالي استخدام بنية العينة التالية، وهي افتراضية وقد لا تعكس البنية الفعلية. يجب على مصنعي المعدات الأصلية تكييف التنفيذ الفعلي مع بنيات المركبة والخادم الخاصة بهم.

image

الشكل 1. بنية العينة.

تتكون بنية العينة من مكونات الأجهزة التالية:

مكون الأجهزة وصف
معالج التطبيق المعالج الذي يعمل بنظام أندرويد. قد يعمل Android على الذاكرة الافتراضية (VM) (وليس على الأجهزة الفعلية) على هذا المعالج.
معالج السيارة المعالج المسؤول عن التحكم في الطاقة لمعالج التطبيق.
وحدة التحكم عن بعد (TCU) المعالج الموجود في السيارة قادر دائمًا على استقبال الرسائل عن بعد من السحابة. من المفترض أن تكون وحدة TCU قيد التشغيل أو في وضع الطاقة المنخفضة دائمًا. استخدم الرسائل البعيدة لإيقاظ وحدة TCU.
خادم الاستيقاظ خادم بعيد يعمل في السحابة ويكون مسؤولاً عن التواصل مع وحدة TCU في السيارة لإصدار أوامر التنبيه.
خادم المهام عن بعد يعمل خادم المهام عن بعد في السحابة ويتفاعل مع الأشخاص ويدير المهام عن بعد.

تتكون بنية العينة من مكونات البرنامج هذه، والتي تعمل جميعها على نظام التشغيل Android:

مكون البرنامج على أندرويد وصف
خدمة السيارات خدمة إطار عمل AAOS التي توفر واجهات برمجة التطبيقات للوصول عن بعد.
عميل المهمة عن بعد فئة Service مكتوبة من قبل البائع والتي تنفذ المهام عن بعد. يمكن لنظام Android واحد تشغيل العديد من عملاء المهام البعيدة.
الوصول عن بعد هال يجب تنفيذها للوصول عن بعد.
طبقة تجريد للتواصل بين AAOS ومكون غير Android مثل TCU.

يتم وصف مكونات البرامج غير Android أدناه:

مكون برمجي غير Android وصف
استيقظ العميل برنامج يعمل على TCU ويحافظ على اتصال طويل الأمد مع خادم التنبيه. كما أنه يحتفظ أيضًا بالاتصال مع Remote Access HAL لتسليم المهام عن بعد إلى خدمة السيارات.
تنفيذ خادم الاستيقاظ الخادم الذي يتصل بعميل التنبيه الذي يعمل على TCU. يمكن إرسال طلبات التنبيه إلى عميل التنبيه.
تنفيذ خادم المهام عن بعد الخادم الذي يدير المهام عن بعد. يتفاعل المستخدمون مع هذا الخادم لإصدار المهام عن بعد ومراقبتها.

سير العمل

يسرد هذا القسم الخطوات الموجودة في نموذج سير العمل.

عينة من سير العمل

يمكن أن يشبه سير العمل التفصيلي ما يلي:

  1. يقوم المستخدم بركن السيارة في المرآب.

  2. يسعى الشريك إلى تحديث السيارة بين عشية وضحاها عندما تكون تفاعلات السيارة غير محتملة.

  3. يرسل خادم السحابة الشريك مهمة تحديث النظام عن بعد إلى السيارة. على وجه التحديد، وحدة التحكم عن بعد (TCU).

  4. تعمل وحدة TCU في السيارة على تنشيط وحدة التحكم الإلكترونية (ECU) التي تعمل بنظام Android وتقوم خدمة OEM بتشغيل وضع Garage.

  5. يقوم Android بتشغيل وضع Garage لتنزيل التحديثات وتثبيتها من خلال Google Play.

  6. بعد تطبيق التحديث، يضع Android علامة على المهمة على أنها مكتملة وينهي الاتصال أو يصل إلى مهلة محددة.

سير العمل التفصيلي

هناك خطوتان مهمتان مطلوبتان للوصول عن بعد. الأول هو تسجيل العميل، وهو ربط مستخدم معين بعميل مهمة عن بعد محدد يعمل على مركبة معينة. والآخر هو تسليم مهمة، وهي تسليم المهمة عن بعد لمستخدم معين إلى عميل المهمة عن بعد المحدد الذي يعمل على مركبة معينة.

تسجيل عميل

لاستخدام ميزة الوصول عن بعد، يجب على المستخدم فتح تطبيق عميل المهام عن بعد مرة واحدة على الأقل وإنهاء عملية تسجيل العميل (يشير النص الغامق إلى المهام التي ينفذها AAOS):

  1. عند بدء التشغيل، تحصل خدمة السيارات على معلومات السيارة من HAL للوصول عن بعد.

  2. عند بدء التشغيل، تقوم خدمة السيارات بتشغيل كافة عملاء المهام البعيدة بناءً على مرشح النية والإذن.

  3. عند بدء عميل المهمة عن بعد، يقوم عميل المهمة عن بعد بتسجيل نفسه لدى خدمة السيارات.

  4. تقوم خدمة السيارات بإعلام عميل المهمة البعيدة بمعلومات التسجيل، بما في ذلك معرف السيارة ومعرف العميل. معرف العميل فريد ويتم تعيينه بواسطة خدمة السيارات لهذا العميل. إنه مضمون أن يكون فريدًا بين جميع عملاء المهام البعيدة على نفس السيارة.

  5. يقوم المستخدم بتسجيل الدخول إلى خادم المهام البعيدة عبر عميل المهام البعيدة ويقوم بتمكين ميزة الوصول عن بعد لهذه السيارة. تتضمن هذه الخطوة عادةً المصادقة من خلال خادم المهام البعيد.

  6. يقوم عميل المهمة عن بعد بتحميل معلومات المستخدم مع معرف السيارة ومعرف العميل إلى خادم المهام عن بعد ويطلب منه ربط المستخدم بهذا العميل المحدد وهذه السيارة المحددة.

    اختياريًا، قد تتضمن هذه الخطوة مصادقة ثنائية إضافية من المستخدم.

    يجب أن يصادق خادم المهام عن بعد على أن معرف السيارة المقدم في الطلب يطابق معرف مركبة المرسل، وهو ما يمكن القيام به من خلال تصديق المركبة.

ما لم تتم إعادة ضبط المصنع، تكون عملية تسجيل العميل مطلوبة مرة واحدة لكل مستخدم لكل مركبة. يتم تخزين معرف العميل محليًا في خدمة السيارات ويظل كما هو لنفس العميل.

image

الشكل 2. تسجيل العميل.

إلغاء تسجيل العميل

يمكن للمستخدم إلغاء ربط السيارة من حسابه إما من السيارة أو من خادم المهام البعيد:

  • على السيارة ، يمكن للمستخدمين فتح تطبيق عميل المهام البعيدة وإصدار طلب إلغاء الارتباط لإلغاء ربط هذه السيارة من حسابات المستخدمين المرتبطة بها مسبقًا.

  • على خادم المهام البعيد ، يمكن للمستخدمين تسجيل الدخول إلى حساباتهم وإلغاء ربط السيارة المرتبطة مسبقًا بهذا الحساب.

إذا قام المستخدم بإلغاء ربط السيارة من حسابه، فيجب على خادم المهام البعيد إزالة التعيين المخزن للمستخدم المحدد.

تسليم المهام

في الغيوم:

  1. يستخدم المستخدم خادم المهام عن بعد لإرسال مهمة عن بعد إلى مركبة معينة.

  2. يقوم خادم المهام عن بعد بتعيين معرف المستخدم لمعرف السيارة ومعرف العميل. يرسل بيانات المهمة ومعرف السيارة ومعرف العميل إلى خادم التنبيه.

  3. يعثر خادم التنبيه على وحدة TCU المحددة لمعرف السيارة (بافتراض أن تسجيل TCU قد تم بالفعل) ويرسل بيانات المهمة ومعرف العميل إلى وحدة TCU.

على السيارة (يشير النص الغامق إلى المهام التي يؤديها AAOS):

  1. تتلقى TCU المهام البعيدة من الخادم البعيد.

  2. إذا كان معالج التطبيق (AP) الذي يقوم بتشغيل AAOS متوقفاً عن التشغيل، فإن TCU تستخدم معالج السيارة (VP) لتنبيه AP.

  3. تتلقى خدمة السيارات المهام من TCU.

  4. تقوم خدمة السيارات بتوزيع المهام على عميل المهمة البعيدة المقابل.

  5. يتلقى عميل المهمة عن بعد المهمة وينفذها.

    ( اختياري ) يتصل عميل المهمة البعيدة بخادم المهام للحصول على مزيد من تفاصيل المهمة وتنفيذ المهمة.

  6. ( اختياري ) تقوم خدمة عميل المهام عن بعد بإبلاغ نتيجة المهمة إلى خادم المهام.

  7. يقوم عميل المهمة عن بعد بإعلام خدمة السيارات عند اكتمال المهمة.

  8. إذا لزم الأمر، تقوم خدمة السيارات باستعادة حالة طاقة السيارة.

image

الشكل 3. تسليم المهام.

اكتب عميل مهمة عن بعد

يوفر CarRemoteAccessManager واجهة برمجة التطبيقات (API) لميزات الوصول عن بعد. لمعرفة المزيد، راجع CarRemoteAccessManager . عميل المهام عن بعد هو خدمة Android تنفذ المهام عن بعد وتستخدم CarRemoteAccessManager . يتطلب هذا PERMISSION_USE_REMOTE_ACCESS و PERMISSION_CONTROL_REMOTE_ACCESS ويجب الإعلان عن مرشح غرض لـ RemoteTaskClientService مثل:

<service android:name=".remoteaccess.RemoteTaskClientService"
         android:directBootAware="true"
         android:exported="true">
    <intent-filter>
       <action android:name="android.car.remoteaccess.RemoteTaskClientService" />
    </intent-filter>
</service>

يجب على عميل المهمة عن بعد تسجيل نفسه في خدمة السيارات أثناء الإنشاء:

public final class RemoteTaskClientService extends Service {
    @Override
    public void onCreate() {
        // mCar = Car.createCar()...
        mRemoteAccessManager = (CarRemoteAccessManager)
            mcar.getCarManager(Car.CAR_REMOTE_ACCESS_SERVICE);
        if (mRemoteAccessManager == null) {
            // Remote access feature is not supported.
            return;
        }
        mRemoteAccessManager.setRemoteTaskClient(executor, mRemoteTaskClient);
    }
}

يجب أن يتجاوز الدالة onBind لإرجاع قيمة فارغة.

@Override
public IBinder onBind(Intent intent) {
    return null;
}

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

يعمل عميل المهمة عن بعد كمستخدم النظام، لذا لا يمكنه الوصول إلى أي بيانات خاصة بالمستخدم.

يوضح المثال التالي كيفية التعامل مع عمليات الاسترجاعات المسجلة:

private final class RemoteTaskClient
    implements CarRemoteAccessManager.RemoteTaskClientCallback {
    @Override
    public void onRegistrationUpdated(
        RemoteTaskClientRegistrationInfo info) {
        // Register to remote task server using info.
    }
    @Override
    public void onRemoteTaskRequested(String taskId,
        byte[] data, int remainingTimeSec) {
        // Parses the data and execute the task.
        // Report task result to remote task server.
        mRemoteAccessManager.reportRemoteTaskDone(taskId);
    }
    @Override
    public void onShutdownStarting(CompleteableRemoteTaskFuture future) {
        // Stop the executing task.
        // Clear the pending task queue.
        future.complete();
    }
}

تنفيذ البائع

تعد ميزة الوصول عن بعد اختيارية ويتم تعطيلها افتراضيًا. لتمكين الميزة، قم بإضافة RRO مثل ما يلي:

// res/xml/overlays.xml
<?xml version="1.0" encoding="utf-8"?>
<overlay>
    <item target="array/config_allowed_optional_car_features" value="@array/config_allowed_optional_car_features" />
</overlay>

// res/values/config.xml
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string-array translatable="false" name="config_allowed_optional_car_features">
        <item>car_remote_access_service</item>
    </string-array>
</resources>

// Android.bp
runtime_resource_overlay {
    name: "RemoteAccessOverlay",
    resource_dirs: ["res"],
    manifest: "AndroidManifest.xml",
    sdk_version: "current",
    product_specific: true
}

أو استخدم الأمر adb التالي في إصدار userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

المتطلبات على أندرويد

الوصول عن بعد هال

طبقة تجريد أجهزة الوصول عن بعد (HAL) هي طبقة تجريد ينفذها البائع للاتصال بين AAOS ووحدة تحكم إلكترونية أخرى (على سبيل المثال، وحدة TCU). إنه إلزامي لدعم ميزة الوصول عن بعد. ولا يلزم تنفيذه إذا لم يتم تنفيذ ميزة الوصول عن بعد.

يتم تعريف الواجهة في IRemoteAccess.aidl وتتضمن هذه الطرق:

فصل وصف
String getVehicleId() يحصل على معرف مركبة فريد يمكن التعرف عليه بواسطة خادم التنبيه.
String getWakeupServiceName() يحصل على اسم خادم التنبيه عن بعد.
String getProcessorId() يحصل على معرف معالج فريد يمكن التعرف عليه عن طريق تنبيه العميل.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

يضبط رد الاتصال ليتم استدعاؤه عند طلب مهمة بعيدة.

void clearRemoteTaskCallback() مسح رد اتصال مهمة عن بعد تم تعيينه مسبقًا.
void notifyApStateChange(in ApState state)

يكتشف ما إذا كان معالج التطبيق جاهزًا لتلقي المهام عن بعد.

يتم تعريف واجهة رد الاتصال في IRemoteTaskCallback.aid .

فصل وصف
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

رد اتصال يتم استدعاؤه عند طلب مهمة بعيدة.

راجع التنفيذ المرجعي باستخدام وحدة TCU خارجية. يستخدم التنفيذ دفق قراءة طويل الأمد لتلقي المهام عن بعد ويدعم أمر debug التالي:

dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default

مركبة هال

لدعم ميزة الوصول عن بعد، يجب أن يدعم VHAL هذه الخصائص:

فصل وصف
SHUTDOWN_REQUEST يطلب إغلاق الوحدة الرئيسية.
VEHICLE_IN_USE
  • يكتشف ما إذا كانت السيارة قيد الاستخدام.
  • بعد قيام المستخدم بفتح قفل السيارة أو عند اقتراب المستخدم من السيارة. يجب أن يكون true .
  • مدة محددة بعد قيام المستخدم بإيقاف تشغيل السيارة أو عندما يقوم المستخدم بقفل السيارة. ينبغي أن تكون false .
  • عندما يكون true ، لا يحاول AAOS إيقاف تشغيل السيارة عند اكتمال المهمة عن بعد.

لمعرفة المزيد، راجع خصائص النظام المدعومة .

الوضع الصامت

يجب دعم الوضع الصامت لميزة الوصول عن بعد حتى تتمكن السيارة من التشغيل في الوضع الصامت لتنفيذ المهام عن بعد في حالة عدم وجود مستخدم. مع الوضع الصامت، يتم تشغيل جهاز AAOS مع إيقاف تشغيل الشاشة والصوت.

يتم التحكم في الوضع الصامت من خلال ملفين Linux kernel sysfs .

فصل وصف
/sys/kernel/silent_boot/pm_silentmode_kernel_state

يمثل الوضع الصامت الحالي.

/sys/kernel/silent_boot/pm_silentmode_hw_state

يمثل إشارة الأجهزة لتعيين وضع صامت جديد.

يرسل معالج السيارة إشارة HW إلى Android SoC لتشغيل/إيقاف الوضع الصامت. تتم كتابة الإشارة (0 أو 1) إلى /sys/kernel/silent_boot/pm_silentmode_hw_state . بعد ذلك، يقوم إطار عمل AAOS بتحديث /sys/kernel/silent_boot/pm_silentmode_kernel_state وفقًا لذلك والذي يمثل الوضع الصامت الحالي. تقوم وحدات AAOS بالتحقق من /sys/kernel/silent_boot/pm_silentmode_kernel_state لمعرفة ما إذا كان النظام في الوضع الصامت أم لا.

عند تلقي مهمة عن بعد وتشغيل AAOS، يقوم معالج السيارة بتعيين الوضع الصامت ويبدأ تشغيل AAOS بحيث يتم تشغيل النظام مع إيقاف تشغيل العرض/الصوت.

مكونات غير Android على السيارة

معالج السيارة

معالج السيارة هو معالج موجود في السيارة يمكنه التحكم في طاقة معالج التطبيق الذي يعمل بنظام Android. في بنية المثال، تقوم TCU بتنشيط معالج التطبيق عبر إرسال إشارة إلى معالج السيارة.

مكونات غير Android على السيارة

يمكن لوحدة TCU الخاصة بالمركبة دائمًا استقبال الرسائل عن بعد.

يعمل عميل التنبيه على وحدة TCU لضمان اتصال طويل الأمد مع خادم التنبيه عن بعد.

يمكن لـ AAOS الذي يعمل على AP التواصل مع عميل التنبيه الذي يعمل على TCU من خلال الوصول عن بعد إلى HAL.

image

الشكل 4. TCU (العميل الاستيقاظ).

المكونات السحابية

خادم الاستيقاظ

يتواصل خادم التنبيه مع عميل التنبيه على وحدة TCU من أجل:

  • حافظ على اتصال طويل الأمد مع وحدة TCU الخاصة بالمركبة.
  • ابحث عن وحدة TCU محددة بناءً على معرف السيارة.
  • الإبلاغ عن حالة المركبة. على سبيل المثال، متصل أو غير متصل، أو آخر مرة متصل فيها بخادم المهام البعيد.

في التنفيذ الفعلي، يمكن دمج خادم التنبيه مع خادم المهام البعيد.

خادم المهام عن بعد

يقوم خادم المهام البعيدة بإدارة هذه المهام البعيدة.

  • يتفاعل المستخدم مع الخادم لبدء مهام جديدة عن بعد ومراقبة المهام عن بعد.

  • يستخدم خادم التنبيه عن بعد لتنبيه معالج التطبيق في المركبات.

  • يتفاعل مع عميل المهمة البعيدة الذي يعمل على السيارة.

  • يخزن معلومات تسجيل العميل. يؤدي هذا إلى ربط مستخدم معين بعميل مهمة عن بعد محدد على مركبة معينة.

عادةً ما تكون بيانات المهمة التي يتم إرسالها عبر خادم المهام البعيدة إلى خادم التنبيه، وإلى وحدة TCU الخاصة بالمركبة، وفي النهاية إلى عميل المهمة البعيدة، مجرد معرف مهمة. يستخدم عميل المهمة البعيدة معرف المهمة لجلب المعلومات التفصيلية من خادم المهام البعيدة.

متطلبات الخصوصية والأمان

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

إعادة ضبط المصنع ونقل الملكية

إذا أجرى المستخدم إعادة ضبط المصنع، فسيتم مسح معرف العميل المخزن في خدمة السيارات. ومع ذلك، لا يتم إعلام الخوادم (خادم المهام البعيدة وخادم التنبيه عن بعد). تحتفظ الخوادم بتعيين من معرف العميل منتهي الصلاحية الآن إلى السيارة. ونتيجة لذلك، إذا بدأ المستخدم مهمة جديدة عن بعد للمركبة، فإنه يستخدم معرف العميل منتهي الصلاحية. تم تنشيط السيارة، ولكن لا يمكن تنفيذ المهمة عن بعد نظرًا لأن عميل المهمة عن بعد لديه معرف عميل مختلف غير متطابق.

فيما يلي وصف لأحد التطبيقات المحتملة لإعادة ضبط المصنع.

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

عندما يتم نقل ملكية المركبة، يجب إجراء بعض العمليات للتأكد من أن المالك السابق لم يعد بإمكانه إصدار مهام عن بعد للمركبة. على سبيل المثال، قد يُطلب من المالك الجديد ما يلي:

  • إجراء إعادة ضبط المصنع. وهذا يضمن إعادة إنشاء معرف العميل. بعد هذه الخطوة، لا يزال بإمكان المالك السابق تنبيه السيارة، ولكن لم يعد بإمكانه تنفيذ المهام عن بعد.

  • افتح تطبيق عميل المهمة عن بعد واتبع عملية إلغاء تسجيل العميل لإلغاء ربط السيارة بحساب المالك السابق. يمكن للمالك الجديد متابعة عملية تسجيل العميل لربط السيارة بحسابه واستبدال الحساب المرتبط سابقًا.

  • يمكن للمالك الجديد استخدام عملية تسجيل العميل لربط السيارة بحسابه واستبدال الحساب المرتبط سابقًا.

اختبار عميل المهمة البعيدة

نحن نقدم الدليل الافتراضي default للوصول عن بعد لـ HAL لاختبار عملاء المهام البعيدة. يمكنك استخدام أمر debug التالي لإدخال مهمة بعيدة زائفة إلى HAL، والتي تتم إعادة توجيهها إلى عميل المهمة البعيدة الخاص بك إذا قمت بتوفير معرف العميل الصحيح. يمكنك الحصول على معرف العميل عن طريق تسجيل معلومات التسجيل في تنفيذ عميل المهمة البعيدة.

adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]