Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android 빌드 ID를 프로그래밍 방식으로 가져오는 방법

Android 애플리케이션에서 기기의 빌드 ID(Build ID)를 프로그래밍 방식으로 가져오는 방법을 설명합니다. 빌드 ID는 Build.ID 필드를 통해 접근할 수 있으며, 이는 기기의 소프트웨어 빌드 버전을 식별하는 문자열입니다.

구현 단계

1단계: 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고 필요한 세부 정보를 입력하여 새 프로젝트를 생성합니다.

2단계: 레이아웃 파일 구성 (activity_main.xml)

결과를 표시할 TextView를 레이아웃에 추가합니다.

<?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:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textViewBuildId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:padding="16dp" />

</LinearLayout>

3단계: 메인 액티비티 구현 (MainActivity.kt)

최신 Android 개발 환경을 고려하여 Kotlin으로 작성하고, 최신 권한 요청 API(Activity Result API)를 사용합니다.

package com.example.buildidexample

import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission

class MainActivity : AppCompatActivity() {

    private lateinit var textViewBuildId: TextView
    
    // 권한 요청 런처 등록 (최신 API)
    private val requestPermissionLauncher = registerForActivityResult(RequestPermission()) { isGranted: Boolean -
        if (isGranted) {
            displayBuildId()
        } else {
            Toast.makeText(this, "전화 상태 권한이 필요합니다.", Toast.LENGTH_SHORT).show()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textViewBuildId = findViewById(R.id.textViewBuildId)
        checkPermissionAndLoad()
    }

    private fun checkPermissionAndLoad() {
        // READ_PHONE_STATE 권한은 Android 12(API 31) 이상에서만 필요할 수 있으나,
        // Build.ID 접근 자체에는 권한이 필수는 아닙니다.
        // 예제에서는 권한 요청 흐름을 보여주기 위해 포함했습니다.
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) 
            == PackageManager.PERMISSION_GRANTED) {
            displayBuildId()
        } else {
            requestPermissionLauncher.launch(Manifest.permission.READ_PHONE_STATE)
        }
    }

    private fun displayBuildId() {
        // Build.ID는 현재 빌드의 ID 문자열을 반환합니다 (예: "RQ3A.210805.001")
        val buildId = Build.ID
        textViewBuildId.text = "Build ID: $buildId"
    }
}

4단계: 매니페스트 권한 선언 (AndroidManifest.xml)

필요한 권한을 매니페스트에 추가합니다. 참고로 Build.ID를 읽는 데 엄밀히 말해 READ_PHONE_STATE 권한은 필수가 아니지만, 기기 식별 정보 접근 시 함께 요청되는 경우가 많아 예제에 포함했습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.buildidexample">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.BuildIdExample">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

실행 및 확인

실제 기기나 에뮬레이터에서 앱을 실행하면 화면 중앙에 현재 기기의 빌드 ID가 표시됩니다. 빌드 ID는 제조사와 빌드 버전에 따라 다른 형식을 가집니다 (예: QP1A.190711.020, RP1A.200720.011 등).

참고 사항

  • Build.ID vs Build.DISPLAY: Build.ID는 내부 빌드 식별자이고, Build.DISPLAY는 사용자에게 보이는 빌드 정보(보통 설정 > 휴대전화 정보에 표시)입니다.
  • 권한 변경사항: Android 12(API 31)부터는 기기 식별자 접근 정책이 강화되었으나, Build.ID는 기기 고유 식별자가 아닌 빌드 버전 정보이므로 일반적인 앱에서 권한 없이도 읽을 수 있습니다.
  • 최신 API 사용: 위 예제는 deprecated된 onRequestPermissionsResult 대신 Activity Result API를 사용하여 현대적인 방식으로 권한을 처리합니다.