Thêm tính năng hỗ trợ Android Automotive OS vào ứng dụng mẫu của bạn

Android Automotive OS cho phép người dùng cài đặt ứng dụng trong ô tô. Để tiếp cận người dùng trên nền tảng này, bạn cần phân phối một ứng dụng được tối ưu hoá cho người lái và tương thích với Android Automotive OS. Bạn có thể sử dụng lại hầu hết các mã và tài nguyên trong ứng dụng Android Auto của mình. Tuy nhiên, bạn phải tạo một bản dựng riêng đáp ứng những yêu cầu được mô tả trên trang này.

Để chạy ứng dụng dành cho ô tô trên Android Automotive OS, bạn cần có Templates Host (Chủ thể mẫu) mới nhất (được cung cấp dưới dạng ứng dụng hệ thống).

Tổng quan về quá trình phát triển

Để thêm tính năng hỗ trợ Android Automotive OS, bạn chỉ cần thực hiện một vài bước theo mô tả trong các phần trên trang này:

  1. Tạo mô-đun ô tô
  2. Khai báo tính năng hỗ trợ Android Automotive OS
  3. Khai báo CarAppServiceCarAppActivity
  4. Cập nhật phần phụ thuộc Gradle

Hãy dùng Android Studio Bumblebee trở lên để đảm bảo rằng mọi tính năng của Automotive OS đều được bật.

Tạo mô-đun ô tô

Một số thành phần của Android Automotive OS, chẳng hạn như tệp kê khai, có những yêu cầu riêng về nền tảng. Tạo một mô-đun có thể tách biệt mã cho các thành phần này với mã khác trong dự án của bạn, chẳng hạn như mã dùng cho ứng dụng dành cho điện thoại.

Đối với dự án hiện có, hãy làm theo các bước sau để thêm mô-đun ô tô vào dự án:

  1. Trong Android Studio, hãy nhấp vào File > New > New Module (Tệp > Mới > Mô-đun mới).
  2. Chọn Automotive Module (Mô-đun Automotive), rồi nhấp vào Next (Tiếp theo).
  3. Nhập Application/Library name (Tên thư viện/ứng dụng). Đây là tên ứng dụng mà người dùng sẽ nhìn thấy trên Android Automotive OS.
  4. Nhập Module name (Tên mô-đun).
  5. Chỉnh sửa Package name (Tên gói) cho phù hợp với ứng dụng hiện có.
  6. Chọn API 29: Android 10 (Q) cho Minimum SDK (SDK tối thiểu) rồi nhấp vào Next (Tiếp theo). Mọi ô tô hỗ trợ Car App Library trên Android Automotive OS đều chạy trên Android 10 (API cấp 29) trở lên. Vì vậy, việc chọn giá trị này sẽ nhắm đến mọi ô tô tương thích.

  7. Chọn Add No Activity (Không thêm hoạt động nào), sau đó nhấp vào Finish (Hoàn tất).

Nếu bạn đang bắt đầu một dự án mới:

  1. Trong Android Studio, hãy nhấp vào File > New > New Project (Tệp > Mới > Dự án mới).
  2. Chọn Automotive (Ô tô) cho Project Type (Loại dự án).
  3. Chọn No Activity (Không có hoạt động) rồi nhấp vào Next (Tiếp theo).
  4. Cung cấp Name (Tên) cho dự án. Đây là tên ứng dụng của bạn mà người dùng sẽ nhìn thấy trên Android Automotive OS.
  5. Nhập Package name (Tên gói). Hãy xem phần Tên gói để biết thêm thông tin chi tiết về cách chọn tên gói.
  6. Chọn API 29: Android 10 (Q) cho Minimum SDK (SDK tối thiểu) rồi nhấp vào Next (Tiếp theo).

    Mọi ô tô hỗ trợ Car App Library trên Android Automotive OS đều chạy trên Android 10 (API cấp 29) trở lên. Vì vậy, việc chọn giá trị này sẽ nhắm đến mọi ô tô tương thích.

Sau khi tạo mô-đun trong Android Studio, hãy mở tệp AndroidManifest.xml trong mô-đun ô tô mới:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

Phần tử application chứa một số thông tin tiêu chuẩn về ứng dụng cùng một phần tử uses-feature khai báo tính năng hỗ trợ Android Automotive OS. Lưu ý rằng không có hoạt động nào được khai báo trong tệp kê khai.

Tiếp theo, hãy thêm các phần tử uses-feature sau đây vào tệp kê khai của bạn:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    <uses-feature
        android:name="android.software.car.templates_host"
        android:required="true" />

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

Phần tử uses-feature đầu tiên khai báo rằng ứng dụng của bạn sẽ dùng Templates Host (Chủ thể mẫu) để chạy. Việc thiết lập rõ ràng 4 phần tử uses-feature còn lại thành required="false" sẽ đả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ó trên thiết bị chạy Android Automotive OS.

Cập nhật phần phụ thuộc Gradle

Trong mô-đun ô tô, bạn phải thêm một phần phụ thuộc vào cấu phần phần mềm androidx.car.app:app-automotive, trong đó có hoạt động triển khai CarAppActivity cần thiết để ứng dụng chạy trên Android Automotive OS.

Nếu đang phát triển ứng dụng để hỗ trợ cả Android Auto và Android Automotive OS thì bạn nên để CarAppService trong một mô-đun riêng được chia sẻ giữa các mô-đun dành cho thiết bị di động và ô tô. Nếu đang áp dụng phương pháp này, bạn cần cập nhật mô-đun ô tô của mình để thêm mô-đun dùng chung bằng cách sử dụng các phần phụ thuộc dự án của Gradle, như minh hoạ trong đoạn mã sau:

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

Khai báo tính năng hỗ trợ Android Automotive OS

Hãy sử dụng mục kê khai sau đây để khai báo rằng ứng dụng của bạn có hỗ trợ Android Automotive OS:

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

Mục kê khai này là một tệp XML khai báo những chức năng cho ô tô mà ứng dụng của bạn hỗ trợ.

Để cho biết rằng bạn có ứng dụng Car App Library, hãy thêm tệp XML có tên automotive_app_desc.xml vào thư mục res/xml/ trong mô-đun Android Automotive OS. Tệp này phải bao gồm nội dung sau:

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

Khai báo CarAppService và CarAppActivity

Tương tự như Android Auto, Android Automotive OS sử dụng phương thức triển khai CarAppService để chạy ứng dụng của bạn. Hãy tham khảo phần Tạo CarAppService và Session cũng như phần Khai báo CarAppService để xem hướng dẫn về cách triển khai và khai báo CarAppService.

Không giống như Android Auto, bạn phải thêm một thành phần bổ sung CarAppActivity cho ứng dụng. Thành phần này đóng vai trò là điểm truy cập cho ứng dụng trên Android Automotive OS. Quá trình triển khai hoạt động này được đưa vào cấu phần phần mềm androidx.car.app:app-automotive và chịu trách nhiệm giao tiếp với ứng dụng lưu trữ mẫu để hiển thị giao diện người dùng của ứng dụng. Bạn chỉ nên có một thực thể của hoạt động này trong tệp kê khai và phải khai báo thực thể này như sau:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

</activity>
  • android:name được đặt thành tên lớp đủ điều kiện của lớp CarAppActivity qua cấu phần phần mềm app-automotive.
  • android:exported được đặt thành true vì hoạt động phải được khởi chạy bởi một ứng dụng thay vì tự khởi chạy (cụ thể là trình chạy).
  • android:launchMode được đặt thành singleTask để người dùng có thể quay lại cùng một phiên bản của hoạt động qua trình chạy nếu họ rời đi.
  • android:theme được đặt thành @android:style/Theme.DeviceDefault.NoActionBar để ứng dụng chiếm toàn bộ không gian màn hình có thể sử dụng.
  • Bộ lọc ý định cho biết đây là hoạt động của trình chạy cho ứng dụng.
  • Có một phần tử <meta-data> cho hệ điều hành biết rằng ứng dụng có thể được sử dụng khi áp dụng các quy tắc hạn chế về trải nghiệm người dùng, chẳng hạn như khi xe đang di chuyển.

Đối với ứng dụng chỉ đường, có thêm một số mục nhập tệp kê khai bắt buộc cho CarAppActivity như minh hoạ trong đoạn mã sau:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>
  • Danh mục android.intent.category.APP_MAPS bổ sung thông báo cho hệ thống rằng ứng dụng có thể cho thấy thông tin vị trí của người dùng.
  • Bộ lọc ý định androidx.car.app.action.NAVIGATE đảm bảo rằng người dùng có thể dùng ứng dụng của bạn khi xử lý ý định chỉ đường ngầm ẩn qua một ứng dụng khác trên ô tô.

Những điều cần xem xét khác

Hãy ghi nhớ những điều cần xem xét sau đây khi phát triển ứng dụng trên Android Automotive OS:

Tên gói

Do bạn đã phân phối một Gói ứng dụng Android (APK) độc lập cho Android Automotive OS nên bạn có thể sử dụng lại tên gói của ứng dụng dành cho thiết bị di động hoặc đặt một tên gói mới. Nếu bạn sử dụng một tên gói khác, ứng dụng sẽ có hai trang thông tin riêng biệt trên Cửa hàng Play. Nếu bạn sử dụng lại tên gói hiện tại, ứng dụng của bạn sẽ có một trang thông tin duy nhất trên cả hai nền tảng.

Đây chủ yếu là một quyết định kinh doanh. Ví dụ: nếu bạn có một đội ngũ phát triển ứng dụng dành cho thiết bị di động và một đội ngũ khác phát triển ứng dụng trên Android Automotive OS thì bạn nên có các tên gói riêng biệt để mỗi đội ngũ quản lý trang thông tin của riêng họ trên Cửa hàng Play. Không có sự khác biệt lớn về mặt yêu cầu kỹ thuật để xem nên áp dụng phương pháp nào.

Bảng sau đây tóm tắt một số điểm khác biệt chính giữa việc giữ nguyên tên gói đang dùng hoặc sử dụng một tên gói mới.

Tính năng Cùng một tên gói Tên gói mới
Trang thông tin trên Cửa hàng Play Một trang Nhiều trang
Cài đặt phản chiếu Có: cài đặt lại ứng dụng nhanh trong trình hướng dẫn thiết lập Không
Quá trình xem xét trên Cửa hàng Play Chặn xem xét: nếu quá trình xem xét một tệp APK không thành công, các tệp APK khác được gửi trong cùng một bản phát hành cũng sẽ bị chặn Xem xét riêng lẻ
Số liệu thống kê, chỉ số và chỉ số quan trọng Kết hợp: bạn có thể lọc theo tên thiết bị để xem dữ liệu dành riêng cho ô tô. Riêng biệt
Lập chỉ mục và thứ hạng trong kết quả tìm kiếm Xây dựng thứ hạng hiện tại Không thể chuyển sang
Tích hợp với các ứng dụng khác Nhiều khả năng không cần thay đổi hệ thống sẽ giả định rằng mã nội dung đa phương tiện được chia sẻ giữa cả hai APK Có thể phải cập nhật ứng dụng tương ứng, chẳng hạn như đối với việc phát URI bằng Trợ lý Google

Nội dung ngoại tuyến

Nếu có thể, hãy triển khai tính năng hỗ trợ ngoại tuyến trong ứng dụng của bạn. Theo dự kiến, những ô tô sử dụng Android Automotive OS sẽ có khả năng kết nối dữ liệu riêng, tức là gói dữ liệu đã đi kèm chi phí của xe hoặc do người dùng trả phí. Tuy nhiên, ô tô cũng sẽ có nhiều khả năng kết nối hơn so với thiết bị di động.

Dưới đây là một vài điều cần lưu ý khi bạn xem xét chiến lược hỗ trợ ngoại tuyến:

  • Thời điểm tốt nhất để tải nội dung xuống là trong lúc ứng dụng đang được sử dụng.
  • Đừng giả định rằng có sẵn Wi-Fi. Ô tô có thể không bao giờ đi vào phạm vi Wi-Fi hoặc Nhà sản xuất thiết bị gốc (OEM) có thể đã vô hiệu hoá tính năng bắt Wi-Fi để sử dụng mạng di động.
  • Mặc dù bạn có thể lưu vào bộ nhớ đệm (theo cách thông minh) các nội dung mà người dùng có khả năng sẽ sử dụng, nhưng bạn nên cho phép người dùng thay đổi hành vi này.
  • Dung lượng ổ đĩa trên ô tô có thể thay đổi tuỳ xe, vì vậy, hãy cung cấp cho người dùng tuỳ chọn xoá nội dung ngoại tuyến.

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

Hãy xem các phần sau đây để biết câu trả lời cho một số câu hỏi thường gặp về Android Automotive OS.

Có hạn chế hoặc nội dung đề xuất nào đối với việc sử dụng SDK và thư viện của bên thứ ba không?

Không có nguyên tắc cụ thể nào về việc sử dụng SDK và thư viện của bên thứ ba. Nếu sử dụng SDK và thư viện của bên thứ ba thì bạn vẫn có trách nhiệm tuân thủ mọi yêu cầu về chất lượng đối với ứng dụng cho ô tô.

Làm thế nào để phát hành ứng dụng trên Android Automotive OS bằng Google Play Console?

Quy trình phát hành ứng dụng trên Android Automotive OS cũng tương tự như quy trình phát hành ứng dụng dành cho điện thoại, nhưng bạn phải sử dụng một hệ số hình dạng khác. Để chọn sử dụng loại bản phát hành dành cho Android Automotive OS, hãy làm theo các bước sau:

  1. Mở Play Console.
  2. Chọn ứng dụng của bạn.
  3. Trên trình đơn bên trái, hãy chọn Bản phát hành > Thiết lập > Cài đặt nâng cao > Hệ số hình dạng.
  4. Chọn Thêm hệ số hình dạng > Android Automotive OS rồi làm theo hướng dẫn trong Play Console.

Khắc phục sự cố

Hãy xem các phần sau đây để được trợ giúp về một số trường hợp khắc phục sự cố thường gặp trên Android Automotive OS.

  • Kể cả sau khi gỡ cài đặt ứng dụng Car App Library khỏi phần cài đặt hệ thống, tôi vẫn gặp lỗi khi cố cài đặt phiên bản mới.

    Để chắc chắn rằng ứng dụng được gỡ cài đặt, hãy dùng lệnh adb uninstall app.package.name.