Lập phiên bản ứng dụng

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Việc tạo phiên bản là một thành phần quan trọng trong chiến lược nâng cấp và bảo trì ứng dụng của bạn. Việc tạo phiên bản quan trọng vì:

  • Người dùng cần có thông tin cụ thể về phiên bản ứng dụng đã được cài đặt trên thiết bị của họ và các phiên bản nâng cấp có sẵn để cài đặt.
  • Các ứng dụng khác – bao gồm các ứng dụng khác mà bạn phát hành dưới dạng bộ ứng dụng – cần truy vấn hệ thống cho phiên bản của ứng dụng để xác định khả năng tương thích và xác định phần phụ thuộc.
  • Dịch vụ mà qua đó bạn sẽ xuất bản(các) ứng dụng của mình cũng có thể cần truy vấn ứng dụng cho phiên bản của ứng dụng để chúng có thể hiển thị phiên bản cho người dùng. Một dịch vụ phát hành cũng có thể cần kiểm tra phiên bản ứng dụng để xác định khả năng tương thích và thiết lập các mối quan hệ nâng cấp/hạ cấp.

Hệ thống Android sử dụng thông tin phiên bản của ứng dụng để bảo vệ trước khi hạ cấp. Hệ thống này không sử dụng thông tin phiên bản ứng dụng để hạn chế việc nâng cấp hoặc tương thích các ứng dụng bên thứ ba. Ứng dụng của bạn phải thực thi mọi hạn chế về phiên bản và phải cho người dùng biết về các hạn chế đó.

Hệ thống Android thực thi khả năng tương thích của phiên bản hệ thống như được thể hiện trong chế độ cài đặt minSdkVersion trong tệp bản dựng. Tùy chọn cài đặt này cho phép ứng dụng chỉ định API hệ thống tối thiểu tương thích với API đó. Để biết thêm thông tin, hãy xem phần Chỉ định Phiên bản API hệ thống tối thiểu.

Đặt thông tin về phiên bản ứng dụng

Để xác định thông tin phiên bản cho ứng dụng của bạn, hãy đặt giá trị cho các tùy chọn cài đặt phiên bản trong tệp tạo Gradle. Sau đó, các giá trị này được hợp nhất vào tệp kê khai của ứng dụng trong quá trình xây dựng.

Lưu ý: Nếu ứng dụng của bạn xác định phiên bản ứng dụng ngay trong phần tử <manifest>, thì giá trị phiên bản trong tệp bản dựng Gradle sẽ ghi đè chế độ cài đặt trong tệp kê khai. Ngoài ra, việc xác định các tùy chọn cài đặt này trong tệp bản dựng Gradle cho phép bạn chỉ định các giá trị khác nhau cho các phiên bản khác nhau của ứng dụng. Để linh hoạt hơn và tránh khả năng ghi đè tệp khi tệp kê khai được hợp nhất, bạn nên xóa các thuộc tính này khỏi phần tử <manifest> và xác định chế độ cài đặt phiên bản của mình trong tệp tạo Gradle.

Hiện có hai tùy chọn cài đặt và bạn phải luôn xác định các giá trị cho cả hai tùy chọn đó:

  • versionCode – Số nguyên dương được dùng làm số phiên bản nội bộ. Số này chỉ được dùng để xác định xem một phiên bản có gần đây hơn một phiên bản khác hay không, và số cao hơn cho biết có các phiên bản mới hơn. Đây không phải là số phiên bản hiển thị cho người dùng; số đó được đặt bởi tùy chọn cài đặt versionName bên dưới. Hệ thống Android sử dụng giá trị versionCode để ngăn chặn việc hạ cấp bằng cách không cho phép người dùng cài đặt một APK có versionCode thấp hơn phiên bản cài đặt trên thiết bị của họ.

    Giá trị là một số nguyên dương để các ứng dụng khác có thể đánh giá theo phương thức lập trình, ví dụ như để kiểm tra mối quan hệ nâng cấp hoặc hạ cấp. Bạn có thể đặt giá trị thành số nguyên dương bất kỳ mà bạn muốn. Tuy nhiên, hãy đảm bảo rằng mỗi bản phát hành kế tiếp ứng dụng của bạn đều sử dụng một giá trị lớn hơn. Bạn không thể tải APK lên Cửa hàng Play bằng một versionCode mà bạn đã sử dụng cho phiên bản trước đó.

    Lưu ý: Trong một số trường hợp, bạn có thể muốn tải phiên bản ứng dụng có versionCode thấp hơn phiên bản mới nhất lên. Ví dụ: nếu đang xuất bản nhiều APK, bạn có thể đặt trước phạm vi versionCode cho một số APK. Để biết thêm về cách chỉ định giá trị versionCode cho nhiều APK, hãy xem Hỗ trợ nhiều APK.

    Thông thường, bạn sẽ phát hành phiên bản đầu tiên của ứng dụng với versionCode được đặt là 1, sau đó tăng giá trị cho mỗi bản phát hành, bất kể bản phát hành đó tạo thành bản phát hành chính hay nhỏ. Điều này có nghĩa là giá trị versionCode không nhất thiết phải giống với phiên bản phát hành ứng dụng mà người dùng có thể thấy (xem versionName, bên dưới). Các ứng dụng và dịch vụ xuất bản không được hiển thị giá trị phiên bản này cho người dùng.

    Cảnh báo: Giá trị lớn nhất mà Google Play cho phép đối với versionCode là 2100000000.

  • versionName – Một chuỗi được dùng làm số phiên bản hiển thị cho người dùng. Tùy chọn cài đặt này có thể được chỉ định làm một chuỗi thô hoặc tham chiếu đến một tài nguyên chuỗi.

    Giá trị là một chuỗi để bạn có thể mô tả phiên bản ứng dụng dưới dạng chuỗi <major>.<minor>.<point> hoặc bất kỳ loại giá trị nhận dạng phiên bản tuyệt đối hay tương đối nào khác. versionName không có mục đích nào khác ngoài việc hiển thị cho người dùng.

Bạn có thể xác định các giá trị mặc định cho các chế độ cài đặt này bằng cách đưa những giá trị đó vào khối defaultConfig {}, lồng trong khối android {} của tệp build.gradle trong mô-đun. Sau đó, bạn có thể ghi đè các giá trị mặc định này cho các phiên bản khác nhau của ứng dụng bằng cách xác định các giá trị riêng biệt cho các loại bản dựng hoặc hương vị sản phẩm riêng lẻ. Tệp build.gradle sau đây cho thấy chế độ cài đặt của versionCodeversionName trong khối defaultConfig {}, cũng như khối productFlavors {}.

Groovy

android {
    ...
    defaultConfig {
        ...
        versionCode 2
        versionName "1.1"
    }
    productFlavors {
        demo {
            ...
            versionName "1.1-demo"
        }
        full {
            ...
        }
    }
}

Kotlin

android {
    ...
    defaultConfig {
        ...
        versionCode = 2
        versionName = "1.1"
    }
    productFlavors {
        create("demo") {
            ...
            versionName = "1.1-demo"
        }
        create("full") {
            ...
        }
    }
}

Trong khối defaultConfig {} của ví dụ này, giá trị versionCode cho biết rằng APK hiện tại chứa bản phát hành thứ hai của ứng dụng và chuỗi versionName chỉ định rằng xuất hiện cho người dùng dưới dạng phiên bản 1.1. Tệp build.gradle này cũng xác định hai hương vị sản phẩm là "demo" và "full". Vì phiên bản sản phẩm "demo" xác định versionName là "1.1-demo", nên bản "demo" sẽ sử dụng versionName này thay vì giá trị mặc định. Khối phiên bản sản phẩm "đầy đủ" không xác định versionName, vì vậy khối này sử dụng giá trị mặc định là "1,1".

Khung Android cung cấp một API cho phép bạn truy vấn hệ thống để biết thông tin về phiên bản của ứng dụng. Để có được thông tin phiên bản, hãy sử dụng phương thứcgetPackageInfo(java.lang.String, int) của PackageManager.

Chỉ định các yêu cầu đối với cấp độ API

Nếu ứng dụng của bạn yêu cầu một phiên bản tối thiểu cụ thể của nền tảng Android, bạn có thể chỉ định yêu cầu về phiên bản đó là cài đặt cấp độ API trong tệp build.gradle của ứng dụng. Trong quá trình xây dựng, các tùy chọn cài đặt này sẽ được hợp nhất vào tệp kê khai của ứng dụng. Việc chỉ định các yêu cầu cấp API đảm bảo rằng ứng dụng của bạn chỉ có thể được cài đặt trên các thiết bị đang chạy phiên bản nền tảng Android tương thích.

Lưu ý: Nếu bạn chỉ định trực tiếp các yêu cầu ở cấp API trong tệp kê khai của ứng dụng, thì các chế độ cài đặt tương ứng trong tệp bản dựng sẽ ghi đè chế độ cài đặt trong tệp kê khai. Ngoài ra, việc xác định các tùy chọn cài đặt này trong tệp bản dựng Gradle cho phép bạn chỉ định các giá trị khác nhau cho các phiên bản khác nhau của ứng dụng. Để linh hoạt hơn và tránh khả năng ghi đè khi tệp kê khai được hợp nhất, bạn nên xóa các thuộc tính này khỏi phần tử <uses-sdk> và xác định chế độ cài đặt cấp độ API của bạn trong các tệp tạo Gradle.

Có hai chế độ cài đặt cấp độ API:

  • minSdkVersion – Phiên bản tối thiểu của nền tảng Android mà ứng dụng sẽ chạy, do giá trị nhận dạng cấp độ API của nền tảng chỉ định.
  • targetSdkVersion – Chỉ định cấp độ API mà bạn dùng để chạy ứng dụng. Trong một số trường hợp, việc này cho phép ứng dụng sử dụng các phần tử hoặc hành vi tệp kê khai được xác định ở cấp API mục tiêu, thay vì chỉ giới hạn việc sử dụng các phần tử được xác định cho cấp API tối thiểu.

Để chỉ định các yêu cầu về cấp API mặc định trong tệp build.gradle hãy thêm một hoặc nhiều chế độ cài đặt ở trên vào khối defaultConfig {}, lồng trong khối android {}. Bạn cũng có thể ghi đè các giá trị mặc định này cho các phiên bản khác nhau của ứng dụng bằng cách thêm các tùy chọn cài đặt để xây dựng loại hoặc hương vị sản phẩm. Tệp build.gradle sau đây chỉ định các tùy chọn cài đặt mặc định cho minSdkVersiontargetSdkVersion trong khối defaultConfig {} và ghi đè minSdkVersion cho một phiên bản sản phẩm.

Groovy

android {
    ...
    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 24
    }
    productFlavors {
        main {
            ...
        }
        afterLollipop {
            ...
            minSdkVersion 21
        }
    }
}

Kotlin

android {
    ...
    defaultConfig {
        ...
        minSdkVersion(14)
        targetSdkVersion(24)
    }
    productFlavors {
        create("main") {
          ...
        }
        create("afterLollipop") {
          ...
          minSdkVersion(21)
        }
    }
}

Khi chuẩn bị cài đặt ứng dụng của bạn, hệ thống sẽ kiểm tra giá trị của các tùy chọn cài đặt này và so sánh với phiên bản hệ thống. Nếu giá trị minSdkVersion lớn hơn phiên bản hệ thống, thì hệ thống sẽ ngăn cài đặt ứng dụng.

Nếu bạn không chỉ định các tùy chọn cài đặt này, hệ thống sẽ mặc định rằng ứng dụng của bạn tương thích với tất cả các phiên bản nền tảng.

Để biết thêm thông tin, hãy xem tài liệu về phần tử tệp kê khai <uses-sdk> và tài liệu về Cấp độ API. Đối với tùy chọn cài đặt bản dựng Gradle, hãy xem phần Định cấu hình biến thể bản dựng.