Android 14 ra mắt tính năng truy cập từ xa mới, cho phép các đối tác đánh thức Android từ xa trên xe để thực thi công việc cụ thể. Ví dụ: để thực thi Chế độ gara qua đêm để áp dụng phần mềm bản cập nhật. Cần có nhiều thành phần không phải Android trong toàn bộ thiết bị quy trình làm việc. Android không xác định hoặc cung cấp cách triển khai cho nền tảng không phải Android (trách nhiệm này thuộc về bạn).
Để tìm hiểu thêm, hãy xem các phần sau:
Quy trình công việc. Quy trình làm việc giữa nhiều thành phần trong mẫu cấu trúc đăng ký ứng dụng khách và phân phối tác vụ.
Viết một ứng dụng tác vụ từ xa. Sử dụng quyền truy cập từ xa và tìm hiểu cách viết ứng dụng tác vụ từ xa.
Triển khai qua nhà cung cấp. Thành phần nhà cung cấp trong cấu trúc mẫu để hỗ trợ truy cập từ xa.
Đặt lại về trạng thái ban đầu và chuyển quyền sở hữu. Tìm hiểu cách xử lý đặt lại về trạng thái ban đầu và chuyển quyền sở hữu xe.
Kiểm thử ứng dụng truy cập từ xa. Tìm hiểu cách kiểm thử quyền truy cập từ xa của chúng tôi.
Kiến trúc
Nội dung sau đây cho rằng cấu trúc mẫu sau được sử dụng, chỉ là giả định và có thể không phản ánh cấu trúc thực tế. OEM phải điều chỉnh cách triển khai thực tế cho kiến trúc xe và máy chủ của họ.
Hình 1. Cấu trúc mẫu.
Cấu trúc mẫu bao gồm các thành phần phần cứng sau:
Thành phần phần cứng | Mô tả |
---|---|
Đơn vị xử lý ứng dụng | Bộ xử lý chạy Android. Android có thể chạy trên bộ nhớ ảo (VM) (không phải trên phần cứng thực tế) trên bộ xử lý này. |
Bộ xử lý xe | Bộ xử lý chịu trách nhiệm kiểm soát nguồn điện của ứng dụng bộ xử lý. |
Bộ điều khiển viễn thông (TCU) | Bộ xử lý trong xe luôn có thể nhận thông báo từ xa từ đám mây. TCU được cho là luôn bật hoặc ở chế độ tiết kiệm pin. Sử dụng tin nhắn từ xa để đánh thức TCU. |
Máy chủ bật lên | Một máy chủ từ xa chạy trên đám mây và chịu trách nhiệm về giao tiếp với TCU trong xe để đưa ra lệnh đánh thức. |
Máy chủ tác vụ từ xa | Máy chủ tác vụ từ xa chạy trên đám mây và tương tác với mọi người cũng như quản lý các nhiệm vụ từ xa. |
Cấu trúc mẫu bao gồm các thành phần phần mềm sau, tất cả chạy trên Android:
Thành phần phần mềm trên Android | Mô tả |
---|---|
Dịch vụ xe hơi | Dịch vụ khung AAOS cung cấp API truy cập từ xa. |
Ứng dụng tác vụ từ xa | Do nhà cung cấp viết
Service
lớp này thực thi các tác vụ từ xa. Một hệ thống Android có thể chạy nhiều
ứng dụng tác vụ từ xa. |
Lớp trừu tượng phần cứng (HAL) truy cập từ xa | Phải được triển khai để truy cập từ xa. Lớp trừu tượng dùng để giao tiếp giữa AAOS và một lớp không phải Android như TCU. |
Các thành phần không phải phần mềm Android được mô tả bên dưới:
Thành phần phần mềm không phải Android | Mô tả |
---|---|
Thiết bị khách đã khởi động | Phần mềm chạy trên TCU duy trì kết nối lâu dài với máy chủ đánh thức. Lớp này cũng duy trì kết nối với Lớp trừu tượng phần cứng (HAL) cho truy cập từ xa để cung cấp các nhiệm vụ từ xa cho Dịch vụ ô tô. |
Triển khai máy chủ khởi động | Máy chủ giao tiếp với ứng dụng đánh thức chạy trên TCU. Lon gửi yêu cầu đánh thức đến ứng dụng đánh thức. |
Triển khai máy chủ tác vụ từ xa | Máy chủ quản lý tác vụ từ xa. Người dùng tương tác với máy chủ này để sự cố và giám sát các nhiệm vụ từ xa. |
Luồng công việc
Phần này liệt kê các bước trong quy trình làm việc mẫu.
Quy trình làm việc mẫu
Quy trình làm việc chi tiết có thể có dạng như sau:
Người dùng đỗ xe trong gara.
Đối tác tìm cách cập nhật xe qua đêm khi có hoạt động tương tác với xe là không thể.
Máy chủ đám mây của đối tác sẽ gửi một nhiệm vụ từ xa của hệ thống cập nhật đến xe. Cụ thể là bộ điều khiển viễn thông (TCU).
TCU trên xe sẽ đánh thức bộ điều khiển điện tử Android (ECU) và dịch vụ của OEM kích hoạt chế độ Nhà để xe.
Android chạy chế độ Gara để tải xuống và cài đặt các bản cập nhật thông qua Google Play.
Sau khi áp dụng bản cập nhật, Android sẽ đánh dấu tác vụ đó là hoàn thành và kết thúc kết nối hoặc đạt đến thời gian chờ được chỉ định.
Quy trình làm việc chi tiết
Bạn cần thực hiện 2 bước quan trọng để truy cập từ xa. Đầu tiên là đăng ký máy khách, tức là liên kết một người dùng cụ thể với một điều khiển từ xa ứng dụng nhiệm vụ chạy trên một chiếc xe cụ thể. Hai là phân phối một nhiệm vụ là phân phối nhiệm vụ từ xa cho một người dùng cụ thể đến một nhiệm vụ từ xa cụ thể khách hàng chạy trên một chiếc xe cụ thể.
Đăng ký một khách hàng
Để sử dụng tính năng truy cập từ xa, người dùng phải mở ứng dụng tác vụ từ xa ứng dụng của bạn ít nhất một lần và hoàn tất quy trình đăng ký của khách hàng (văn bản in đậm cho biết các tác vụ được AAOS triển khai):
Khi khởi động, Dịch vụ ô tô nhận thông tin về xe từ quyền truy cập từ xa Lớp trừu tượng phần cứng (HAL).
Khi khởi động, Dịch vụ ô tô khởi chạy tất cả ứng dụng tác vụ từ xa dựa trên bộ lọc ý định và quyền.
Khi ứng dụng tác vụ từ xa khởi động, ứng dụng tác vụ từ xa sẽ tự đăng ký bằng Dịch vụ xe hơi.
Car Service thông báo cho ứng dụng tác vụ từ xa về việc đăng ký bao gồm cả mã xe và mã ứng dụng khách. Mã ứng dụng khách là duy nhất và được Dịch vụ ô tô chỉ định cho ứng dụng khách này. Đảm bảo phải là duy nhất trong số tất cả ứng dụng làm nhiệm vụ từ xa trên cùng một chiếc xe.
Người dùng đăng nhập vào máy chủ tác vụ từ xa thông qua ứng dụng tác vụ từ xa và bật tính năng truy cập từ xa cho xe này. Bước này thường bao gồm việc xác thực thông qua máy chủ tác vụ từ xa.
Ứng dụng làm nhiệm vụ từ xa sẽ tải thông tin của người dùng cùng với mã xe lên và mã ứng dụng khách đến máy chủ tác vụ từ xa và yêu cầu máy chủ này liên kết người dùng với khách hàng cụ thể này và chiếc xe cụ thể này.
Bước này có thể bao gồm xác thực thêm hai yếu tố (không bắt buộc) từ người dùng.
Máy chủ nhiệm vụ từ xa phải xác thực rằng mã nhận dạng xe được cung cấp trong yêu cầu này khớp với mã xe của người gửi. Bạn có thể thực hiện việc này thông qua chứng thực phương tiện.
Nếu không đặt lại về trạng thái ban đầu, bạn phải thực hiện quy trình đăng ký ứng dụng một lần cho mỗi người dùng trên mỗi chiếc xe. Mã ứng dụng khách được lưu trữ cục bộ trong Dịch vụ ô tô và giữ nguyên cho cùng một ứng dụng khách.
Hình 2. Đăng ký một ứng dụng.
Huỷ đăng ký một ứng dụng
Người dùng có thể huỷ liên kết xe khỏi tài khoản của họ khỏi xe hoặc từ máy chủ tác vụ từ xa:
Trên xe, người dùng có thể mở ứng dụng thực hiện tác vụ từ xa và xử lý vấn đề yêu cầu huỷ liên kết để huỷ liên kết xe này khỏi người dùng đã liên kết trước đó tài khoản.
Trên máy chủ tác vụ từ xa, người dùng có thể đăng nhập vào tài khoản của họ rồi huỷ liên kết một chiếc xe từng được liên kết từ tài khoản này.
Nếu người dùng huỷ liên kết xe khỏi tài khoản của họ, thì máy chủ nhiệm vụ từ xa phải xoá ánh xạ đã lưu trữ cho người dùng cụ thể.
Phân phối việc cần làm
Trên đám mây:
Người dùng sử dụng máy chủ tác vụ từ xa để gửi một tác vụ từ xa đến một chiếc xe.
Máy chủ tác vụ từ xa sẽ liên kết mã nhận dạng người dùng với mã xe và mã ứng dụng khách. Nó gửi dữ liệu công việc, mã xe và mã ứng dụng khách đến máy chủ đánh thức.
Máy chủ đánh thức sẽ tìm TCU cụ thể cho mã nhận dạng xe (giả sử Đăng ký TCU đã hoàn tất) và gửi dữ liệu công việc cùng ID ứng dụng khách tới TCU.
Trên xe (văn bản in đậm thể hiện những việc do AAOS thực hiện):
TCU nhận tác vụ từ xa từ máy chủ từ xa.
Nếu bộ xử lý ứng dụng (AP) chạy AAOS đang tắt, thì TCU sẽ sử dụng bộ xử lý xe (Phó chủ tịch) để đánh thức AP.
Dịch vụ ô tô nhận nhiệm vụ từ TCU.
Car Service phân phối các nhiệm vụ đến ứng dụng nhiệm vụ từ xa tương ứng.
Ứng dụng của nhiệm vụ từ xa nhận và thực thi nhiệm vụ đó.
(Không bắt buộc) Máy khách của nhiệm vụ từ xa liên hệ với máy chủ nhiệm vụ để biết thêm thông tin về việc cần làm và thực thi tác vụ.
(Không bắt buộc) Dịch vụ ứng dụng của nhiệm vụ từ xa báo cáo kết quả nhiệm vụ cho máy chủ nhiệm vụ.
Ứng dụng tác vụ từ xa sẽ thông báo cho Dịch vụ ô tô khi tác vụ hoàn tất.
Nếu cần, Dịch vụ ô tô sẽ khôi phục trạng thái nguồn điện của xe.
Hình 3. Phân phối việc cần làm.
Viết một ứng dụng tác vụ từ xa
CarRemoteAccessManager
cung cấp API cho các tính năng truy cập từ xa. Để tìm hiểu
thêm, xem
CarRemoteAccessManager.
Ứng dụng nhiệm vụ từ xa là một dịch vụ Android thực thi các nhiệm vụ từ xa và sử dụng
CarRemoteAccessManager
. Để thực hiện thao tác này, bạn phải sử dụng PERMISSION_USE_REMOTE_ACCESS
và
PERMISSION_CONTROL_REMOTE_ACCESS
và phải khai báo bộ lọc ý định cho
RemoteTaskClientService
như:
<service android:name=".remoteaccess.RemoteTaskClientService"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="android.car.remoteaccess.RemoteTaskClientService" />
</intent-filter>
</service>
Một ứng dụng tác vụ từ xa phải tự đăng ký với Dịch vụ dành cho ô tô trong quá trình tạo:
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);
}
}
Hàm này phải ghi đè hàm onBind để trả về giá trị rỗng.
@Override
public IBinder onBind(Intent intent) {
return null;
}
Dịch vụ ô tô quản lý vòng đời của mình. Dịch vụ ô tô liên kết với dịch vụ này trong khoảng thời gian khởi động và khi có tác vụ từ xa đến. Dịch vụ ô tô huỷ liên kết với dịch vụ này khi công việc đã hoàn thành. Để tìm hiểu thêm, hãy xem Quản lý vòng đời của một dịch vụ.
Ứng dụng tác vụ từ xa chạy với tư cách là người dùng hệ thống nên không có quyền truy cập vào bất kỳ dữ liệu cụ thể nào của người dùng.
Ví dụ sau đây cho thấy cách xử lý các lệnh gọi lại đã đăng ký:
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();
}
}
Triển khai nhà cung cấp
Tính năng truy cập từ xa là không bắt buộc và bị tắt theo mặc định. Để bật hãy thêm RRO như sau:
// 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
}
Bạn cũng có thể sử dụng lệnh adb sau đây trên bản dựng userdebug/eng:
adb shell cmd car_service enable-feature car_remote_access_service
Yêu cầu trên Android
Lớp trừu tượng phần cứng (HAL) truy cập từ xa
Lớp trừu tượng phần cứng truy cập từ xa (HAL) do nhà cung cấp triển khai tầng trừu tượng để giao tiếp giữa AAOS và một ECU khác (ví dụ: TCU). Đây là yêu cầu bắt buộc để hỗ trợ tính năng truy cập từ xa. Không cần sẽ được triển khai nếu tính năng truy cập từ xa không được triển khai.
Giao diện được xác định tại IRemoteAccess.aidl và bao gồm các phương thức sau:
Lớp | Mô tả |
---|---|
String getVehicleId() |
Nhận một mã xe duy nhất mà tính năng đánh thức có thể nhận dạng máy chủ. |
String getWakeupServiceName() |
Lấy tên của máy chủ đánh thức từ xa. |
String getProcessorId() |
Nhận một mã nhận dạng đơn vị xử lý duy nhất có thể được nhận dạng bằng cách đánh thức khách hàng. |
void setRemoteTaskCallback(IRemoteTaskCallback callback)
Đặt một lệnh gọi lại sẽ được gọi khi một tác vụ từ xa được yêu cầu. |
|
void clearRemoteTaskCallback() |
Xoá lệnh gọi lại tác vụ từ xa đã đặt trước đó. |
void notifyApStateChange(in ApState state)
Phát hiện xem bộ xử lý ứng dụng có sẵn sàng nhận tác vụ từ xa hay không. |
Giao diện gọi lại được xác định tại
IRemoteTaskCallback.aid
.
Lớp | Mô tả |
---|---|
oneway void onRemoteTaskRequested(String clientId, in byte[] data)
Lệnh gọi lại được gọi khi có yêu cầu thực hiện một tác vụ từ xa. |
Xem
cách triển khai tệp đối chiếu
bằng TCU bên ngoài. Quá trình triển khai sử dụng luồng đọc trực tiếp trong thời gian dài để
nhận tác vụ từ xa và hỗ trợ lệnh debug
sau:
dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default
Lớp trừu tượng phần cứng (HAL) cho xe
Để hỗ trợ tính năng truy cập từ xa, VHAL phải hỗ trợ các thuộc tính sau:
Lớp | Mô tả |
---|---|
SHUTDOWN_REQUEST |
Yêu cầu tắt đầu phát trung tâm. |
VEHICLE_IN_USE |
|
Để tìm hiểu thêm, hãy xem Các thuộc tính hệ thống được hỗ trợ.
Chế độ im lặng
Bạn phải hỗ trợ chế độ im lặng cho tính năng truy cập từ xa để xe có thể có thể khởi động ở chế độ im lặng để thực thi các tác vụ từ xa khi không có người dùng. Bằng chế độ im lặng, thiết bị AAOS khởi động khi màn hình và âm thanh tắt.
Chế độ im lặng được kiểm soát thông qua 2 tệp sysfs
cho nhân hệ điều hành Linux.
Lớp | Mô tả |
---|---|
/sys/kernel/silent_boot/pm_silentmode_kernel_state
Đại diện cho chế độ im lặng hiện tại. |
|
/sys/kernel/silent_boot/pm_silentmode_hw_state
Biểu thị tín hiệu phần cứng để đặt chế độ im lặng mới. |
Bộ xử lý xe gửi tín hiệu HW đến Android SoC để bật/tắt chế độ Im lặng
. Tín hiệu (0 hoặc 1) được ghi vào
/sys/kernel/silent_boot/pm_silentmode_hw_state
. Sau đó, khung AAOS sẽ cập nhật
/sys/kernel/silent_boot/pm_silentmode_kernel_state
theo đó
biểu thị chế độ Im lặng hiện tại. Kiểm tra mô-đun AAOS
/sys/kernel/silent_boot/pm_silentmode_kernel_state
để biết liệu hệ thống
có đang ở chế độ Im lặng hay không.
Khi nhận được một nhiệm vụ từ xa và AAOS khởi động, bộ xử lý xe sẽ thiết lập Chế độ im lặng và khởi động AAOS để hệ thống khởi động khi màn hình/âm thanh tắt.
Các thành phần không phải Android trên xe
Bộ xử lý xe
Bộ xử lý xe là một bộ xử lý trong xe có thể kiểm soát nguồn điện cho bộ xử lý ứng dụng chạy Android. Trong cấu trúc mẫu, TCU đánh thức bộ xử lý ứng dụng bằng cách gửi tín hiệu đến xe bộ xử lý.
Các thành phần không phải Android trên xe
TCU trên xe luôn có thể nhận thông báo từ xa.
Ứng dụng đánh thức chạy trên TCU để đảm bảo kết nối lâu dài với máy chủ đánh thức từ xa.
AAOS chạy trên AP có thể giao tiếp với ứng dụng đánh thức đang chạy trên TCU thông qua HAL (Lớp trừu tượng phần cứng) truy cập từ xa.
Hình 4. TCU (ứng dụng đánh thức).
Thành phần trên đám mây
Máy chủ bật lên
Máy chủ đánh thức giao tiếp với ứng dụng đánh thức trên TCU để:
- Duy trì kết nối lâu dài với TCU của xe.
- Tìm một TCU cụ thể dựa trên mã xe.
- Báo cáo trạng thái của xe. Ví dụ: trực tuyến hoặc ngoại tuyến hay cuối cùng thời gian trực tuyến vào máy chủ tác vụ từ xa.
Trong quá trình triển khai thực tế, bạn có thể hợp nhất máy chủ đánh thức với một điều khiển từ xa máy chủ tác vụ.
Máy chủ tác vụ từ xa
Máy chủ tác vụ từ xa quản lý những tác vụ từ xa này.
Người dùng tương tác với máy chủ để bắt đầu tác vụ mới từ xa và để giám sát nhiệm vụ từ xa.
Sử dụng máy chủ đánh thức từ xa để đánh thức bộ xử lý ứng dụng những chiếc xe.
Tương tác với ứng dụng làm nhiệm vụ từ xa đang chạy trên xe.
Lưu trữ thông tin đăng ký của khách hàng. Thao tác này liên kết một người dùng cụ thể cho một ứng dụng khách làm nhiệm vụ từ xa trên một chiếc xe cụ thể.
Thông thường, dữ liệu công việc được gửi qua máy chủ tác vụ từ xa đến trình đánh thức máy chủ, đến TCU của xe và cuối cùng đến ứng dụng tác vụ từ xa chỉ là mã công việc. Ứng dụng tác vụ từ xa sử dụng mã công việc để tìm nạp thông tin chi tiết thông tin từ máy chủ tác vụ từ xa.
Yêu cầu về quyền riêng tư và bảo mật
Tác vụ | Điều kiện | Yêu cầu |
---|---|---|
TCU (ứng dụng đánh thức) | PHẢI |
|
Máy chủ bật lên | PHẢI |
|
Ứng dụng tác vụ từ xa | PHẢI |
|
Máy chủ tác vụ từ xa | PHẢI |
|
Đặt lại về trạng thái ban đầu và chuyển quyền sở hữu
Nếu người dùng đặt lại về trạng thái ban đầu, thì mã ứng dụng khách lưu trữ trong Dịch vụ ô tô sẽ là đã xoá sạch. Tuy nhiên, các máy chủ (máy chủ tác vụ từ xa và máy chủ đánh thức từ xa) không được thông báo. Các máy chủ giữ lại ánh xạ từ ID ứng dụng khách hiện đã hết hạn đến chiếc xe. Do đó, nếu người dùng bắt đầu một nhiệm vụ từ xa mới cho xe, nó sử dụng ID ứng dụng khách đã hết hạn. Xe đã bật nhưng là nhiệm vụ từ xa không thể thực thi vì ứng dụng tác vụ từ xa có một mã ứng dụng khách khác sẽ không khớp.
Sau đây là một cách triển khai khả thi để đặt lại về trạng thái ban đầu.
Khi người dùng đặt lại về trạng thái ban đầu, nhà cung cấp sẽ nhắc người dùng đăng nhập vào máy chủ nhiệm vụ từ xa và huỷ liên kết xe khỏi tài khoản của họ nếu người dùng đã đã liên kết xe trước đó. Không đảm bảo rằng thiết bị sẽ có mạng trong thời gian đặt lại về trạng thái ban đầu. Do đó, việc đưa ra yêu cầu huỷ liên kết tại thời điểm đặt lại về trạng thái ban đầu từ thiết bị có thể không khả thi.
Mỗi khi quyền sở hữu xe được chuyển nhượng, một số hoạt động phải được được thực hiện để đảm bảo chủ sở hữu trước đó không thể thực hiện các tác vụ từ xa cho chiếc xe. Ví dụ: chủ sở hữu mới có thể được yêu cầu:
Đặt lại về trạng thái ban đầu Điều này đảm bảo mã ứng dụng khách sẽ được tạo lại. Sau bước này, chủ sở hữu trước vẫn có thể đánh thức xe, nhưng không thể thực thi các tác vụ từ xa lâu hơn.
Mở ứng dụng tác vụ từ xa và làm theo Huỷ đăng ký một quy trình ứng dụng để huỷ liên kết xe từ tài khoản của chủ sở hữu trước. Chủ sở hữu mới có thể theo dõi sổ đăng ký quy trình của khách hàng để liên kết chiếc xe đó với tài khoản của họ và thay thế tài khoản được liên kết trước đó.
Chủ sở hữu mới có thể sử dụng quy trình Đăng ký khách hàng để liên kết xe với tài khoản của họ và thay thế tài khoản đã liên kết trước đó.
Kiểm thử ứng dụng tác vụ từ xa
Chúng tôi cung cấp lớp trừu tượng phần cứng (HAL) cho quyền truy cập tham chiếu từ xa
default
thư mục để kiểm thử máy khách tác vụ từ xa. Bạn có thể sử dụng debug
sau
chèn một tác vụ từ xa giả vào HAL, tác vụ này được chuyển tiếp đến
ứng dụng tác vụ từ xa nếu bạn cung cấp mã ứng dụng khách chính xác. Bạn có thể tải ứng dụng
Mã nhận dạng bằng cách ghi lại thông tin đăng ký trong ứng dụng tác vụ từ xa của bạn
trong quá trình triển khai.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]