Develop/Android

[Android] SDK 33 이상에서 PackageInfo 가져오기

Linitial 2024. 2. 26. 21:42
반응형

포스팅 환경

  • M1 Mac OS Ventura 13.4.1
  • Android Studio Giraffe | 2022.3.1 Patch 1 (ARM)
  • Gradle 8.2
  • Android Build Gradle 8.2.2
  • Kolin 1.9.22
  • Target SDK 33

SDK 32 이하 기존 코드

기존의 코드의 경우

 

아래의 형태로 가져올 수 있었습니다.

context.packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)

 

하지만 SDK 33 이 되면서 위 처럼 가져오는 코드가 Deprecated 되었습니다..

 

SDK 33 이상 기존 코드

그럼 다른 방식으로는 어떻게 가져오면 될까요?

 

아래 공식문서를 보면 PackageManager.PackageInfoFlas.of() 함수를 이용하라고 되어있습니다.

https://developer.android.com/reference/android/content/pm/PackageManager.PackageInfoFlags#of(long)

 

PackageManager.PackageInfoFlags  |  Android Developers

 

developer.android.com

 

PackageManager.PackageInfoFlags.of() 함수를 이용하고 파라미터로

 

PackageManager.GET_ACTIVITYES 와 같은 플래그를 전달하고 가져오면 된다고 합니다.

packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(PackageManager.GET_SIGNING_CERTIFICATES)))

 

 

다만 여기서 문제가 되는 점이 of 함수의 인자로 long 타입을 넣어줘야 하는데

 

Flag 변수를 넣으면 에러가 발생합니다(…)

 

스택오브 플로우를 뒤적여보니

 

Long 타입으로 변환해서 사용하면 되네요 ㅎㅎ

https://stackoverflow.com/questions/73388061/android-13-sdk-33-packagemanager-getpackageinfostring-int-deprecated-what

 

정리

SDK 33이 되면서 PackageInfo 정보를 가져오는 코드 방식이 변경되었습니다.

 

아래 처럼 사용하면 됩니다.

var packageInfo: PackageInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(PackageManager.GET_SIGNING_CERTIFICATES.toLong()))
} else {
    packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
}
반응형