-
targetSdkVersion 35로 버전 업회사 생활/기타 지식들 2025. 7. 4. 18:02
회사 생활 관련된 내용은 너무 오랜만이다...
targetSdkVersion이 작년에 33에서 34 올린게 얼마 안된 것 같은데, 벌써 34에서 35로 올리라고 한다.

단순히 targetSdkVersion만 변경되는게 아니라 sdk 변경에 대한 대응이 필요해서 귀찮다.
여러가지 변경이 되겠지만 퍼미션 처리 방식, 백그라운드 제한, 보안 정책 강화 등등이 변경되기 때문에 앱에서 사용되는게 있다면 변경해줘야 한다.
target Sdk를 변경했더니 아니나 다를까 바로 에러가 나온다...
1. 첫번 째 오류 :
Android resource linking failed ERROR:AAPT: aapt2.exe E 07-04 17:06:56 44596 24692 LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data. aapt2.exe E 07-04 17:06:56 44596 24692 ApkAssets.cpp:149] Failed to load resources table in APK 'C:\Users\Master\AppData\Local\Android\Sdk\platforms\android-35\android.jar'. error: failed to load include path C:\Users\Master\AppData\Local\Android\Sdk\platforms\android-35\android.jar.해당 문제를 찾아보니 Android Gradle Plugin(AGP) 버전이 문제였던 것 같다. 사용하는 AGP 버전을 7에서 8대로 업데이트 하라는 내용이였다. 그리서 아래와 같이 변경하였다.
build.gradle(Project) :
변경 전 :
classpath 'com.android.tools.build:gradle:7.1.0'변경 후 :
classpath 'com.android.tools.build:gradle:8.1.1'gradle-wrapper.properties
변경 전 :
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip변경 후:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip2. 두번 째 오류 : Namespace not specified
변경 후 다른 오류를 만났다.
Namespace not specified. Specify a namespace in the module's build file.AGP 8.0 이상부터는 더 명확하게 하기 위해 namespace를 명시적으로 지정해야한다.
android { namespace 'com.example.myapp' // ← 추가! ... }3. 세번째 오류 'android.bundle.enableUncompressedNativeLibs' is deprecated.
역시나 그렇게 쉽게 끝날리가 없다.
A problem occurred evaluating project ':app'. > Failed to apply plugin 'com.android.internal.application'. > com.android.builder.errors.EvalIssueException: The option 'android.bundle.enableUncompressedNativeLibs' is deprecated. The current default is 'true'. It was removed in version 8.1 of the Android Gradle plugin.native 라이브러리 (.so)를 압축하지 않도록 설정하는 거라고 하는데 보안 솔루션을 사용하면서 추가됐었다.
현재 AGP8 대에서는 이미 내장되어 있기도 하고 현재 보안 솔루션 업체가 변경되어 사용하지도 않아서 삭제했다.
4. Product Flavor 오류 :
이제는 flavorDimensions을 사용하려면 buildConfig로 내에 명시적으로 true를 추가해야 하나 보다
android { flavorDimensions "version" productFlavors { real { buildConfigField "String", "API_URL", "\"https://api.realserver.com\"" } dev { buildConfigField "String", "API_URL", "\"https://api.devserver.com\"" } } }android { // BuildConfig 자동 생성 기능이 꺼져 있을 수 있음 buildFeatures { buildConfig = true // 반드시 true로 설정해야 custom 필드가 생성됨 } }5. 라이브러리 로딩 문제 :
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:stageDebugCompileClasspath'.보통 라이브러리는 한번 로딩을 하면 캐시된 것을 이용하는데 AGP가 변경되면 새로 다시 통신해서 받아오는 것 같다. 우리 프로젝트에 사용되는 라이브러리중 3개가 원래 올라가 있던 Repository에서 다운이 안되고 사용중단이 된 것 같다.
라이브러리가 3개나 로딩이 안되서 난감했는데 아직도 안드로이드에 대해 모르는게 참 많다고 생각되는 부분이었다. 알고보니 한번이라도 다운 받았으면 aar 파일이 남아있었다.
윈도우기준 :
C:\Users\<사용자>\.gradle\caches\modules-2\files-2.1\맥 OS 기준 :
~/.gradle/caches/modules-2/files-2.1/필요 aar 파일을 lib 폴더에 옮기고 기존의 build.gradle(app)의 dependencies에서 해당 라이브러리 삭제.
6. JVM 타겟 버전
AGP 변경후 JVM도 버전을 변경해줘야 했다. (1.8 > 17)
> 'compileStageDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsStageDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.변경 전: JVM 1.8
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" }변경 후 : JVM 17
compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" }나머지 소소한 오류들도 있었지만 별로 핵심적이지는 않아서 생략...
'회사 생활 > 기타 지식들' 카테고리의 다른 글
QUERY_ALL_PACKAGES 권한 (2) 2024.11.19 CameraX 사진 깨지는 현상 (1) 2024.01.25 앱 계정 이전 (0) 2023.08.07 웹뷰 ERR_UNKNOWN_URL_SCHEME 오류 (fb://fullscreen_video~~) (0) 2023.08.07 Android Camera : (OutOfMemoryError 오류) (0) 2023.07.17