Xây dựng ứng dụng video cho Android Automotive OS

Android Automotive OS cho phép người dùng chạy ứng dụng video của bạn trên hệ thống thông tin giải trí của ô tô khi ô tô đang đỗ.

Thử nghiệm ứng dụng trên trình mô phỏng Android Automotive OS

Để bắt đầu xây dựng ứng dụng cho Android Automotive OS, trước tiên, bạn nên thử nghiệm ứng dụng hiện có dành cho thiết bị di động (điện thoại và máy tính bảng) trên trình mô phỏng Android Automotive OS. Để thiết lập một trình mô phỏng, hãy làm theo các bước trong bài viết Thử nghiệm ứng dụng Android dành cho ô tô. Sau đó, bạn có thể chạy ứng dụng bằng cách làm theo các hướng dẫn sau.

Khi chạy ứng dụng, bạn nên chú ý đến các vấn đề về khả năng tương thích, chẳng hạn như sau:

  • Màn hình thông tin giải trí có thể hiển thị theo các hướng cố định. Theo nguyên tắc về chất lượng của ứng dụng dành cho ô tô, ứng dụng phải hỗ trợ cả hướng dọc và hướng ngang.
  • Các API hoạt động trên những thiết bị khác có thể không được hỗ trợ trên Android Automotive OS. Ví dụ: một số API của Dịch vụ Google Play (chẳng hạn như Cast API) không được hỗ trợ trên Android Automotive OS. Hãy xem bài viết Tắt các tính năng để biết thêm thông tin về cách xử lý những vấn đề này.

Định cấu hình tệp kê khai của ứng dụng

Để hoạt động trên Android Automotive OS, ứng dụng của bạn cần có một số mục nhập tệp kê khai. Nhờ những mục nhập này, bạn có thể gửi các ứng dụng dành cho Android Automotive OS đến Cửa hàng Play thông qua một bản phát hành dành riêng cho hệ điều hành Automotive. Chúng tôi sẽ thực hiện một quy trình đánh giá thủ công để đảm bảo rằng đây là các ứng dụng an toàn dành cho ô tô. Xem bài viết Phân phối ứng dụng Android dành cho ô tô để biết thêm thông tin chi tiết.

Yêu cầu các tính năng của Android Automotive

Để xuất hiện tại Cửa hàng Play trên ô tô, các ứng dụng video dành riêng cho Android Automotive OS phải bao gồm phần tử <uses-library> sau đây trong phần tử <application> gốc của tệp AndroidManifest.xml.

<uses-library
  android:name="android-automotive-video"
  android:required="true"/>

Các ứng dụng được gửi đến các kênh phát hành không dành cho ô tô sẽ không thể khai báo thẻ trên vì chúng không thể phụ thuộc vào phần cứng dành riêng cho ô tô. Vì vậy, để đưa cùng một ứng dụng vào cả thiết bị trên ô tô và thiết bị không phải trên ô tô, ứng dụng phải tạo ít nhất 2 phiên bản riêng, một phiên bản dành cho thiết bị trên ô tô và một phiên bản dành cho thiết bị di động (điện thoại và máy tính bảng). Để biết thêm thông tin về cách tạo các phiên bản riêng biệt này, hãy tham khảo tài liệu sau:

2 phiên bản ứng dụng có thể có cùng tên gói, nhưng cần có mã phiên bản khác nhau vì mã này sẽ được tải lên các kênh phát hành trên Cửa hàng Play theo cách riêng.

Ngoài ra, thay vì sử dụng các phiên bản riêng biệt, các ứng dụng có thể dùng tên gói riêng cho định dạng APK hoặc Gói ứng dụng dành cho thiết bị di động và ô tô. Để tìm hiểu ưu nhược điểm của từng phương thức, vui lòng tham khảo các Tên gói trong hướng dẫn cho nhà phát triển ứng dụng đa phương tiện.

Ngoài phần tử <uses-library>, các ứng dụng dành riêng cho Android Automotive OS phải bao gồm các phần tử <uses-feature> sau đây trong phần tử <manifest> gốc.

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Việc đặt rõ ràng các tính năng này thành không bắt buộc đảm bảo rằng ứng dụng của bạn không xung đột với các tính năng phần cứng có sẵn trên thiết bị chạy Android Automotive OS.

Đánh dấu ứng dụng của bạn là ứng dụng video

Để cho biết rằng ứng dụng dành cho ô tô của bạn có hỗ trợ video, hãy thêm tệp XML tên là automotive_app_desc.xml vào thư mục res/xml/ trong dự án. Tệp này phải bao gồm nội dung sau:

<automotiveApp>
  <uses name="video"/>
</automotiveApp>

Sau đó, trong phần tử <application> của tệp kê khai, hãy thêm phần tử <meta-data> sau tham chiếu đến tệp XML:

<meta-data
  android:name="com.android.automotive"
  android:resource="@xml/automotive_app_desc"/>

Đảm bảo rằng không có hoạt động nào được tối ưu hoá để chống phân tâm

Hiện tại, các ứng dụng video chỉ dành cho ô tô đang đỗ. Vì vậy, phần tử no <activity> phải bao gồm phần tử <meta-data> sau đây:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Nếu không có siêu dữ liệu này, hệ điều hành sẽ tự động chặn các hoạt động trong ứng dụng của bạn khi ô tô chuyển sang chế độ lái xe để giảm thiểu sự phân tâm cho người lái xe. Đối với ứng dụng của bạn, hiện tượng này được xem như một phương thức gọi lại vòng đời onPause. Khi đó, bạn phải đảm bảo tạm dừng phát video và âm thanh từ ứng dụng.

Tối ưu hoá ứng dụng của bạn cho Android Automotive OS

Để cung cấp cho người dùng trải nghiệm tốt nhất có thể, bạn có thể cần bật hoặc tắt một số chức năng nhất định, tuỳ thuộc vào việc ứng dụng của bạn có đang chạy trên ô tô hay không.

Tắt các tính năng

Nếu một ứng dụng hiện có dành cho thiết bị di động đang được phát hành trên Android Automotive OS, thì một số tính năng và chức năng có thể không phù hợp hoặc không được hỗ trợ. Ví dụ: ô tô thường không cung cấp quyền truy cập vào camera. Ngoài ra, Android Automotive OS chỉ hỗ trợ một số Dịch vụ Google Play – hãy xem bài viết Dịch vụ Google Play dành cho ô tô để biết thêm thông tin chi tiết.

Bạn có thể dùng API PackageManager.hasSystemFeature để phát hiện xem ứng dụng có đang chạy trên Android Automotive OS hay không bằng cách kiểm tra tính năng FEATURE_AUTOMOTIVE.

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Ngoài ra, nếu ứng dụng của bạn cũng có thành phần Android Auto, thì bạn có thể dùng API CarConnection trên Thư viện ứng dụng ô tô để phát hiện xem ứng dụng có đang chạy trên Android Automotive OS, Android Auto, hoặc hoàn toàn không kết nối với ô tô hay không.

Xử lý trong tình huống không có mạng

Mặc dù ngày càng nhiều ô tô được kết nối Internet, nhưng các ứng dụng vẫn cần có khả năng xử lý mà không cần kết nối Internet, chẳng hạn trong các trường hợp sau:

  • Nhà sản xuất ô tô có thể đã cung cấp dữ liệu di động trong gói thuê bao (người dùng có thể mua hoặc không mua).
  • Người dùng có thể đã bật dữ liệu di động nhưng quyền truy cập bị hạn chế ở một số khu vực (giống như điện thoại).
  • Ô tô có thể có hoặc không có đài phát Wi-Fi. Trong những trường hợp đó, ô tô có thể không nằm trong phạm vi có Wi-Fi hoặc OEM (Nhà sản xuất thiết bị gốc) đã vô hiệu hoá Wi-Fi để thay thế bằng mạng di động.

Các ứng dụng cần được chuẩn bị để xử lý các tình huống này và sẵn sàng cho chiến lược xuống cấp nhẹ (ví dụ: bằng cách cung cấp nội dung khi không có mạng). Để biết thêm thông tin, vui lòng xem các phương pháp hay nhất để tối ưu hoá hoạt động nối mạng.

Thử nghiệm Ứng dụng Video trên hệ điều hành Android Automotive

Nhìn chung, các nhà phát triển có thể làm theo hướng dẫn trong bài viết Thử nghiệm ứng dụng Android cho ô tô. Hiện tại, bạn chỉ có thể sử dụng trình mô phỏng SDK 32 có sẵn qua Android Studio. Bạn cũng có thể dùng thư viện android-automotive-video để thử nghiệm. Trình mô phỏng SDK cấp thấp hơn sẽ không cho phép adb cài đặt ứng dụng yêu cầu thư viện video, mặc dù nó có thể bao gồm ứng dụng cho xe sản xuất ở các cấp hệ điều hành đó.

Câu hỏi thường gặp

DRM của Widevine có được hỗ trợ không?

Có, DRM của Widevine L3 được hỗ trợ trên Android Automotive OS.