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 đặtversionName
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 viversionCode
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 (xemversionName
, 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 versionCode
và versionName
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
minSdkVersion
và targetSdkVersion
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.