Hỗ trợ nhiều phiên bản nền tảng

Mặc dù các phiên bản Android mới nhất thường cung cấp những API hữu hiệu cho ứng dụng của bạn, nhưng bạn nên tiếp tục hỗ trợ các phiên bản Android cũ cho đến khi có thêm nhiều thiết bị khác được cập nhật. Bài học này sẽ hướng dẫn bạn cách tận dụng các API mới nhất trong khi vẫn tiếp tục hỗ trợ những phiên bản cũ.

Sử dụng trình hướng dẫn New Project (Dự án mới) của Android Studio để tìm dữ liệu phân bổ của thiết bị đang hoạt động chạy từng phiên bản Android. Cơ cấu phân phối này dựa trên số lượng thiết bị truy cập vào Cửa hàng Google Play. Nhìn chung, bạn nên hỗ trợ khoảng 90% số thiết bị đang hoạt động, đồng thời hướng ứng dụng tới phiên bản mới nhất.

Mẹo: Để cung cấp các tính năng và chức năng tốt nhất trên nhiều phiên bản Android, bạn nên dùng Thư viện hỗ trợ Android trong ứng dụng của mình. Thư viện này cho phép bạn sử dụng một số API nền tảng gần đây trên các phiên bản cũ.

Chỉ định các cấp độ API tối thiểu và mục tiêu

Tệp AndroidManifest.xml mô tả thông tin chi tiết về ứng dụng của bạn và xác định phiên bản Android mà ứng dụng đó hỗ trợ. Cụ thể, thuộc tính minSdkVersiontargetSdkVersion cho phần tử <uses-sdk> sẽ xác định cấp API thấp nhất mà ứng dụng của bạn tương thích và cấp API cao nhất mà bạn dựa vào để thiết kế và kiểm thử ứng dụng của mình.

Ví dụ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

Khi các phiên bản Android mới được phát hành, một số kiểu và hành vi có thể thay đổi. Để cho phép ứng dụng của bạn tận dụng những thay đổi này và đảm bảo rằng ứng dụng đó phù hợp với kiểu thiết bị của từng người dùng, bạn nên đặt giá trị targetSdkVersion cho khớp với phiên bản Android mới nhất hiện có.

Kiểm tra phiên bản hệ thống trong thời gian chạy

Android cung cấp mã riêng biệt cho mỗi phiên bản nền tảng trong lớp hằng số Build. Hãy dùng những mã này trong ứng dụng của bạn để xây dựng điều kiện giúp đảm bảo mã dựa vào cấp API cao hơn chỉ được thực thi khi các API đó có trên hệ thống.

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Lưu ý: Khi phân tích cú pháp tài nguyên XML, Android sẽ bỏ qua các thuộc tính XML mà thiết bị hiện tại không hỗ trợ. Vì vậy, bạn có thể yên tâm sử dụng các thuộc tính XML chỉ được phiên bản mới hỗ trợ mà không phải lo rằng các phiên bản cũ sẽ bị lỗi khi gặp mã đó. Ví dụ: nếu bạn đặt targetSdkVersion="11", ứng dụng của bạn sẽ bao gồm ActionBar theo mặc định trên Android 3.0 trở lên. Sau đó, để thêm các mục trong trình đơn vào thanh thao tác, bạn cần phải đặt android:showAsAction="ifRoom" trong XML tài nguyên của trình đơn. Bạn có thể làm việc này trong tệp XML trên nhiều phiên bản, bởi vì các phiên bản Android cũ chỉ đơn thuần bỏ qua thuộc tính showAsAction (tức là bạn không cần có phiên bản riêng biệt trong res/menu-v11/).

Sử dụng kiểu và giao diện nền tảng

Android cung cấp các giao diện trong trải nghiệm người dùng. Những giao diện này mang lại cho các ứng dụng diện mạo của hệ điều hành cơ bản. Bạn có thể áp dụng những giao diện này cho ứng dụng của mình trong tệp kê khai. Khi sử dụng các kiểu và giao diện tích hợp sẵn này, ứng dụng của bạn sẽ tự nhiên có diện mạo mới nhất của Android với mỗi bản phát hành mới.

Cách làm cho hoạt động của bạn trông giống một hộp thoại:

<activity android:theme="@android:style/Theme.Dialog">

Cách làm cho hoạt động của bạn có nền trong suốt:

<activity android:theme="@android:style/Theme.Translucent">

Cách áp dụng giao diện tuỳ chỉnh riêng được xác định trong /res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

Để áp dụng một giao diện cho toàn bộ ứng dụng (tất cả các hoạt động), hãy thêm thuộc tính android:theme vào phần tử <application>:

<application android:theme="@style/CustomTheme">

Để biết thêm thông tin về cách tạo và sử dụng giao diện, hãy đọc hướng dẫn về Kiểu và giao diện.