Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lấy phiên bản ứng dụng (Version Name/Code) trên Android

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.