Giới thiệu
Mỗi ứng dụng Android có 2 giá trị phiên bản quan trọng được định nghĩa trong build.gradle:
- versionCode (Integer): Dùng nội bộ, tăng dần cho mỗi bản release (1, 2, 3...). Google Play yêu cầu versionCode mới phải lớn hơn bản cũ.
- versionName (String): Hiển thị cho người dùng (ví dụ: "1.0.0", "2.1.5-beta").
Bài viết hướng dẫn lấy 2 giá trị này tại runtime thông qua BuildConfig.
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Empty View Activity.
Bước 2: Cấu hình version trong build.gradle.kts (Module: app)
android {
namespace = "com.example.appversion"
compileSdk = 34
defaultConfig {
applicationId = "com.example.appversion"
minSdk = 24
targetSdk = 34
versionCode = 3
versionName = "1.2.0"
}
// ...
}
Bước 3: Thiết kế giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvAppName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textStyle="bold"
tools:text="Tên ứng dụng" />
<TextView
android:id="@+id/tvVersionName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="18sp"
tools:text="Version Name: 1.2.0" />
<TextView
android:id="@+id/tvVersionCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textSize="18sp"
tools:text="Version Code: 3" />
</LinearLayout>
Bước 4: Code lấy version (MainActivity.java / MainActivity.kt)
Java:
package com.example.appversion;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tvAppName = findViewById(R.id.tvAppName);
TextView tvVersionName = findViewById(R.id.tvVersionName);
TextView tvVersionCode = findViewById(R.id.tvVersionCode);
tvAppName.setText(getString(R.string.app_name));
tvVersionName.setText(String.format("Version Name: %s", BuildConfig.VERSION_NAME));
tvVersionCode.setText(String.format("Version Code: %d", BuildConfig.VERSION_CODE));
}
}
Kotlin (với ViewBinding):
package com.example.appversion
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.appversion.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.tvAppName.text = getString(R.string.app_name)
binding.tvVersionName.text = "Version Name: ${BuildConfig.VERSION_NAME}"
binding.tvVersionCode.text = "Version Code: ${BuildConfig.VERSION_CODE}"
}
}
Ứng dụng thực tế
- Hiển thị version trong màn hình Settings/About.
- Gửi versionCode lên server khi gọi API để backend biết client version.
- Kiểm tra cập nhật: so sánh versionCode local với versionCode từ server.
- Debug/log: ghi versionCode vào log để dễ dàng trace bug theo bản build.
Lưu ý
BuildConfigđược generate tự động bởi Gradle tại build time.- Không hardcode version trong code Java/Kotlin - luôn đọc từ BuildConfig.
- Đối với Dynamic Feature Module, versionCode/Name của module có thể khác app chính.