개발을 하다보면 알게 모르게 gradle의 버전을 업데이트에 대한 막연한 두려움이 있습니다.
업무를 하다보면 뒤로 미루게 됩니다. 이번에 미뤄뒀던 targetSdkVersion 업데이트를 하면서 작업한 내용을 공유 하려고 합니다.
개요
2022년 11월 부터 앱업데이트를 위해서는 API 수준을 31 이상을 타겟팅해야 한다는 얘기 입니다. 벌써 11월이네요 준비를 안하신 분들은 서둘러 적용 하셔야 할 것 같습니다.
적용하기
1. gradle 적용
defaultConfig {
//...
targetSdkVersion 32 // 30 -> 32
//...
}
기존 30으로 되어 있는 버전을 32로 바꿔줍니다.(아 쉽다~)
빌드를 하자 마자 오류가 터지기 시작합니다.
2. 오류 수정
a. exported 설정 이슈
> Task :app:processDevDebugMainManifest FAILED
/Users/~~~~/app/src/main/AndroidManifest.xml Error:
android:exported needs to be explicitly specified for <activity>.
Apps targeting Android 12 and higher are required to specify an explicit value
for `android:exported` when the corresponding component has an intent filter defined.
See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
/Users/~~~~/app/src/main/AndroidManifest.xml Error:
android:exported needs to be explicitly specified for <activity>.
Apps targeting Android 12 and higher are required to specify an explicit value for
`android:exported` when the corresponding component has an intent filter defined.
See https://developer.android.com/guide/topics/manifest/activity-element#exported
for details.
See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.
위와 같은 에러가 터져나옵니다.
해당 에러가 나오는 이유는 Android12 이상을 타겟팅하는 경우 manifest.xml에서 activity나 service, receivers등에 exported를 성정해줘야 합니다.
해당 옵션은 외부에서 해당 액티비티등에 접근해도 되는지에 대한 허용여부를 체크 하는 기능으로 default값은 false였으나 인텐트 필터가
적용된 경우 필수적으로 명시해야 하는 정책으로 변경되어 하나하나 적용해줘야 합니다.
+ 하나하나 적용했는데 오류가 계속해서 발생하는경우가 있습니다. 사용하고 있는 외부 라이브러리에서 exported명시가 안된 경우가 있습니다. 그럴경우에는 manifest.xml하단에 "Merged Manifest" 택을 눌러보면 상세 하게 나와있습니다.
저의 경우에는 예전 네이버 로그인기능을 사용 중 이어서 오류가 발생했습니다.(해당 오류 수정은 아래 따로 명시 하겠습니다.)
b. Gradle 버전 이슈
We recommend using a newer Android Gradle plugin to use compileSdk = 32
This Android Gradle plugin (7.0.2) was tested up to compileSdk = 31
This warning can be suppressed by adding
android.suppressUnsupportedCompileSdk=32
to this project's gradle.properties
The build will continue, but you are strongly encouraged to update your project to
use a newer Android Gradle Plugin that has been tested with compileSdk = 32
위 오류에 명시된데로 build.gradle와 gradle-wrapper.properties의 버전을 수정하면 됩니다.
저의 경우에는 아래의 버전으로 변경했습니다.
dependencies {
classpath 'com.android.tools.build:gradle:7.1.3'
}
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
c. 예상치 않은 요소
예상치 않은 요소(URI: "", 로컬: "base-extension")입니다. 필요한 요소는 <{}codename>,<{}layoutlib>,<{}api-level>입니다.
프로젝트에서 이전버전의 gradle를 사용하고 있어서 발생하는 경우가 있습니다.
Project clean 을 실행한 후 빌드 해보시고 안되면 gradle를 삭제 후 다시 다운받아서 실행하면 됩니다.
d. [XmlResourcesTransformer] No mapping for: android/support/FILE_PROVIDER_PATHS
이거또한 위와 마찬가지로 cache가 남아서 그런 경우가 있습니다.
clean하고 재시작한 뒤 다시 빌드 하면 해결 됩니다.
e. 네이버 로그인을 쓰고 있는 경우
이전 버전의 네이버 sdk 를 쓰고 있던 경우 exported에 대한 명시가 없어 오류가 발생합니다.
최신버전으로 업데이트 시도를 했더니 java jvmVersion도 11로 올려야 했습니다.
사용한 라이브러리 "implementation 'com.navercorp.nid:oauth:5.2.0'"
네아로 버전을 올릴경우 프로필 불러오기 부분에 마이그레이션이 필요 합니다.
해당 기능은 다른 포스팅으로 작성 할 예정입니다.
네이버 sdk git에서도 찾아 볼 수 있습니다.
'Kotlin programming > 코틀린(kotlin)' 카테고리의 다른 글
[kotlin] 이미지 불러오기 실패 (EACCES (Permission denied)) (0) | 2022.03.28 |
---|---|
[Android]릴리즈 모드에서 디버그 하기(Debug in release mode.) (0) | 2022.02.23 |
[Kotlin] 현재 사용중인 BaseActivity (0) | 2022.02.18 |
[Android studio] 에뮬레이터 tool window에서 실행 하기 (0) | 2022.02.18 |
[Kotlin] txt 파일 생성하고 데이터 내보내기(export txt file) (0) | 2022.02.15 |