Android 14 introduces the new remote access feature, which enables partners to remotely wake up Android in a vehicle to execute specific tasks. For example, to execute Garage mode overnight to apply software updates. Multiple non-Android components are required for the end-to-end workflow. Android doesn't define or provide implementation for non-Android components (this responsibility belongs to you).
To learn more, see the following sections:
گردش کار . گردش کار بین چندین مؤلفه در معماری نمونه برای ثبت نام مشتری و تحویل وظیفه.
یک کلاینت وظیفه از راه دور بنویسید . از دسترسی از راه دور استفاده کنید و یاد بگیرید که چگونه یک کلاینت وظیفه از راه دور بنویسید.
پیادهسازی توسط فروشنده . اجزای فروشنده در معماری نمونه برای پشتیبانی از دسترسی از راه دور.
بازنشانی به تنظیمات کارخانه و انتقال مالکیت . با نحوه انجام بازنشانی به تنظیمات کارخانه و انتقال مالکیت خودرو آشنا شوید.
کلاینت دسترسی از راه دور را آزمایش کنید . یاد بگیرید که چگونه ویژگی دسترسی از راه دور را آزمایش کنید.
معماری
محتوای زیر فرض میکند که از معماری نمونه زیر استفاده شده است، که فرضی است و ممکن است منعکس کننده معماری واقعی نباشد. تولیدکنندگان اصلی تجهیزات (OEM) باید یک پیادهسازی واقعی را با معماری خودرو و سرور خود تطبیق دهند.
Figure 1. Sample architecture.
معماری نمونه شامل این اجزای سختافزاری است:
| Hardware component | توضیحات |
|---|---|
| App processor | پردازندهای که اندروید را اجرا میکند. اندروید ممکن است روی این پردازنده روی حافظه مجازی (VM) (نه روی سختافزار واقعی) اجرا شود. |
| Vehicle processor | پردازندهای که مسئول کنترل توان برای پردازندهی برنامه است. |
| Telematics control unit (TCU) | پردازندهی خودرو همیشه قادر به دریافت پیامهای از راه دور از فضای ابری است. فرض بر این است که واحد کنترل الکترونیکی (TCU) همیشه روشن یا در حالت کممصرف است. از پیامهای از راه دور برای فعال کردن واحد کنترل الکترونیکی (TCU) استفاده کنید. |
| Wake-up server | یک سرور از راه دور که در فضای ابری اجرا میشود و مسئول برقراری ارتباط با واحد کنترل فنی (TCU) در خودرو برای صدور دستورات بیدارباش است. |
| Remote task server | Remote task server runs in the cloud and interacts with people and manages remote tasks. |
The sample architecture consists of the these software components, all of which run on Android:
| On-Android software component | توضیحات |
|---|---|
| Car Service | سرویس چارچوب AAOS که APIهای دسترسی از راه دور را فراهم میکند. |
| Remote task client | یک کلاس Service نوشته شده توسط فروشنده که وظایف از راه دور را اجرا میکند. یک سیستم اندروید میتواند چندین کلاینت وظیفه از راه دور را اجرا کند. |
| Remote access HAL | Must be implemented for remote access. لایه انتزاعی برای ارتباط بین AAOS و یک جزء غیراندرویدی مانند TCU. |
اجزای نرمافزاری غیر اندروید در زیر شرح داده شدهاند:
| Non-Android software component | توضیحات |
|---|---|
| Wake-up client | نرمافزاری که روی TCU اجرا میشود و ارتباط طولانیمدتی با سرور بیدارباش برقرار میکند. همچنین ارتباطی با Remote Access HAL برای ارائه وظایف از راه دور به Car Service برقرار میکند. |
| Wake-up server implementation | Server that communicates with the wake-up client running on TCU. Can send wake-up requests to the wake-up client. |
| Remote task server implementation | سروری که وظایف از راه دور را مدیریت میکند. کاربران برای صدور و نظارت بر وظایف از راه دور با این سرور تعامل دارند. |
Workflow
این بخش مراحل یک نمونه گردش کار را فهرست میکند.
Sample workflow
A detailed workflow can resemble the following:
User parks vehicle in garage.
شریک به دنبال بهروزرسانی خودرو در طول شب است، زمانی که احتمال تداخل خودرو با خودرو کم است.
سرور ابری شریک، یک وظیفه بهروزرسانی سیستم از راه دور را به خودرو ارسال میکند. به طور خاص، واحد کنترل از راه دور (TCU).
واحد کنترل الکترونیکی (TCU) خودرو، واحد کنترل الکترونیکی اندروید (ECU) را فعال میکند و سرویس OEM حالت گاراژ را فعال میکند.
اندروید حالت گاراژ را برای دانلود و نصب بهروزرسانیها از طریق گوگل پلی اجرا میکند.
پس از اعمال بهروزرسانی، اندروید وظیفه را به عنوان «کامل» علامتگذاری میکند و یا اتصال را قطع میکند یا به یک زمانبندی مشخص میرسد.
Detailed workflow
برای دسترسی از راه دور دو مرحله مهم لازم است. مرحله اول ثبت کلاینت است که به معنای اتصال یک کاربر خاص به یک کلاینت وظیفه از راه دور خاص است که روی یک وسیله نقلیه خاص اجرا میشود. مرحله دیگر تحویل یک وظیفه است که به معنای تحویل وظیفه از راه دور برای یک کاربر خاص به کلاینت وظیفه از راه دور خاص است که روی وسیله نقلیه خاص اجرا میشود.
Register a client
To use the remote access feature, a user has to open the remote task client app at least once and finish the client registration process ( bold text indicates tasks implemented by AAOS):
هنگام روشن شدن خودرو، سرویس خودرو اطلاعات خودرو را از HAL با دسترسی از راه دور دریافت میکند.
On boot-up, Car Service launches all remote task clients based on intent-filter and permission.
به محض شروع به کار کلاینت وظیفه از راه دور، کلاینت وظیفه از راه دور خود را در سرویس خودرو ثبت میکند.
سرویس خودرو، اطلاعات ثبت نام، شامل شناسه خودرو و شناسه مشتری را به کلاینت وظیفه از راه دور اطلاع میدهد. شناسه مشتری منحصر به فرد است و توسط سرویس خودرو به این کلاینت اختصاص داده شده است. تضمین میشود که این شناسه در بین تمام کلاینتهای وظیفه از راه دور روی همان وسیله نقلیه منحصر به فرد باشد.
کاربر از طریق کلاینت وظیفه از راه دور به سرور وظیفه از راه دور وارد میشود و ویژگی دسترسی از راه دور را برای این وسیله نقلیه فعال میکند. این مرحله معمولاً شامل احراز هویت از طریق سرور وظیفه از راه دور است.
کلاینت وظیفه از راه دور، اطلاعات کاربر را به همراه شناسه وسیله نقلیه و شناسه مشتری در سرور وظیفه از راه دور بارگذاری میکند و از آن میخواهد که کاربر را با این کلاینت خاص و این وسیله نقلیه خاص مرتبط کند.
به صورت اختیاری، این مرحله ممکن است شامل احراز هویت دو مرحلهای اضافی از طرف کاربر باشد.
سرور وظیفه از راه دور باید تأیید کند که شناسه وسیله نقلیه ارائه شده در درخواست با شناسه وسیله نقلیه فرستنده مطابقت دارد، که این کار را میتوان از طریق تأیید وسیله نقلیه انجام داد.
مگر اینکه تنظیمات کارخانهای انجام شود، فرآیند ثبت نام مشتری یک بار برای هر کاربر در هر وسیله نقلیه لازم است. شناسه مشتری به صورت محلی در سرویس خودرو ذخیره میشود و برای همان مشتری ثابت میماند.

Figure 2. Register a client.
Unregister a client
کاربر میتواند ارتباط وسیله نقلیه را از حساب خود، چه از طریق وسیله نقلیه و چه از طریق سرور وظیفه از راه دور، قطع کند:
On the vehicle , users can open the remote task client app and issue an unlink request to unlink this vehicle from its previously linked user accounts.
در سرور وظیفه از راه دور ، کاربران میتوانند وارد حساب کاربری خود شوند و ارتباط یک وسیله نقلیه که قبلاً با این حساب مرتبط شده است را قطع کنند.
اگر کاربر ارتباط وسیله نقلیه را با حساب کاربری خود قطع کند، سرور وظیفه از راه دور باید نگاشت ذخیره شده برای کاربر خاص را حذف کند.
Deliver tasks
In the cloud:
یک کاربر از سرور وظیفه از راه دور برای ارسال یک وظیفه از راه دور به یک وسیله نقلیه خاص استفاده میکند.
سرور وظیفه از راه دور، شناسه کاربر را به شناسه وسیله نقلیه و شناسه مشتری نگاشت میکند. دادههای وظیفه، شناسه وسیله نقلیه و شناسه مشتری را به سرور بیدارباش ارسال میکند.
سرور بیدارباش، TCU مخصوص شناسه وسیله نقلیه را پیدا میکند (با فرض اینکه ثبت TCU قبلاً انجام شده است) و دادههای وظیفه و شناسه مشتری را به TCU ارسال میکند.
On the vehicle ( bold text indicates tasks performed by AAOS):
TCU receives remote tasks from remote server.
اگر پردازنده برنامه (AP) که AAOS را اجرا میکند خاموش باشد، TCU از پردازنده خودرو (VP) برای بیدار کردن AP استفاده میکند.
Car Service receives tasks from TCU.
سرویس خودرو وظایف را به کلاینت وظیفه از راه دور مربوطه توزیع میکند.
کلاینت وظیفه از راه دور، وظیفه را دریافت و اجرا میکند.
( اختیاری ) کلاینت وظیفه از راه دور برای جزئیات بیشتر وظیفه با سرور وظیفه تماس میگیرد و وظیفه را اجرا میکند.
( اختیاری ) سرویس کلاینت وظیفه از راه دور، نتیجه وظیفه را به سرور وظیفه گزارش میدهد.
کلاینت وظیفه از راه دور، پس از اتمام کار، به خدمات خودرو اطلاع میدهد.
در صورت لزوم، سرویس خودرو وضعیت برق خودرو را بازیابی میکند.

Figure 3. Deliver tasks.
Write a remote task client
CarRemoteAccessManager رابط برنامهنویسی کاربردی (API) را برای ویژگیهای دسترسی از راه دور فراهم میکند. برای کسب اطلاعات بیشتر، به CarRemoteAccessManager مراجعه کنید. یک کلاینت وظیفه از راه دور، یک سرویس اندروید است که وظایف از راه دور را اجرا میکند و از CarRemoteAccessManager استفاده میکند. این امر PERMISSION_USE_REMOTE_ACCESS و PERMISSION_CONTROL_REMOTE_ACCESS نیاز دارد و باید یک فیلتر intent برای 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);
}
}
برای برگرداندن مقدار null، باید تابع onBind را override کند.
@Override
public IBinder onBind(Intent intent) {
return null;
}
سرویس خودرو چرخه حیات خود را مدیریت میکند. سرویس خودرو در هنگام راهاندازی و زمانی که یک وظیفه از راه دور از راه میرسد، به این سرویس متصل میشود. سرویس خودرو پس از اتمام وظیفه، از این سرویس جدا میشود. برای کسب اطلاعات بیشتر، به مدیریت چرخه حیات یک سرویس مراجعه کنید.
کلاینت وظیفه از راه دور به عنوان کاربر سیستم اجرا میشود، بنابراین به هیچ داده خاص کاربر دسترسی ندارد.
مثال زیر نحوه مدیریت callback های ثبت شده را نشان می دهد:
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();
}
}
Vendor implementation
The remote access feature is optional and disabled by default. To enable the feature, add an RRO such as the following:
// 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
On-Android requirements
Remote access HAL
لایه انتزاعی سختافزار دسترسی از راه دور (HAL) یک لایه انتزاعی پیادهسازی شده توسط فروشنده برای ارتباط بین AAOS و یک ECU دیگر (به عنوان مثال، یک TCU) است. این لایه برای پشتیبانی از ویژگی دسترسی از راه دور اجباری است. در صورت عدم پیادهسازی ویژگی دسترسی از راه دور، نیازی به پیادهسازی آن نیست.
رابط در IRemoteAccess.aidl تعریف شده است و شامل این متدها میشود:
| کلاس | توضیحات |
|---|---|
String getVehicleId() | یک شناسه منحصر به فرد وسیله نقلیه دریافت میکند که توسط سرور بیدارباش قابل شناسایی است. |
String getWakeupServiceName() | Gets the name for the remote wake-up server. |
String getProcessorId() | یک شناسه پردازنده منحصر به فرد دریافت میکند که با بیدار کردن کلاینت قابل تشخیص است. |
void setRemoteTaskCallback(IRemoteTaskCallback callback)یک تابع فراخوانی تنظیم میکند که هنگام درخواست یک وظیفه از راه دور، فراخوانی شود. | |
void clearRemoteTaskCallback() | Clears a previously set remote task callback. |
void notifyApStateChange(in ApState state)Detects if the app processor is ready to receive remote tasks. | |
The callback interface is defined at at IRemoteTaskCallback.aid .
| کلاس | توضیحات |
|---|---|
oneway void onRemoteTaskRequested(String clientId, in byte[] data)یک تابع فراخوانی که هنگام درخواست یک وظیفه از راه دور فراخوانی میشود. |
پیادهسازی مرجع با یک TCU خارجی را ببینید. این پیادهسازی از یک جریان خواندن طولانیمدت برای دریافت وظایف از راه دور استفاده میکند و از دستور debug زیر پشتیبانی میکند:
dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default
Vehicle HAL
برای پشتیبانی از ویژگی دسترسی از راه دور، VHAL باید از این ویژگیها پشتیبانی کند:
| کلاس | توضیحات |
|---|---|
SHUTDOWN_REQUEST | Requests the head unit to be shut down. |
VEHICLE_IN_USE |
|
To learn more, see Supported System Properties .
Silent mode
برای قابلیت دسترسی از راه دور، باید حالت بیصدا پشتیبانی شود تا وسیله نقلیه بتواند در حالت بیصدا راهاندازی شود و وظایف از راه دور را در زمانی که کاربری حضور ندارد، اجرا کند. در حالت بیصدا، دستگاه AAOS با صفحه نمایش و صدای خاموش راهاندازی میشود.
حالت بیصدا از طریق دو فایل sysfs هسته لینوکس کنترل میشود.
| کلاس | توضیحات |
|---|---|
/sys/kernel/silent_boot/pm_silentmode_kernel_stateRepresents the current silent mode. | |
/sys/kernel/silent_boot/pm_silentmode_hw_stateسیگنال سختافزاری را برای تنظیم حالت بیصدای جدید نشان میدهد. |
پردازنده خودرو یک سیگنال HW به سیستم روی تراشه اندروید (Android SoC) ارسال میکند تا حالت بیصدا (Silent) را روشن/خاموش کند. این سیگنال (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 را بررسی میکنند تا بدانند که آیا سیستم در حالت بیصدا (Silent) است یا خیر.
وقتی یک وظیفه از راه دور دریافت میشود و AAOS راهاندازی میشود، پردازنده خودرو حالت بیصدا را تنظیم کرده و AAOS را راهاندازی میکند تا سیستم با نمایشگر/صدای خاموش راهاندازی شود.
On-vehicle non-Android components
Vehicle processor
پردازنده خودرو، پردازندهای در خودرو است که میتواند توان پردازنده برنامهای که اندروید را اجرا میکند، کنترل کند. در معماری مثال، TCU با ارسال سیگنال به پردازنده خودرو، پردازنده برنامه را از حالت خواب بیدار میکند.
On-vehicle non-Android components
واحد کنترل فنی خودرو (TCU) همیشه میتواند پیامهای از راه دور را دریافت کند.
کلاینت بیدارباش روی TCU اجرا میشود تا اتصال طولانیمدت با سرور بیدارباش از راه دور را تضمین کند.
AAOS که روی AP اجرا میشود میتواند از طریق HAL دسترسی از راه دور با کلاینت بیدارباش که روی TCU اجرا میشود، ارتباط برقرار کند.

Figure 4. TCU (wake-up client).
On-cloud components
Wake-up server
سرور بیدارباش با کلاینت بیدارباش در TCU ارتباط برقرار میکند تا:
- ارتباط طولانیمدت با واحد کنترل الکترونیکی خودرو (TCU) را حفظ کنید.
- Find a specific TCU based on a vehicle ID.
- گزارش وضعیت خودرو. به عنوان مثال، آنلاین یا آفلاین بودن، یا آخرین زمان آنلاین بودن به سرور وظیفه از راه دور.
در یک پیادهسازی واقعی، یک سرور بیدارباش میتواند با یک سرور وظیفه از راه دور ادغام شود.
Remote task server
The remote task server manages these remote tasks.
کاربر برای شروع وظایف جدید از راه دور و نظارت بر وظایف از راه دور با سرور تعامل میکند.
از سرور بیدارباش از راه دور برای بیدار کردن پردازنده برنامه در وسایل نقلیه استفاده میکند.
با کلاینت وظایف از راه دور که روی وسیله نقلیه در حال اجرا است، تعامل دارد.
اطلاعات ثبت نام مشتری را ذخیره میکند. این یک کاربر خاص را به یک کلاینت وظیفه از راه دور خاص در یک وسیله نقلیه خاص مرتبط میکند.
Typically the task data that is sent via the remote task server to the wake-up server, to the vehicle's TCU, and eventually to the remote task client is simply a task ID. The remote task client uses the task ID to fetch the detailed information from the remote task server.
Privacy and security requirements
| Task | وضعیت | مورد نیاز |
|---|---|---|
| TCU (wake-up client) | MUST |
|
| Wake-up server | MUST |
|
| Remote task client | MUST |
|
| Remote task server | MUST |
|
Factory reset and ownership transfer
اگر کاربری تنظیمات کارخانه را انجام دهد، شناسه کلاینت ذخیره شده در سرویس خودرو پاک میشود. با این حال، سرورها (سرور وظیفه از راه دور و سرور بیدارباش از راه دور) از این موضوع مطلع نمیشوند. سرورها نگاشتی از شناسه کلاینت منقضی شده فعلی به وسیله نقلیه را حفظ میکنند. در نتیجه، اگر کاربر یک وظیفه از راه دور جدید را برای وسیله نقلیه شروع کند، از شناسه کلاینت منقضی شده استفاده میکند. وسیله نقلیه بیدار میشود، اما وظیفه از راه دور نمیتواند اجرا شود زیرا کلاینت وظیفه از راه دور شناسه کلاینت متفاوتی دارد که با آن مطابقت ندارد.
در ادامه یکی از پیادهسازیهای ممکن برای تنظیم مجدد کارخانه شرح داده شده است.
وقتی کاربر دستور بازگشت به تنظیمات کارخانه را میدهد، فروشنده از کاربر میخواهد که به سرور وظیفه از راه دور وارد شود و اگر کاربر قبلاً خودرو را به حساب خود متصل کرده است، آن را از حساب خود جدا کند. تضمینی وجود ندارد که دستگاه در طول زمان بازگشت به تنظیمات کارخانه به شبکه دسترسی داشته باشد. بنابراین، صدور درخواست لغو اتصال در زمان بازگشت به تنظیمات کارخانه از دستگاه ممکن است امکانپذیر نباشد.
هر زمان که مالکیت یک وسیله نقلیه منتقل میشود، باید برخی عملیات انجام شود تا اطمینان حاصل شود که مالک قبلی دیگر نمیتواند از راه دور وظایفی را به وسیله نقلیه محول کند. به عنوان مثال، ممکن است از مالک جدید خواسته شود:
تنظیم مجدد کارخانه را انجام دهید. این کار تضمین میکند که شناسه کلاینت دوباره تولید شده است. پس از این مرحله، مالک قبلی هنوز میتواند وسیله نقلیه را بیدار کند، اما دیگر نمیتواند وظایف از راه دور را اجرا کند.
برنامه کلاینت وظیفه از راه دور را باز کنید و فرآیند لغو ثبت نام یک کلاینت را برای قطع ارتباط وسیله نقلیه از حساب مالک قبلی دنبال کنید. مالک جدید میتواند فرآیند ثبت نام یک کلاینت را برای اتصال وسیله نقلیه به حساب خود دنبال کند و حساب کاربری قبلی را جایگزین کند.
The new owner can use the Register a client process to link the vehicle to their account and replace the previously linked account.
Test the remote task client
ما دایرکتوری default HAL دسترسی از راه دور مرجع را برای آزمایش کلاینتهای وظیفه از راه دور ارائه میدهیم. میتوانید از دستور debug زیر برای تزریق یک وظیفه از راه دور جعلی به HAL استفاده کنید که در صورت ارائه شناسه کلاینت صحیح، به کلاینت وظیفه از راه دور شما ارسال میشود. میتوانید شناسه کلاینت را با وارد کردن اطلاعات ثبتنام در پیادهسازی کلاینت وظیفه از راه دور خود دریافت کنید.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]