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:
কর্মপ্রবাহ । নমুনা আর্কিটেকচারে ক্লায়েন্ট নিবন্ধন এবং টাস্ক ডেলিভারির জন্য একাধিক উপাদানের মধ্যেকার কর্মপ্রবাহ।
একটি রিমোট টাস্ক ক্লায়েন্ট লিখুন । রিমোট অ্যাক্সেস ব্যবহার করুন এবং শিখুন কীভাবে একটি রিমোট টাস্ক ক্লায়েন্ট লিখতে হয়।
ভেন্ডর বাস্তবায়ন । রিমোট অ্যাক্সেস সমর্থন করার জন্য নমুনা আর্কিটেকচারে ভেন্ডরের উপাদানসমূহ।
ফ্যাক্টরি রিসেট এবং মালিকানা হস্তান্তর । ফ্যাক্টরি রিসেট এবং গাড়ির মালিকানা হস্তান্তর কীভাবে করতে হয় তা জানুন।
Test the remote access client . Learn how to test the remote access feature.
Architecture
The following content presumes the following sample architecture is used, which is hypothetical and might not reflect actual architecture. OEMs should adapt an actual implementation to their vehicle and server architectures.
Figure 1. Sample architecture.
নমুনা স্থাপত্যটি নিম্নলিখিত হার্ডওয়্যার উপাদানগুলো নিয়ে গঠিত:
| Hardware component | বর্ণনা |
|---|---|
| App processor | যে প্রসেসরে অ্যান্ড্রয়েড চলে। এই প্রসেসরে অ্যান্ড্রয়েড ভার্চুয়াল মেমোরিতে (VM) চলতে পারে (প্রকৃত হার্ডওয়্যারে নয়)। |
| Vehicle processor | অ্যাপ প্রসেসরের শক্তি নিয়ন্ত্রণের জন্য দায়ী প্রসেসর। |
| Telematics control unit (TCU) | গাড়ির প্রসেসর ক্লাউড থেকে রিমোট মেসেজ গ্রহণ করতে সর্বদা সক্ষম। টিসিইউ (TCU) সর্বদা চালু অথবা লো-পাওয়ার মোডে থাকে বলে ধরে নেওয়া হয়। টিসিইউ-কে জাগিয়ে তুলতে রিমোট মেসেজ ব্যবহার করুন। |
| Wake-up server | একটি রিমোট সার্ভার যা ক্লাউডে চলে এবং গাড়ির TCU-এর সাথে যোগাযোগ করে ওয়েক-আপ কমান্ড জারি করার দায়িত্বে থাকে। |
| Remote task server | রিমোট টাস্ক সার্ভার ক্লাউডে চলে এবং ব্যবহারকারীদের সাথে যোগাযোগ ও দূরবর্তী কাজগুলো পরিচালনা করে। |
নমুনা আর্কিটেকচারটি এই সফ্টওয়্যার উপাদানগুলো নিয়ে গঠিত, যেগুলোর সবগুলোই অ্যান্ড্রয়েডে চলে:
| On-Android software component | বর্ণনা |
|---|---|
| Car Service | AAOS framework service that provides remote access APIs. |
| Remote task client | ভেন্ডর কর্তৃক লিখিত একটি Service ক্লাস যা রিমোট টাস্ক সম্পাদন করে। একটি অ্যান্ড্রয়েড সিস্টেমে একাধিক রিমোট টাস্ক ক্লায়েন্ট চালানো যেতে পারে। |
| Remote access HAL | Must be implemented for remote access. Abstraction layer for communication between AAOS and a non-Android component such as the TCU. |
নন-অ্যান্ড্রয়েড সফ্টওয়্যার উপাদানসমূহ নিচে বর্ণনা করা হলো:
| Non-Android software component | বর্ণনা |
|---|---|
| Wake-up client | TCU-তে চলমান সফটওয়্যার যা ওয়েক-আপ সার্ভারের সাথে একটি দীর্ঘস্থায়ী সংযোগ বজায় রাখে। এটি কার সার্ভিসে দূরবর্তী কাজ সরবরাহ করার জন্য রিমোট অ্যাক্সেস HAL-এর সাথেও সংযোগ বজায় রাখে। |
| Wake-up server implementation | সার্ভারটি TCU-তে চলমান ওয়েক-আপ ক্লায়েন্টের সাথে যোগাযোগ করে। এটি ওয়েক-আপ ক্লায়েন্টের কাছে ওয়েক-আপ অনুরোধ পাঠাতে পারে। |
| Remote task server implementation | যে সার্ভারটি দূরবর্তী কাজগুলো পরিচালনা করে। ব্যবহারকারীরা দূরবর্তী কাজ শুরু করতে এবং পর্যবেক্ষণ করতে এই সার্ভারের সাথে যোগাযোগ করে। |
কর্মপ্রবাহ
এই বিভাগে একটি নমুনা কর্মপ্রবাহের ধাপগুলো তালিকাভুক্ত করা হয়েছে।
Sample workflow
A detailed workflow can resemble the following:
User parks vehicle in garage.
অংশীদার রাতারাতি গাড়িটি আপডেট করতে চায়, যখন গাড়ির সাথে যোগাযোগের সম্ভাবনা কম থাকে।
পার্টনার ক্লাউড সার্ভার গাড়িটিতে একটি সিস্টেম আপডেট করার রিমোট টাস্ক পাঠায়। বিশেষত, টেলিম্যাটিক কন্ট্রোল ইউনিটে (TCU)।
গাড়ির TCU অ্যান্ড্রয়েড ইলেকট্রনিক কন্ট্রোল ইউনিট (ECU)-কে সক্রিয় করে এবং একটি OEM সার্ভিস গ্যারেজ মোড চালু করে।
অ্যান্ড্রয়েড গুগল প্লে-এর মাধ্যমে আপডেট ডাউনলোড ও ইনস্টল করার জন্য গ্যারেজ মোড চালু করে।
আপডেটটি প্রয়োগ করার পর, অ্যান্ড্রয়েড কাজটি সম্পন্ন হিসেবে চিহ্নিত করে এবং হয় সংযোগটি বিচ্ছিন্ন করে দেয় অথবা একটি নির্দিষ্ট সময়সীমায় পৌঁছে যায়।
Detailed workflow
There are two important steps required for remote access. The first is to register the client, which is to link a specific user to a specific remote task client running on a specific vehicle. The other is deliver a task, which is to deliver the remote task for a specific user to the specific remote task client running on the specific vehicle.
Register a client
রিমোট অ্যাক্সেস ফিচারটি ব্যবহার করার জন্য, একজন ব্যবহারকারীকে রিমোট টাস্ক ক্লায়েন্ট অ্যাপটি অন্তত একবার খুলতে হবে এবং ক্লায়েন্ট রেজিস্ট্রেশন প্রক্রিয়াটি সম্পন্ন করতে হবে ( গাঢ় অক্ষরে লেখা কাজগুলো AAOS দ্বারা বাস্তবায়িত):
গাড়ি চালু করার সময়, কার সার্ভিস রিমোট অ্যাক্সেস HAL থেকে গাড়ির তথ্য সংগ্রহ করে।
বুট-আপের সময়, কার সার্ভিস ইন্টেন্ট-ফিল্টার এবং অনুমতির উপর ভিত্তি করে সমস্ত রিমোট টাস্ক ক্লায়েন্ট চালু করে।
রিমোট টাস্ক ক্লায়েন্ট চালু হওয়ার সাথে সাথে, এটি কার সার্ভিসে নিজেকে নিবন্ধিত করে।
Car Service notifies the remote task client about registration information, including vehicle ID and client ID. The client ID is unique and assigned by Car Service to this client. It's guaranteed to be unique among all remote task clients on the same vehicle.
User logs in to the remote task server via the remote task client and enables the remote access feature for this vehicle. This step typically involves authentication through the remote task server.
The remote task client uploads the user's information along with vehicle ID and client ID to the remote task server and asks it to link the user with this specific client and this specific vehicle.
ঐচ্ছিকভাবে, এই ধাপে ব্যবহারকারীর পক্ষ থেকে অতিরিক্ত দ্বি-স্তরীয় প্রমাণীকরণের প্রয়োজন হতে পারে।
রিমোট টাস্ক সার্ভারকে অবশ্যই যাচাই করতে হবে যে অনুরোধে প্রদত্ত গাড়ির আইডি প্রেরকের গাড়ির আইডির সাথে মেলে কিনা, যা গাড়ির সত্যায়নের মাধ্যমে করা যেতে পারে।
Unless a factory reset takes place, the client registration process is required once per user per vehicle. The client ID is stored locally in the Car Service and stays the same for the same client.

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-তে পাঠিয়ে দেয়।
গাড়িতে ( গাঢ় অক্ষরে AAOS দ্বারা সম্পাদিত কাজগুলি নির্দেশ করা হয়েছে):
TCU receives remote tasks from remote server.
If the app processor (AP) running AAOS is off, TCU uses the vehicle processor (VP) to wake up the AP.
Car Service receives tasks from TCU.
কার সার্ভিস সংশ্লিষ্ট রিমোট টাস্ক ক্লায়েন্টের কাছে কাজগুলো বন্টন করে।
রিমোট টাস্ক ক্লায়েন্ট টাস্কটি গ্রহণ করে এবং সম্পাদন করে।
( Optional ) Remote task client contacts task server for more task detail and executes the task.
( ঐচ্ছিক ) রিমোট টাস্ক ক্লায়েন্ট সার্ভিস টাস্ক সার্ভারে টাস্কের ফলাফল রিপোর্ট করে।
কাজটি সম্পন্ন হলে রিমোট টাস্ক ক্লায়েন্ট কার সার্ভিসকে অবহিত করে।
প্রয়োজন হলে, কার সার্ভিস গাড়িটির পাওয়ার অবস্থা পুনরুদ্ধার করে।

Figure 3. Deliver tasks.
Write a remote task client
CarRemoteAccessManager provides the API for remote access features. To learn more, see CarRemoteAccessManager . A remote task client is an Android service that executes remote tasks and uses CarRemoteAccessManager . This requires PERMISSION_USE_REMOTE_ACCESS and PERMISSION_CONTROL_REMOTE_ACCESS and must declare an intent filter for RemoteTaskClientService such as:
<service android:name=".remoteaccess.RemoteTaskClientService"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="android.car.remoteaccess.RemoteTaskClientService" />
</intent-filter>
</service>
A remote task client should register itself to the Car Service during create:
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);
}
}
It must override the onBind function to return null.
@Override
public IBinder onBind(Intent intent) {
return null;
}
Car Service manages its life cycle. Car Service binds to this service during startup and when a remote task arrives. Car Service unbinds to this service when the task is complete. To learn more, see Managing the lifecycle of a 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();
}
}
Vendor implementation
রিমোট অ্যাক্সেস ফিচারটি ঐচ্ছিক এবং ডিফল্টরূপে নিষ্ক্রিয় থাকে। ফিচারটি সক্রিয় করতে, নিম্নলিখিতের মতো একটি 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
}
অথবা userdebug/eng বিল্ডে নিম্নলিখিত adb কমান্ডটি ব্যবহার করুন:
adb shell cmd car_service enable-feature car_remote_access_service
On-Android requirements
Remote access HAL
The remote access hardware abstraction layer (HAL) is a vendor-implemented abstraction layer for communication between AAOS and another ECU (for example, a TCU). It is mandatory for supporting the remote access feature. It doesn't need to be implemented if the remote access feature isn't implemented.
The interface is defined at IRemoteAccess.aidl and includes these methods:
| Class | বর্ণনা |
|---|---|
String getVehicleId() | Gets a unique vehicle ID that can be recognized by the wake-up server. |
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)অ্যাপ প্রসেসরটি রিমোট টাস্ক গ্রহণ করার জন্য প্রস্তুত কিনা তা শনাক্ত করে। | |
কলব্যাক ইন্টারফেসটি IRemoteTaskCallback.aid এ সংজ্ঞায়িত করা হয়েছে।
| Class | বর্ণনা |
|---|---|
oneway void onRemoteTaskRequested(String clientId, in byte[] data)একটি কলব্যাক যা কোনো রিমোট টাস্কের অনুরোধ করা হলে কল করা হয়। |
See the reference implementation with an external TCU. The implementation uses a long-live read stream to receive remote tasks and supports the following debug command:
dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default
Vehicle HAL
রিমোট অ্যাক্সেস ফিচারটি সমর্থন করার জন্য, VHAL-কে অবশ্যই এই প্রোপার্টিগুলো সমর্থন করতে হবে:
| Class | বর্ণনা |
|---|---|
SHUTDOWN_REQUEST | Requests the head unit to be shut down. |
VEHICLE_IN_USE |
|
To learn more, see Supported System Properties .
নীরব মোড
Silent mode must be supported for the remote access feature so that the vehicle can boot up in silent mode to execute remote tasks when no user is present. With silent mode, AAOS device boots up with display and audio turned off.
সাইলেন্ট মোড দুটি লিনাক্স কার্নেল sysfs ফাইলের মাধ্যমে নিয়ন্ত্রিত হয়।
| Class | বর্ণনা |
|---|---|
/sys/kernel/silent_boot/pm_silentmode_kernel_stateRepresents the current silent mode. | |
/sys/kernel/silent_boot/pm_silentmode_hw_stateএটি নতুন সাইলেন্ট মোড সেট করার হার্ডওয়্যার সংকেতকে বোঝায়। |
The vehicle processor sends a HW signal to Android SoC to turn on/off Silent mode. The signal (0 or 1)is written to /sys/kernel/silent_boot/pm_silentmode_hw_state . Then, AAOS framework updates /sys/kernel/silent_boot/pm_silentmode_kernel_state accordingly which represents the current Silent mode. AAOS modules checks /sys/kernel/silent_boot/pm_silentmode_kernel_state to know whether the system is in Silent mode or not.
যখন কোনো রিমোট টাস্ক গৃহীত হয় এবং AAOS বুট আপ হয়, তখন ভেহিকল প্রসেসর সাইলেন্ট মোড সেট করে এবং AAOS চালু করে, যাতে সিস্টেমটি ডিসপ্লে/অডিও বন্ধ থাকা অবস্থায় বুট হয়।
On-vehicle non-Android components
Vehicle processor
The vehicle processor is a processor in the vehicle that can control the power for the app processor running Android. In the example architecture, TCU wakes up the app processor via sending a signal to the vehicle processor.
On-vehicle non-Android components
গাড়ির TCU সর্বদা দূরবর্তী বার্তা গ্রহণ করতে পারে।
রিমোট ওয়েক-আপ সার্ভারের সাথে একটি দীর্ঘস্থায়ী সংযোগ নিশ্চিত করার জন্য ওয়েক-আপ ক্লায়েন্টটি TCU-তে চলে।
AP-তে চলমান AAOS, রিমোট অ্যাক্সেস 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
রিমোট টাস্ক সার্ভার এই রিমোট টাস্কগুলো পরিচালনা করে।
ব্যবহারকারী নতুন রিমোট টাস্ক শুরু করতে এবং রিমোট টাস্ক নিরীক্ষণ করতে সার্ভারের সাথে যোগাযোগ করে।
যানবাহনগুলিতে থাকা অ্যাপ প্রসেসরকে সক্রিয় করতে রিমোট ওয়েক-আপ সার্ভার ব্যবহার করে।
গাড়িতে চলমান রিমোট টাস্ক ক্লায়েন্টের সাথে যোগাযোগ করে।
Stores client registration information. This associates a specific user to a specific remote task client on a specific vehicle.
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
| কাজ | অবস্থা | প্রয়োজনীয়তা |
|---|---|---|
| TCU (wake-up client) | অবশ্যই |
|
| Wake-up server | অবশ্যই |
|
| Remote task client | অবশ্যই |
|
| Remote task server | অবশ্যই |
|
Factory reset and ownership transfer
If a user performs a factory reset, the client ID stored in the Car Service is wiped. However, the servers (remote task server and remote wakeup server) are not informed. The servers retain a mapping from the now expired client ID to the vehicle. As a result, if the user starts a new remote task for the vehicle, it uses the expired client ID. The vehicle is awakened, but the remote task cannot be executed since the remote task client has a different client ID that doesn't match.
নিচে ফ্যাক্টরি রিসেটের একটি সম্ভাব্য বাস্তবায়ন বর্ণনা করা হলো।
When a user issues a factory reset, the vendor prompts the user to log in to the remote task server and unlink the vehicle from their account if the user has previously linked the vehicle. The device isn't guaranteed to have network access during the time of factory reset. Therefore, issuing the unlink request at factory reset time from the device might not be feasible.
Whenever a vehicle's ownership is transferred, some operations should be performed to ensure the previous owner can no longer issue remote tasks to the vehicle. For example, the new owner may be asked to:
ফ্যাক্টরি রিসেট করুন। এটি ক্লায়েন্ট আইডি পুনরায় তৈরি হওয়া নিশ্চিত করে। এই পদক্ষেপের পরে, পূর্ববর্তী মালিক গাড়িটি চালু করতে পারলেও, আর রিমোট টাস্ক সম্পাদন করতে পারবেন না।
Open the remote task client app and follow the Unregister a client process to unlink the vehicle from the previous owner's account. The new owner can follow the register a client process to link the vehicle to their account and replace the previously linked account.
নতুন মালিক 'গ্রাহক নিবন্ধন' প্রক্রিয়াটি ব্যবহার করে গাড়িটিকে তার অ্যাকাউন্টের সাথে সংযুক্ত করতে এবং পূর্বে সংযুক্ত অ্যাকাউন্টটি প্রতিস্থাপন করতে পারবেন।
Test the remote task client
We provide the reference remote access HAL default directory to test remote task clients. You can use the following debug command to inject a fake remote task to the HAL, which is forwarded to your remote task client if you provide the correct client ID. You can get the client ID by logging the registration information in your remote task client implementation.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]