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 trong ô tô từ xa để thực thi các tác vụ cụ thể. Ví dụ: để thực thi Chế độ gara qua đêm nhằm áp dụng các bản cập nhật phần mềm. Cần có nhiều thành phần không phải Android cho quy trình làm việc toàn diện. Android không xác định hoặc cung cấp phương thức triển khai cho các thành phần 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 cấu trúc mẫu để đăng ký ứng dụng và phân phối tác vụ.
Viế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 của nhà cung cấp. Các thành phần của 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ý việc đặ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ử tính năng truy cập từ xa.
Kiến trúc
Nội dung sau đây giả định cấu trúc mẫu sau đã được sử dụng. Kiến trúc này mang tính giả định và có thể không phản ánh cấu trúc thực tế. Nhà sản xuất thiết bị gốc (OEM) nên điều chỉnh cách triển khai thực tế cho phù hợp với cấu 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 cho bộ xử lý ứng dụng. |
Bộ điều khiển thông tin liên lạc từ xa (TCU) | Bộ xử lý trong xe luôn có thể nhận thông báo từ xa từ đám mây. TCU được giả định là luôn bật hoặc ở chế độ tiết kiệm pin. Sử dụng thông báo từ xa để đánh thức TCU. |
Máy chủ đánh thức | Một máy chủ từ xa chạy trên đám mây và chịu trách nhiệm 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 đây, tất cả đều 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 | Lớp Service do nhà cung cấp viết, 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. |
HAL truy cập từ xa | Phải được triển khai để truy cập từ xa. Lớp trừu tượng để giao tiếp giữa AAOS và một thành phần không phải Android, chẳng hạn như TCU. |
Dưới đây là các thành phần không phải phần mềm Android:
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 HAL Truy cập từ xa để phân phối các tác vụ từ xa cho Dịch vụ ô tô. |
Triển khai máy chủ đánh thức | Máy chủ giao tiếp với ứng dụng đánh thức chạy trên TCU. Có thể 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ý các tác vụ từ xa. Người dùng tương tác với máy chủ này để đưa ra vấn đề và giám sát các tác 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 công 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 khả năng tương tác với xe là rất thấp.
Máy chủ đám mây của đối tác gửi một tác vụ cập nhật hệ thống từ xa đến xe. Cụ thể là bộ điều khiển từ xa (TCU).
TCU trên xe sẽ đánh thức bộ điều khiển điện tử Android (ECU) và dịch vụ OEM kích hoạt chế độ Gara.
Android chạy chế độ Garage để 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 tất và kết thúc kết nối hoặc đạt đến thời gian chờ đã 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. Phương thức đầu tiên là đăng ký ứng dụng, tức là liên kết một người dùng cụ thể với một ứng dụng tác vụ từ xa cụ thể chạy trên một chiếc xe cụ thể. Một chức năng khác là phân phối tác vụ, nghĩa là phân phối tác vụ từ xa cho một người dùng cụ thể đến ứng dụng tác vụ từ xa cụ thể chạy trên xe cụ thể.
Đăng ký ứng dụng
Để sử dụng tính năng truy cập từ xa, người dùng phải mở ứng dụng ứng dụng tác vụ từ xa ít nhất một lần và hoàn tất quy trình đăng ký ứng dụng (văn bản in đậm cho biết các tác vụ do AAOS triển khai):
Khi khởi động, Dịch vụ ô tô sẽ nhận thông tin về xe từ HAL truy cập từ xa.
Khi khởi động, Dịch vụ ô tô sẽ 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ý với Dịch vụ ô tô.
Dịch vụ ô tô thông báo cho ứng dụng tác vụ từ xa về thông tin đăng ký, bao gồm cả mã nhận dạng xe và mã ứng dụng. Mã ứng dụng khách là duy nhất và do Dịch vụ xe chỉ định cho ứng dụng khách này. Mã này được đảm bảo là duy nhất trong số tất cả ứng dụng tác vụ từ xa trên cùng một 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 liên quan đến việc xác thực thông qua máy chủ tác vụ từ xa.
Ứng dụng tác vụ từ xa sẽ tải thông tin của người dùng cùng với mã xe và mã ứng dụng khách lên máy chủ tác vụ từ xa, sau đó yêu cầu máy chủ liên kết người dùng với ứng dụng cụ thể này và chiếc xe cụ thể này.
Bước này có thể yêu cầu người dùng xác thực thêm bằng phương thức xác thực hai yếu tố (không bắt buộc).
Máy chủ tác 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 khớp với mã nhận dạng xe của người gửi. Bạn có thể thực hiện việc này thông qua quy trình chứng thực xe.
Trừ phi đặt lại về trạng thái ban đầu, quy trình đăng ký ứng dụng phải được yêu cầu một lần cho mỗi người dùng trên mỗi xe. Mã ứng dụng được lưu trữ cục bộ trong Dịch vụ ô tô và giữ nguyên cho cùng một ứng dụng.
Hình 2. Đăng ký ứng dụng khách.
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ọ trên xe hoặc trên 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 nhiệm vụ từ xa và đưa ra yêu cầu huỷ liên kết để huỷ liên kết xe này khỏi các tài khoản người dùng đã liên kết trước đó.
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ọ và huỷ liên kết một xe đã liên kết trước đó khỏi 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ủ tác vụ từ xa phải xoá mối liên kết đã 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 xe cụ thể.
Máy chủ tác vụ từ xa liên kết mã nhận dạng người dùng với mã nhận dạng xe và mã ứng dụng. Ứng dụng này gửi dữ liệu tác vụ, mã nhận dạng xe và mã ứng dụng đến máy chủ đánh thức.
Máy chủ đánh thức tìm TCU cụ thể cho mã nhận dạng xe (giả sử bạn đã hoàn tất việc đăng ký TCU) và gửi dữ liệu tác vụ và mã ứng dụng đến TCU.
Trên xe (văn bản in đậm cho biết các tác vụ 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, TCU sẽ sử dụng bộ xử lý xe (VP) để đánh thức AP.
Dịch vụ ô tô nhận nhiệm vụ từ TCU.
Car Service phân phối tác vụ cho ứng dụng tác vụ từ xa tương ứng.
Ứng dụng tác vụ từ xa nhận và thực thi tác vụ.
(Không bắt buộc) Ứng dụng 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 chi tiết về công việc rồi thực thi nhiệm 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 ứ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, hãy xem CarRemoteAccessManager.
Ứng dụng tác vụ từ xa là một dịch vụ Android thực thi các tác vụ từ xa và sử dụng CarRemoteAccessManager
. Việc này yêu cầu PERMISSION_USE_REMOTE_ACCESS
và PERMISSION_CONTROL_REMOTE_ACCESS
, đồng thời phải khai báo bộ lọc ý định cho RemoteTaskClientService
, chẳng hạn như:
<service android:name=".remoteaccess.RemoteTaskClientService"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="android.car.remoteaccess.RemoteTaskClientService" />
</intent-filter>
</service>
Ứng dụng tác vụ từ xa phải tự đăng ký với Dịch vụ ô 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 dịch vụ. Dịch vụ ô tô liên kết với dịch vụ này trong khi khởi động và khi có một nhiệm vụ từ xa đến. Dịch vụ ô tô sẽ huỷ liên kết với dịch vụ này khi hoàn tất tác vụ. Để tìm hiểu thêm, hãy xem phần Quản lý vòng đời của dịch vụ.
Ứng dụng tác vụ từ xa chạy dưới dạng 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 nào dành riêng cho 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 tính năng này, hãy thêm một RRO, chẳng hạn 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
}
Hoặc sử dụng lệnh adb sau 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
HAL truy cập từ xa
Tầng trừu tượng phần cứng truy cập từ xa (HAL) là một tầng trừu tượng do nhà cung cấp triển khai để 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. Bạn không cần triển khai tính năng này nếu không triển khai tính năng truy cập từ xa.
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() |
Lấy mã nhận dạng xe duy nhất mà máy chủ đánh thức có thể nhận ra. |
String getWakeupServiceName() |
Lấy tên cho máy chủ đánh thức từ xa. |
String getProcessorId() |
Nhận 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 ứng dụng. |
void setRemoteTaskCallback(IRemoteTaskCallback callback)
Đặt lệnh gọi lại để gọi khi có yêu cầu về tác vụ từ xa. |
|
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 trình xử lý ứng dụng có sẵn sàng nhận các 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 yêu cầu một tác vụ từ xa. |
Xem phần triển khai tham chiếu bằng TCU bên ngoài. Quá trình triển khai sử dụng luồng đọc dài hạn để nhận các tác vụ từ xa và hỗ trợ lệnh debug
sau:
dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default
HAL của 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 phần Thuộc tính hệ thống được hỗ trợ.
Chế độ im lặng
Chế độ im lặng phải được hỗ trợ cho tính năng truy cập từ xa để xe có thể khởi động ở chế độ im lặng nhằm thực thi các tác vụ từ xa khi không có người dùng. Ở chế độ im lặng, thiết bị AAOS sẽ 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 hai tệp sysfs
của hạt nhân 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ý của xe gửi tín hiệu HW đến SoC Android để 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
tương ứng với chế độ Im lặng hiện tại. Các mô-đun AAOS kiểm tra /sys/kernel/silent_boot/pm_silentmode_kernel_state
để biết liệu hệ thống có ở chế độ Im lặng hay không.
Khi nhận được một tác 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ý trên 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 ví dụ, TCU sẽ đánh thức bộ xử lý ứng dụng thông qua việc gửi tín hiệu đến bộ xử lý của xe.
Các thành phần không phải Android trên ô tô
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 chạy trên TCU thông qua HAL 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ủ đánh thức
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ã nhận dạng xe.
- Báo cáo trạng thái của xe. Ví dụ: trực tuyến hoặc ngoại tuyến hoặc thời gian trực tuyến gần đây nhất với 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áy chủ tác vụ từ xa.
Máy chủ tác vụ từ xa
Máy chủ tác vụ từ xa quản lý các tác vụ từ xa này.
Người dùng tương tác với máy chủ để bắt đầu các tác vụ từ xa mới và theo dõi các tác vụ từ xa.
Sử dụng máy chủ đánh thức từ xa để đánh thức trình xử lý ứng dụng trong xe.
Tương tác với ứng dụng tác vụ từ xa 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ể với một ứng dụng tác vụ từ xa cụ thể trên một xe cụ thể.
Thông thường, dữ liệu tác vụ được gửi qua máy chủ tác vụ từ xa đến máy chủ đánh thức, đến TCU của xe và cuối cùng là đến ứng dụng tác vụ từ xa chỉ là một mã nhận dạng tác vụ. Ứng dụng tác vụ từ xa sử dụng mã tác vụ để tìm nạp thông tin chi tiết từ máy chủ tác vụ từ xa.
Yêu cầu về quyền riêng tư và bảo mật
Việc cần làm | Điều kiện | Yêu cầu |
---|---|---|
TCU (ứng dụng đánh thức) | PHẢI |
|
Máy chủ đánh thức | 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 thiết bị về trạng thái ban đầu, thì mã ứng dụng khách được lưu trữ trong Dịch vụ ô tô sẽ bị xoá. 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) sẽ không được thông báo. Các máy chủ sẽ giữ lại mối liên kết từ mã ứng dụng khách hiện đã hết hạn với xe. Do đó, nếu người dùng bắt đầu một tác vụ từ xa mới cho xe, thì tác vụ đó sẽ sử dụng mã ứng dụng đã hết hạn. Xe được đánh thức nhưng không thể thực thi tác vụ từ xa vì ứng dụng tác vụ từ xa có mã ứng dụng khách khác 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 thực hiện đặ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ủ tác 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ó quyền truy cập 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 thiết bị về trạng thái ban đầu có thể không khả thi.
Bất cứ khi nào quyền sở hữu xe được chuyển, bạn nên thực hiện một số thao tác để đảm bảo rằng chủ sở hữu trước đó không thể đưa ra các thao tác từ xa cho xe nữa. 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 đượ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 nữa.
Mở ứng dụng khách tác vụ từ xa rồi làm theo quy trình Huỷ đăng ký ứng dụng khách để huỷ liên kết xe với tài khoản của chủ sở hữu trước. Chủ sở hữu mới có thể làm theo quy trình đăng ký tài khoản 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 đượ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 thư mục HAL truy cập từ xa tham chiếu
default
để kiểm thử ứng dụng tác vụ từ xa. Bạn có thể sử dụng lệnh debug
sau đây để chèn một tác vụ từ xa giả mạo vào HAL. Tác vụ này sẽ được chuyển tiếp đến ứng dụng tác vụ từ xa nếu bạn cung cấp đúng mã ứng dụng. Bạn có thể lấy mã ứng dụng khách bằng cách ghi nhật ký thông tin đăng ký trong quá trình triển khai ứng dụng tác vụ từ xa.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]