اندروید 14 ویژگی جدید دسترسی از راه دور را معرفی میکند که به شرکا اجازه میدهد تا از راه دور اندروید را در خودرو برای انجام وظایف خاص بیدار کنند. به عنوان مثال، برای اجرای یک شبه حالت Garage برای اعمال به روز رسانی نرم افزار. چندین مؤلفه غیر اندرویدی برای گردش کار انتها به انتها مورد نیاز است. اندروید برای اجزای غیر اندرویدی تعریف یا پیاده سازی نمی کند (این مسئولیت متعلق به شماست).
برای کسب اطلاعات بیشتر به بخش های زیر مراجعه کنید:
گردش کار گردش کار بین چندین مؤلفه در معماری نمونه برای ثبت مشتری و تحویل کار.
یک کلاینت کار راه دور بنویسید . از دسترسی از راه دور استفاده کنید و یاد بگیرید که چگونه یک سرویس گیرنده کار از راه دور بنویسید.
پیاده سازی فروشنده . اجزای فروشنده در معماری نمونه برای پشتیبانی از دسترسی از راه دور.
تنظیم مجدد کارخانه و انتقال مالکیت . نحوه مدیریت بازنشانی کارخانه و انتقال مالکیت خودرو را بیاموزید.
کلاینت دسترسی از راه دور را تست کنید . با نحوه آزمایش ویژگی دسترسی از راه دور آشنا شوید.
معماری
محتوای زیر فرض میکند که از معماری نمونه زیر استفاده شده است، که فرضی است و ممکن است معماری واقعی را منعکس نکند. OEM ها باید یک پیاده سازی واقعی را با معماری خودرو و سرور خود تطبیق دهند.
شکل 1. نمونه معماری.
معماری نمونه از این اجزای سخت افزاری تشکیل شده است:
جزء سخت افزاری | توضیحات |
---|---|
پردازنده برنامه | پردازنده ای که اندروید را اجرا می کند. اندروید ممکن است روی حافظه مجازی (VM) (نه روی سخت افزار واقعی) در این پردازنده اجرا شود. |
پردازنده خودرو | پردازنده مسئول کنترل قدرت پردازنده برنامه است. |
واحد کنترل از راه دور (TCU) | پردازنده در خودرو همیشه قادر به دریافت پیام های راه دور از ابر است. فرض بر این است که TCU همیشه روشن یا در حالت کم مصرف است. از پیام های راه دور برای بیدار کردن TCU استفاده کنید. |
سرور بیداری | یک سرور راه دور که در فضای ابری اجرا می شود و وظیفه برقراری ارتباط با TCU در خودرو برای صدور دستورات بیدار شدن را بر عهده دارد. |
سرور وظیفه از راه دور | سرور وظیفه از راه دور در فضای ابری اجرا می شود و با افراد در تعامل است و وظایف از راه دور را مدیریت می کند. |
معماری نمونه شامل این مؤلفه های نرم افزاری است که همگی در اندروید اجرا می شوند:
جزء نرم افزار در اندروید | توضیحات |
---|---|
سرویس خودرو | سرویس چارچوب AAOS که API های دسترسی از راه دور را فراهم می کند. |
مشتری کار از راه دور | یک کلاس Service نوشته شده توسط فروشنده که وظایف راه دور را اجرا می کند. یک سیستم اندرویدی می تواند چندین کلاینت وظیفه از راه دور را اجرا کند. |
دسترسی از راه دور HAL | برای دسترسی از راه دور باید پیاده سازی شود. لایه انتزاعی برای ارتباط بین AAOS و یک جزء غیر اندرویدی مانند TCU. |
اجزای نرم افزار غیر اندروید در زیر توضیح داده شده است:
جزء نرم افزاری غیر اندرویدی | توضیحات |
---|---|
مشتری بیدار | نرم افزاری که روی TCU اجرا می شود و ارتباط طولانی مدت با سرور بیدار نگه می دارد. همچنین ارتباطی با Remote Access HAL برقرار می کند تا وظایف از راه دور را به Car Service ارائه دهد. |
اجرای سرور بیداری | سروری که با wake-up client در حال اجرا در TCU ارتباط برقرار می کند. می تواند درخواست های بیدار شدن را برای مشتری بیدار ارسال کند. |
اجرای سرور وظیفه از راه دور | سروری که وظایف از راه دور را مدیریت می کند. کاربران برای صدور و نظارت بر وظایف راه دور با این سرور تعامل دارند. |
گردش کار
این بخش مراحل یک نمونه گردش کار را فهرست می کند.
نمونه گردش کار
یک گردش کار دقیق می تواند شبیه موارد زیر باشد:
کاربر خودرو را در گاراژ پارک می کند.
شریک به دنبال به روز رسانی وسیله نقلیه یک شبه در زمانی که تعاملات وسیله نقلیه بعید است.
سرور ابری شریک یک کار راه دور سیستم به روز رسانی را به وسیله نقلیه ارسال می کند. به طور خاص، واحد کنترل از راه دور (TCU).
TCU خودرو واحد کنترل الکترونیکی اندروید (ECU) را بیدار می کند و یک سرویس OEM حالت Garage را فعال می کند.
اندروید حالت Garage را برای دانلود و نصب بهروزرسانیها از طریق Google Play اجرا میکند.
پس از اعمال بهروزرسانی، اندروید کار را به عنوان کامل علامتگذاری میکند و یا اتصال را پایان میدهد یا به یک بازه زمانی مشخص میرسد.
گردش کار مفصل
دو مرحله مهم برای دسترسی از راه دور لازم است. اولین مورد، ثبت مشتری است، یعنی پیوند دادن یک کاربر خاص به یک کلاینت کار از راه دور خاص که روی یک وسیله نقلیه خاص اجرا می شود. دیگری ارائه یک وظیفه است، که عبارت است از تحویل کار راه دور برای یک کاربر خاص به مشتری وظیفه از راه دور خاص که روی وسیله نقلیه خاص اجرا می شود.
مشتری ثبت کنید
برای استفاده از ویژگی دسترسی از راه دور، کاربر باید برنامه کلاینت کار راه دور را حداقل یک بار باز کند و فرآیند ثبت نام کلاینت را تمام کند (متن پررنگ نشان دهنده وظایف اجرا شده توسط AAOS است):
هنگام راهاندازی، Car Service اطلاعات خودرو را از HAL دسترسی از راه دور دریافت میکند.
در هنگام راهاندازی، Car Service همه سرویسگیرندگان وظایف از راه دور را بر اساس فیلتر قصد و مجوز راهاندازی میکند.
پس از راهاندازی سرویس گیرنده کار از راه دور، مشتری وظیفه از راه دور خود را در خدمات خودرو ثبت میکند.
Car Service اطلاعات ثبت نام از جمله شناسه وسیله نقلیه و شناسه مشتری را به مشتری کار راه دور اطلاع می دهد. شناسه مشتری منحصر به فرد است و توسط Car Service به این مشتری اختصاص داده شده است. تضمین شده است که در بین تمام مشتریان کار از راه دور در یک وسیله نقلیه منحصر به فرد است.
کاربر از طریق سرویس گیرنده وظیفه راه دور وارد سرور وظیفه راه دور می شود و ویژگی دسترسی از راه دور را برای این وسیله نقلیه فعال می کند. این مرحله معمولاً شامل احراز هویت از طریق سرور وظیفه راه دور است.
مشتری وظیفه از راه دور اطلاعات کاربر را به همراه شناسه وسیله نقلیه و شناسه مشتری در سرور وظیفه راه دور آپلود می کند و از آن می خواهد که کاربر را با این مشتری خاص و این وسیله نقلیه خاص پیوند دهد.
به صورت اختیاری، این مرحله ممکن است شامل احراز هویت دو مرحله ای اضافی از کاربر باشد.
سرور وظیفه از راه دور باید تأیید کند که شناسه وسیله نقلیه ارائه شده در درخواست با شناسه وسیله نقلیه فرستنده مطابقت دارد، که می تواند از طریق تأیید خودرو انجام شود.
مگر اینکه بازنشانی کارخانه انجام شود، فرآیند ثبت مشتری یک بار برای هر کاربر در هر وسیله نقلیه مورد نیاز است. شناسه مشتری به صورت محلی در Car Service ذخیره می شود و برای همان مشتری یکسان می ماند.
شکل 2. ثبت نام مشتری.
لغو ثبت نام مشتری
کاربر می تواند وسیله نقلیه را از حساب خود یا از وسیله نقلیه یا از سرور وظیفه راه دور جدا کند:
در خودرو ، کاربران میتوانند برنامه سرویس گیرنده کار از راه دور را باز کنند و یک درخواست لغو پیوند برای لغو پیوند این وسیله نقلیه از حسابهای کاربری قبلاً مرتبطشده آن صادر کنند.
در سرور کار راه دور ، کاربران می توانند به حساب خود وارد شوند و یک وسیله نقلیه قبلاً پیوند داده شده را از این حساب جدا کنند.
اگر کاربر وسیله نقلیه را از حساب خود جدا کند، سرور وظیفه از راه دور باید نقشه ذخیره شده برای کاربر خاص را حذف کند.
وظایف را تحویل دهید
در ابر:
یک کاربر از سرور وظیفه از راه دور برای ارسال یک کار راه دور به یک وسیله نقلیه خاص استفاده می کند.
سرور وظیفه از راه دور شناسه کاربر را به شناسه خودرو و شناسه مشتری نگاشت می کند. داده های وظیفه، شناسه خودرو و شناسه مشتری را به سرور بیداری ارسال می کند.
سرور بیداری TCU خاص را برای شناسه خودرو پیدا می کند (با فرض اینکه ثبت TCU قبلا انجام شده باشد) و داده های وظیفه و شناسه مشتری را به TCU ارسال می کند.
در خودرو (متن پررنگ نشان دهنده وظایف انجام شده توسط AAOS است):
TCU وظایف راه دور را از سرور راه دور دریافت می کند.
اگر پردازنده برنامه (AP) در حال اجرا AAOS خاموش باشد، TCU از پردازنده خودرو (VP) برای بیدار کردن AP استفاده می کند.
Car Service وظایف را از TCU دریافت می کند.
Car Service وظایف را به مشتری وظیفه از راه دور مربوطه توزیع می کند.
کلاینت کار از راه دور وظیفه را دریافت و اجرا می کند.
( اختیاری ) سرویس گیرنده کار از راه دور برای جزئیات بیشتر کار با سرور وظیفه تماس می گیرد و کار را اجرا می کند.
( اختیاری ) سرویس مشتری کار از راه دور نتیجه کار را به سرور وظیفه گزارش می دهد.
سرویس گیرنده کار از راه دور پس از اتمام کار به خدمات خودرو اطلاع می دهد.
در صورت لزوم، Car Service وضعیت برق خودرو را بازیابی می کند.
شکل 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);
}
}
برای برگرداندن null باید تابع onBind را لغو کند.
@Override
public IBinder onBind(Intent intent) {
return null;
}
Car Service چرخه عمر خود را مدیریت می کند. Car Service در هنگام راهاندازی و زمانی که کار راه دور میرسد به این سرویس متصل میشود. وقتی کار کامل شد، Car Service به این سرویس باز میشود. برای کسب اطلاعات بیشتر، به مدیریت چرخه عمر یک سرویس مراجعه کنید.
سرویس گیرنده وظیفه از راه دور به عنوان کاربر سیستم اجرا می شود بنابراین به هیچ داده خاص کاربر دسترسی ندارد.
مثال زیر نحوه رسیدگی به تماس های ثبت شده را نشان می دهد:
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
لایه انتزاعی سخت افزاری دسترسی از راه دور (HAL) یک لایه انتزاعی پیاده سازی شده توسط فروشنده برای ارتباط بین AAOS و ECU دیگر (به عنوان مثال، یک 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
HAL وسیله نقلیه
برای پشتیبانی از ویژگی دسترسی از راه دور، VHAL باید این ویژگی ها را پشتیبانی کند:
کلاس | توضیحات |
---|---|
SHUTDOWN_REQUEST | درخواست می کند که واحد اصلی خاموش شود. |
VEHICLE_IN_USE |
|
برای کسب اطلاعات بیشتر، به ویژگی های سیستم پشتیبانی شده مراجعه کنید.
حالت بی صدا
حالت بیصدا باید برای ویژگی دسترسی از راه دور پشتیبانی شود تا خودرو بتواند در حالت بیصدا راهاندازی شود تا در صورت عدم حضور کاربر، وظایف از راه دور را انجام دهد. با حالت بی صدا، دستگاه AAOS با نمایشگر و صدا خاموش بوت می شود.
حالت خاموش از طریق دو فایل 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
را بر این اساس بهروزرسانی میکند که نشاندهنده حالت Silent فعلی است. ماژولهای AAOS /sys/kernel/silent_boot/pm_silentmode_kernel_state
را بررسی میکنند تا بدانند آیا سیستم در حالت Silent است یا خیر.
وقتی یک کار راه دور دریافت میشود و AAOS راهاندازی میشود، پردازنده خودرو حالت بیصدا را تنظیم میکند و AAOS را راهاندازی میکند تا سیستم با نمایشگر/صوت خاموش بوت شود.
اجزای غیر اندرویدی روی خودرو
پردازنده خودرو
پردازنده خودرو، پردازندهای در خودرو است که میتواند قدرت پردازنده برنامههای دارای اندروید را کنترل کند. در معماری مثال، TCU پردازنده برنامه را از طریق ارسال سیگنال به پردازنده خودرو بیدار می کند.
اجزای غیر اندرویدی روی خودرو
TCU خودرو همیشه می تواند پیام های راه دور را دریافت کند.
سرویس گیرنده بیداری روی TCU اجرا می شود تا از اتصال طولانی مدت با سرور بیدار از راه دور اطمینان حاصل کند.
AAOS در حال اجرا بر روی AP می تواند از طریق HAL دسترسی از راه دور با سرویس گیرنده بیداری که روی TCU در حال اجرا است ارتباط برقرار کند.
شکل 4. TCU (مشتری بیدار).
اجزای روی ابر
سرور بیداری
سرور بیدار با سرویس گیرنده بیدار شدن در TCU ارتباط برقرار می کند تا:
- ارتباط طولانی مدت با TCU خودرو را حفظ کنید.
- یک TCU خاص بر اساس شناسه خودرو پیدا کنید.
- گزارش وضعیت خودرو به عنوان مثال، آنلاین یا آفلاین، یا آخرین زمان آنلاین بودن به سرور وظیفه از راه دور.
در یک پیاده سازی واقعی، یک سرور بیداری را می توان با یک سرور وظیفه از راه دور ادغام کرد.
سرور وظیفه از راه دور
سرور وظیفه از راه دور این وظایف راه دور را مدیریت می کند.
کاربر برای شروع کارهای راه دور جدید و نظارت بر کارهای راه دور با سرور تعامل دارد.
از سرور بیداری از راه دور برای بیدار کردن پردازنده برنامه در وسایل نقلیه استفاده می کند.
با سرویس گیرنده وظیفه از راه دور در حال اجرا در وسیله نقلیه تعامل دارد.
اطلاعات ثبت نام مشتری را ذخیره می کند. این یک کاربر خاص را به یک مشتری کار از راه دور خاص در یک وسیله نقلیه خاص مرتبط می کند.
معمولاً دادههای وظیفهای که از طریق سرور وظیفه راه دور به سرور بیداری، به TCU خودرو و در نهایت به سرویس گیرنده وظیفه از راه دور ارسال میشود، صرفاً یک شناسه وظیفه است. سرویس گیرنده کار راه دور از شناسه وظیفه برای واکشی اطلاعات دقیق از سرور کار راه دور استفاده می کند.
الزامات حفظ حریم خصوصی و امنیت
وظیفه | وضعیت | مورد نیاز |
---|---|---|
TCU (مشتری بیداری) | باید |
|
سرور بیداری | باید |
|
مشتری کار از راه دور | باید |
|
سرور وظیفه از راه دور | باید |
|
تنظیم مجدد کارخانه و انتقال مالکیت
اگر کاربر بازنشانی کارخانه ای انجام دهد، شناسه مشتری ذخیره شده در Car Service پاک می شود. با این حال، سرورها (سرور وظیفه از راه دور و سرور بیدار از راه دور) مطلع نیستند. سرورها نقشه ای را از شناسه مشتری منقضی شده به وسیله نقلیه حفظ می کنند. در نتیجه، اگر کاربر کار راه دور جدیدی را برای وسیله نقلیه شروع کند، از شناسه مشتری منقضی شده استفاده می کند. وسیله نقلیه بیدار می شود، اما کار راه دور نمی تواند اجرا شود زیرا سرویس گیرنده کار راه دور دارای شناسه مشتری متفاوتی است که مطابقت ندارد.
در زیر یکی از پیادهسازیهای ممکن برای بازنشانی کارخانهای توضیح داده شده است.
هنگامی که یک کاربر بازنشانی کارخانه را صادر می کند، فروشنده از کاربر می خواهد که به سرور وظیفه راه دور وارد شود و اگر کاربر قبلاً وسیله نقلیه را متصل کرده است، ارتباط وسیله نقلیه را از حساب خود جدا کند. دستگاه تضمینی برای دسترسی به شبکه در زمان بازنشانی کارخانه ای ندارد. بنابراین، صدور درخواست لغو پیوند در زمان تنظیم مجدد کارخانه از دستگاه ممکن است امکان پذیر نباشد.
هر زمان که مالکیت وسیله نقلیه منتقل می شود، باید برخی از عملیات انجام شود تا اطمینان حاصل شود که مالک قبلی دیگر نمی تواند وظایف راه دور را برای خودرو صادر کند. برای مثال، ممکن است از مالک جدید خواسته شود:
تنظیم مجدد کارخانه را انجام دهید. این تضمین می کند که شناسه مشتری دوباره تولید می شود. پس از این مرحله، مالک قبلی همچنان می تواند وسیله نقلیه را بیدار کند، اما دیگر نمی تواند کارهای از راه دور را انجام دهد.
برنامه مشتری کار از راه دور را باز کنید و فرآیند Unregister a Client را دنبال کنید تا ارتباط وسیله نقلیه با حساب مالک قبلی لغو شود. مالک جدید میتواند فرآیند ثبت مشتری را دنبال کند تا وسیله نقلیه را به حساب خود پیوند دهد و حساب پیوند قبلی را جایگزین کند.
مالک جدید می تواند از فرآیند ثبت نام مشتری برای پیوند دادن وسیله نقلیه به حساب خود و جایگزینی حساب پیوند شده قبلی استفاده کند.
کلاینت کار راه دور را تست کنید
ما دایرکتوری default
دسترسی از راه دور مرجع HAL را برای آزمایش کلاینت های کار راه دور ارائه می کنیم. میتوانید از دستور debug
زیر برای تزریق یک کار از راه دور جعلی به HAL استفاده کنید، که در صورت ارائه شناسه کلاینت صحیح به سرویس گیرنده وظیفه راه دور شما ارسال میشود. شما می توانید شناسه مشتری را با ثبت اطلاعات ثبت نام در پیاده سازی مشتری کار راه دور خود دریافت کنید.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]