SDK Manager

안드로이드(Android) 10 API 수준 29로 변경하는 방법

얼마전 구글 개발자 계정에 다음과 같은 메일이 왔습니다.

2020년 11월 2일부터 Google Play의 앱 및 게임 업데이트는 Android 10(API 수준 29) 이상을 타겟팅해야 합니다. 이 날짜가 지나면 Play Console에서 targetSdkVersion이 29 미만인 새 App Bundle 및 APK를 제출할 수 없습니다.

메일 내용은 현재 안드로이드 개발에 쓰이고 있는 소스코드의 API 수준을 29버젼 이상으로 올려야지만 구글 개발자 콘솔에 업데이나 신규 앱을 제출할 수 있다는 이야기입니다.
이제 구글이 안드로이드 10 버젼 이하의 버젼의 점차 개발을 중지 시키도록 한 조치인것 같습니다. 아무래도 보안문제와 여러가지 호환성의 문제도 많기 때문에 구 버젼의 API 사용을 자제시키도록한 조치라고 보여집니다.

안드로이드 10 API 수준 29로 변경하는 방법

그러면 안드로이드 스튜디오의 소스코드에서 API 29 수준으로 변경하는 방법을 알아보도록 하겠습니다.
먼저 안드로이드 스튜디오에 API 29 버젼이 설치가 되어 있지 않다면 먼저 설치를 진행하도록합니다.

메뉴의 Tools -> SDK Manager 에서 대화상자를 열고 Android 10.0 이 선택되어 있지 않다면 선택하고 설치를 진행해 줍니다.

다음으로 app의 build.gradle 파일에서 다음 부분을 29로 변경하면 됩니다.

android {
    compileSdkVersion 29
    .
    .
    targetSdkVersion 29
    .
    .
}

이렇게 간단하게 29로 변경하고 빌드를 했을시 에러가 없고 에뮬레이터로 앱을 실행시에도 정상으로 작동한다면 이 상태로 프로젝트를 계속 이용하면 될것입니다.
하지만, 에러가 발생한다면 다음과 같이 안드로이드 10으로 마이그레이션을 진행하도록 합니다.

메뉴에서  Refactor -> Migrate Android X.. 를 클릭하여 마이그레이션을 진행합니다. 이때 기존 소스코드는 zip파일로 백업을 하는 것이 좋으므로 꼭 체크를 하고 마이그레이션을 진행하는 것이 좋습니다.

안드로이드10으로 마이그레이션을 진행한후 빌드하여 앱을 실행시켜 봅니다. 이제 무사히 에러없이 실행이 된다면 잘 마무리가 된 것입니다.
하지만 에러가 발생한다면 해당 에러를 찾아 수정해 가면서 문제를 해결해야 합니다.

저같은 경우에는 자체 폰트를 사용하도록 해주는 모듈인 calligraphy 라이브러리에서 호환성 에러가 발생하였습니다. calligraphy는 안드로이드 10에서 사용을 할 수 없으므로 다음과 같이 진행을 해주어야 합니다.

먼저 app의 build.gradle 파일에서

implementation 'io.github.inflationx:calligraphy3:3.1.1'

부분을 다음과 같이 변경하도록 합니다.  ↓↓↓

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

그리고 소스코드에서 calligraphy 라이브러리를 사용했던 부분을 다음과 같이 변경해 주도록 합니다.

[라이브러리 import 부분]

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;

↓↓↓

import io.github.inflationx.calligraphy3.CalligraphyConfig;
import io.github.inflationx.calligraphy3.CalligraphyInterceptor;
import io.github.inflationx.viewpump.ViewPump;
import io.github.inflationx.viewpump.ViewPumpContextWrapper;

 

[초기화 부분]

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
        .setDefaultFontPath("fonts/Montserrat-Medium_0.otf")
        .setFontAttrId(R.attr.fontPath)
        .build());

↓↓↓

ViewPump.init(ViewPump.builder()
        .addInterceptor(new CalligraphyInterceptor(
                new CalligraphyConfig.Builder()
                        .setDefaultFontPath("fonts/Montserrat-Medium_0.otf")
                        .setFontAttrId(R.attr.fontPath)
                        .build()))
        .build());

 

[오버라이딩 부분]

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

↓↓↓

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
}

이렇게 수정하여 calligraphy 라이브러리 문제를 해결할 수 있었습니다.

안드로이드 10 API 수준 29으로 변경하실 분들은 참고하셔서 무사히 API 버젼업 하시는데 성공하시기 바라겠습니다.