Version Code là một số nguyên dương trong phát triển Android, xác định duy nhất mỗi bản build mới của ứng dụng. Google Play và hệ thống Android sử dụng Version Code để xác định xem có cần cập nhật hay không: nếu mã của bản build mới lớn hơn bản đã cài đặt, quá trình cập nhật sẽ bắt đầu. Theo Tài liệu dành cho nhà phát triển Android, Version Code không hiển thị cho người dùng và chỉ phục vụ cho việc đánh số phiên bản nội bộ.
Các điểm chính
Version Code là một số nguyên kiểu Integer được gán cho mỗi bản build của ứng dụng Android. Không giống như Version Name, Version Code không hiển thị cho người dùng và chỉ được hệ điều hành và Google Play sử dụng để so sánh phiên bản khi cài đặt bản cập nhật.
Version Code phải là một số nguyên dương trong khoảng từ 1 đến 2100000000. Mỗi bản build tiếp theo phải có Version Code lớn hơn nghiêm ngặt so với bản trước. Nếu nhà phát triển đã phát hành bản build với Version Code 5, lần xuất bản tiếp theo có thể sử dụng 6, 7 hoặc bất kỳ số nào lớn hơn 5, nhưng không phải 4 và không phải 5 một lần nữa.
Google đã giới thiệu sự phân chia giữa Version Code và Version Name với việc ra mắt Android SDK vào năm 2007. Version Code được thiết kế như một định danh máy để so sánh phiên bản tự động, trong khi Version Name được tạo ra như một nhãn có thể đọc được bởi con người. Sự phân chia này cho phép nhà phát triển đặt tên phiên bản theo ý muốn trong khi vẫn duy trì thứ tự cập nhật nghiêm ngặt thông qua mã số.
| Tham số | Version Code | Version Name |
|---|---|---|
| Kiểu dữ liệu | Integer | String |
| Hiển thị cho người dùng | Không | Có |
| So sánh phiên bản | So sánh số | Không được sử dụng |
| Định dạng | 1, 2, 3, 10, 100 | 1.0.0, 2.3.1-rc |
| Phạm vi | 1 — 2100000000 | Không giới hạn |
Cơ chế so sánh của Version Code được tích hợp trong hệ điều hành Android và cửa hàng Google Play. Mỗi lần xuất bản, Google Play kiểm tra rằng Version Code của bản build mới lớn hơn mã của phiên bản đã cài đặt. Nếu điều kiện không được đáp ứng, việc xuất bản bị từ chối với lỗi.
Khi một thiết bị liên hệ với Google Play để kiểm tra cập nhật, máy chủ so sánh Version Code của ứng dụng đã cài đặt với giá trị tối đa có sẵn trong cửa hàng. Nếu mã trên máy chủ lớn hơn, quá trình tải xuống và cài đặt bản cập nhật sẽ bắt đầu. Người dùng nhìn thấy Version Name do nhà phát triển chỉ định, nhưng quyết định cập nhật được đưa ra dựa trên Version Code.
Các nhà phát triển áp dụng các chiến lược khác nhau để tăng Version Code. Đơn giản nhất là tăng thêm 1 cho mỗi bản build. Đối với các pipeline CI/CD, thường sử dụng timestamp hoặc số build: 2026070301 (năm-tháng-ngày-số). Điều quan trọng là mã phải tăng đơn điệu và không lặp lại giữa các bản build và track Google Play khác nhau.
Version Code và Version Name là hai trường độc lập trong build.gradle thực hiện các chức năng khác nhau. Version Code là định danh nội bộ cho hệ thống, Version Name là nhãn tiếp thị cho người dùng. Chúng có thể thay đổi độc lập với nhau.
Version Name là một chuỗi được hiển thị trong cài đặt ứng dụng, trong Google Play và trong hộp thoại cập nhật. Nhà phát triển có thể chỉ định bất kỳ định dạng nào: 1.0.0, 2.3.1-beta, 3.0-rc1. Version Name không được sử dụng để so sánh phiên bản chuỗi — Google Play luôn dựa vào Version Code.
Có thể xảy ra tình huống Version Code tăng trong khi Version Name vẫn giữ nguyên. Ví dụ, nếu nhà phát triển sửa lỗi nghiêm trọng trong bản build hotfix mà không thay đổi chức năng. Version Name vẫn là 2.0.0, trong khi Version Code thay đổi từ 5 thành 6. Google Play sẽ xử lý bản cập nhật này một cách chính xác.
// Ví dụ: version name không thay đổi, mã tăng lên
android {
defaultConfig {
versionCode 6 // Trước là 5 — hotfix không có tính năng mới
versionName "2.0.0" // Không thay đổi
}
}
// Kiểm tra phiên bản trong runtime
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Code: $code, Name: $name")
Cấu hình Version Code được thực hiện trong tệp build.gradle của mô-đun ứng dụng. Trường versionCode chấp nhận một số nguyên và là một phần của khối defaultConfig. Đối với các bản build flavor khác nhau, có thể đặt giá trị tùy chỉnh thông qua trường versionCode trong cấu hình sản phẩm.
// build.gradle.kts — Kotlin DSL
android {
defaultConfig {
applicationId "com.example.app"
versionCode 15
versionName "2.1.0"
}
flavorDimensions +"version"
productFlavors {
create("demo") {
versionCode 1015
}
create("full") {
versionCode 2015
}
}
}
Product flavors cho phép sử dụng Version Code khác nhau cho các cấu hình khác nhau: phiên bản dùng thử, phiên bản riêng cho máy tính bảng. Nếu flavors được sử dụng trong dự án, Version Code cuối cùng được tạo thành từ số cơ bản và mức tăng cụ thể của flavor. Google Play theo dõi từng tổ hợp một cách độc lập.
Trong các pipeline CI/CD (GitHub Actions, GitLab CI, Jenkins), Version Code thường được tạo tự động dựa trên số build hoặc ngày tháng. Điều này loại bỏ lỗi con người trong quá trình cập nhật thủ công. Tập lệnh đọc Version Code hiện tại từ build.gradle, tăng nó và ghi lại trước khi bắt đầu build.
// Tự động tăng Version Code
import java.util.Properties
import java.io.FileInputStream
val versionProps = Properties()
versionProps.load(FileInputStream("version.properties"))
val versionCode = versionProps.getProperty("VERSION_CODE").toInt() + 1
versionProps.setProperty("VERSION_CODE", versionCode.toString())
android {
defaultConfig {
versionCode = versionCode
}
}
Google Play có các quy tắc nghiêm ngặt về Version Code khi xuất bản và cập nhật ứng dụng. Vi phạm các quy tắc này dẫn đến việc từ chối bản build hoặc không thể phát hành bản cập nhật. Nhà phát triển cần hiểu các giới hạn và chiến lược quản lý mã ở tất cả các giai đoạn của vòng đời.
Google Play không cho phép tải lên APK hoặc AAB có Version Code nhỏ hơn hoặc bằng phiên bản hiện đã được xuất bản. Quy tắc này áp dụng cho từng track (production, beta, alpha) một cách độc lập. Nếu bản build với Version Code 10 được tải lên production và bản build với mã 5 ở alpha, track alpha có thể được cập nhật lên 6, 7, 8 hoặc 9, nhưng production vẫn ở 10.
Khi thăng cấp bản build từ alpha lên beta và sau đó lên production, Version Code phải tăng ở mỗi giai đoạn. Nếu phiên bản alpha có mã 10, beta có thể sử dụng 11 và production sử dụng 12. Bạn không thể phát hành bản build với mã 10 lên production nếu alpha đã sử dụng 10, ngay cả khi production chưa thấy nó.
Lỗi phổ biến nhất là trùng Version Code trong các bản build khác nhau được tải lên cùng một track. Google Play trả về lỗi APK_VERSION_CODE_ALREADY_EXISTS. Một lỗi khác là vượt quá giá trị tối đa 2100000000, gây ra lỗi biên dịch. Để tránh xung đột, hãy sử dụng tính năng tạo mã tự động trong hệ thống CI gắn với số build hoặc ngày build.
Các nhà phát triển cũng thường mắc lỗi không tăng Version Code khi xây dựng bản phát hành hotfix cho một track thay thế. Nếu production có mã 15 và track alpha ở lại 14, khi thăng cấp alpha lên production, Google Play sẽ từ chối bản build vì mã của nó nhỏ hơn mã production hiện tại. Hãy giám sát tính đơn điệu của mã trên tất cả các track cùng lúc — để làm điều này, thuận tiện sử dụng một tệp version.properties duy nhất mà tất cả các track đọc giá trị hiện tại.
Các câu hỏi thường gặp
Không, Google Play không cho phép tải lên bản build có Version Code nhỏ hơn hoặc bằng phiên bản hiện đã được xuất bản trong cùng track. Hệ thống kiểm tra mã khi tải lên và trả về lỗi nếu quy tắc tăng đơn điệu bị vi phạm. Đối với các track alpha và beta, nguyên tắc tương tự được áp dụng độc lập.
Đối với lần xuất bản đầu tiên, bạn có thể chỉ định Version Code 1. Google Play không đặt ngưỡng tối thiểu nào ngoài số nguyên dương. Khuyến nghị bắt đầu với 1 và tăng thêm 1 cho mỗi bản build tiếp theo. Nếu bạn sử dụng định dạng timestamp, bản build đầu tiên có thể là 20260701.
Version Code là định danh máy nội bộ được hệ thống sử dụng để so sánh. Version Name là nhãn hướng đến người dùng hiển thị trong Google Play và trên thiết bị. Người dùng thấy Version Name (ví dụ: 2.0.0), trong khi Google Play sử dụng Version Code để xác định xem có cần cập nhật hay không.
Giá trị tối đa của Version Code là 2100000000 (Integer.MAX_VALUE). Nếu vượt quá, trình biên dịch sẽ trả về lỗi vì trường có kiểu int. Đối với các dự án có số lượng lớn bản build (CI/CD với bản phát hành hàng ngày), khuyến nghị sử dụng định dạng timestamp hoặc đặt lại bộ đếm khi bắt đầu phiên bản major.
Version Code không được sử dụng trực tiếp cho kiểm thử A/B, nhưng nó ảnh hưởng gián tiếp. Google Play cho phép cấu hình triển khai theo giai đoạn (staged rollout) theo tỷ lệ phần trăm người dùng cho một bản build cụ thể. Version Code xác định bản build, trong khi kiểm thử A/B được cấu hình qua Firebase Remote Config hoặc các dịch vụ tương tự.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm