안드로이드 스튜디오 및 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() 저장소 지원 안함
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 |
댓글