본문 바로가기
Android

안드로이드 스튜디오 및 SDK 업데이트

by kikiplus 2025. 2. 15.
반응형

안드로이드 스튜디오 및 SDK 업데이트

2021.09.24일에 앱 올리고 나서 2025.02월달이 되어서 다시 모바일 최신 SDK 업데이트를 하려고 컴퓨터 앞에 앉았다.

3년 동안 무슨 일이 있었나 싶기도 하고 개인적으로 모바일 공부 보다는 웹 기술을 더 많이 배웠기 때문에 낯설기도 하였다. 

안드로이드 스튜디오 버전도, Andorid target SDK 버전도 많이 올라간 상태임므로 업데이트를 하며 어떤 변경 사항을 적용했는지 기록을 해보려고 한다.

1. 안드로이드 Gradle 버전 업데이트 (6.5 -> 8.8 버전 이상)

Failed to notify dependency resolution listener.

'void org.gradle.api.artifacts.DependencySubstitutions$Substitution.with(org.gradle.api.artifacts.component.ComponentSelector)'

Gradle 업데이트 시 Try agian을 해봐도 위와 같은 오류가 계속 발생된다. 

App  폴더 밖에 build.gradle 에도 

classpath 'com.android.tools.build:gradle:8.8.1'

gradle-wrapper.properties에는

distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip

위와 같은 버전으로 변경했다. 

2. 코틀린 버전 업데이트( 1.4.31 -> 1.9.21 )

A build operation failed.

    Could not create task ':app:compileDebugAndroidTestKotlin'.

Could not create task ':app:compileDebugAndroidTestKotlin'.

Cannot use @TaskAction annotation on method AbstractKotlinCompile.execute() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.

 

The 'kotlin-android-extensions' Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

https://developer.android.com/topic/libraries/view-binding/migration?hl=ko

https://developer.android.com/topic/libraries/view-binding?hl=ko#kts

apply plugin: 'kotlin-android-extensions'

플러그인을 삭제하고 아래와 같이 viewBinding을 사용하도록 변경했다.
기존에도 해당 플러그인이 있어서 문제가 없는지 테스트만 하면 될 것 같다.

buildFeatures {

    viewBinding = true

}

3. 라이브러리 업데이트

classpath 'com.google.gms:google-services:4.3.3' -> 4.4.2

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0' -> 3.0.3

 

implementation 'com.google.firebase:firebase-crashlytics-ndk:18.0.0' -> 19.4.0

implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' -> 2.8.7

implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' -> 2.8.7

implementation 'com.google.android.gms:play-services-basement:17.6.0’ -> 18.5.0

implementation 'com.google.android.gms:play-services-ads:20.1.0' -> 23.6.0

implementation 'com.google.android.gms:play-services-analytics:17.0.0’-> 18.1.1

implementation 'com.google.firebase:firebase-core:19.0.0' -> 21.1.1

implementation 'com.google.firebase:firebase-messaging:22.0.0' -> 24.1.0

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' -> 2.8.7

implementation 'androidx.appcompat:appcompat:1.2.0' -> 1.7.0

implementation 'com.google.android.material:material:1.3.0' -> 1.12.0

implementation 'androidx.constraintlayout:constraintlayout:2.1.0-beta02'

implementation 'androidx.recyclerview:recyclerview:1.2.0’ -> 1.4.0

implementation 'androidx.constraintlayout:constraintlayout:2.1.0-beta02'

-> implementation 'androidx.constraintlayout:constraintlayout:2.2.0'

implementation "org.jetbrains.kotlin:kotlin-stdlib:$rootProject.ext.kotlin_version"

4. jcenter() 저장소 지원 안함

https://dev.gmarket.com/114

5. API deprecated

compileSdkVersion, buildToolsVersion, dexOptions deprecated

-> compileSdk 35

android:screenOrientation="portrait"

-> tools:ignore="LockedOrientationActivity" 로 대체

android:exported=“false”

인텐트 필터가 포함되어 있으면 위와 같이 선언해줘야 한다.

https://developer.android.com/privacy-and-security/risks/access-control-to-exported-components?source=studio&hl=ko
https://developer.android.com/develop/ui/views/appwidgets?hl=ko#java

광고 사용시 권한 추가

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

6. 빌드 오류

Execution failed for task ':app:compileReleaseKotlin'.

> Inconsistent JVM-target compatibility detected for tasks 'compileReleaseJavaWithJavac' (1.8) and 'compileReleaseKotlin' (21).

안드로이드 스튜디오에 내장된 자바 버전과 동일하게 맞췄다.

compileOptions {

    sourceCompatibility JavaVersion.VERSION_21

    targetCompatibility JavaVersion.VERSION_21

}

Execution failed for task ':app:compileReleaseJavaWithJavac'.

> java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

JDK 버전을 21-> 17로 내려서 빌드해서 오류가 나오지 않았다.

Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /Users/mhkim/Documents/GitHub/KMemo2/app/build/outputs/mapping/release/missing_rules.txt.

proguard-rules.pro 에 있는 내용을 모두 지우고 missing_rules.txt 내용으로 수정하였다.

7. Runtime 오류

애뮬레이터를 실행하며 오류가 있는지 확인하였다. 소스 단에서 오류가 발생되는 것을 확인할 수 있었고 애뮬레이터의 성능이 이전보다 많이 좋아진 것도 느낄 수 있었다. 

Kotlin에서 override fun onBackPressed() 메서드는 더 이상 사용되지 않습니다. 

kotlin Handler() deprecated

이제는 Handler를 사용하기 위해서는 생성자에 Looper를 명시해야 하도록 바뀌었다. 만약 Main UI Thread에서 Handler를 사용한다면 Looper.getMainLooper()를 Handler 생성자에 넣어주면 된다.

private var mHandler: Handler = Handler(Looper.getMainLooper())

 

AsyncTask<Void, Void, Void>() deprecated

-> RxJava , Coroutine 으로 변경해라고 함

 

overridependingtransition deprecated

이어서 계속~~

 

반응형

'Android' 카테고리의 다른 글

★ Android 개발할 때 유용한 정보 모음 ★  (5) 2025.02.13
Android Studio 릴리즈 노트 요약하기  (12) 2025.02.11
Android 12  (1) 2022.07.14
Android JAR vs. AAR  (2) 2021.06.24
Android 파일 공유  (0) 2021.06.24

댓글