targetSdkVersion 28로 올렸을 때 만날 수 있는 문제점
728x90
반응형

 

Android Pie (version 9)

11월의 어느날, Play store에 릴리즈를 하려고 APK를 Console에서 업로드를 했는데...

 

"자세히 알아보기"를 클릭해보면 "Google Play의 대상 API 레벨 요구사항 충족하기"라는 구글 문서가 나온다. 앱 업데이트는 2019년 11월 1일부터 Android 9.0(API 레벨 28) 이상을 타겟팅하도록 요구하기에 이 시점부터는 해당 레벨 미만의 앱은 업데이트가 안된다는 뜻이다. (왓더) 그래서 SDK를 업데이트를 했다.

 

minSdkVersion = 16
targetSdkVersion = 28 // Update : 26 to 28
compileSdkVersion = 28
buildToolsVersion = '28.0.3'

 

이제 빌드를 해야지 했는데...

  • 설치가 안되는 경우
  • 설치가 되었는데 스플래시 화면에서 넘어가지 않는 경우

... 를 만났다. 그래서 하나씩 풀어보았다. (이틀동안 고민 참 많이 했다.)

 

1. org.apache.http를 사용하는 경우

본인 코드에 org.apache.http가 있는지 찾아보자. 만약 사용하고 있다면 원인은 여기에 있다. Android 6.0에서는 Apache HTTP 클라이언트 지원 기능이 삭제되었다. 그리고 많은 개발자가 이것을 제거해야지 생각만하고 차일피일 미루고 있었을 것이다. (나처럼) 그러다가 Android 9부터는 이 라이브러리가 bootclasspath에서 제거되고 기본적으로 앱에서 사용할 수 없게 되었다. (구글 문서에서 알려준 내용 그대로 복붙)

 

그럼에도 불구하고 계속 Apache HTTP를 사용하고 싶은 분들을 위해 구글은 라이브러리를 하나 준비해 두었다. 그러나 이제 이것만으로도 사용은 어렵다. 비슷한 세팅이 하나 더 필요하다. uses-library에 추가 세팅을 하면 Volley나 Glide와 같은 라이브러리로 인해 생기는 이슈를 해결할 수 있다. 나의 경우, 이 조치를 취한 다음에 설치가 안되는 경우는 없었다.

// build.gradle

useLibrary 'org.apache.http.legacy'

// AndroidManifest.xml

<application
        ...생략...>

        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

 

2. https가 아닌 http를 사용하고 있는 경우

디바이스가 PIE (Android 9) 이상인 경우에 TLS(구, SSL) 이슈를 가진다. 안드로이드9부터는 특정 도메인에 일반 텍스트(Cleartext, 평문, 암호화되지 않음)를 사용할 경우 아래와 같이 처리해 줘야한다. 아래 방법 외의 방법이 알고 싶다면 박상권님 블로그를 참고하길 바란다.

// AndroidManifest.xml
<application
        // 생략
        android:usesCleartextTraffic="true" >

 

3. com.mcxiaoke.volley를 사용하는 경우

네트워크 라이브러리 Volley는 com.mcxiaoke.volley로 사용했던 적이 있다. 지금은 DEPRECATED, 즉 지원하고 있지 않고 있다. 유의미한 Volley 업데이트는 2015년 9월이 마지막이었다. sdk 28 이슈라고 하기에는 조금 애매하지만 암튼 지원되지 않은, 그것도 네트워크 라이브러리에서 위 1번이나 2번의 이슈가 생길 여지가 많으므로 이번 기회에 업데이트를 하는게 좋지 않을까?

// build.gradle
dependencies {
  ...
  implementation 'com.android.volley:volley:1.1.1'
}

 

 

참고자료 :
- 이 세상에 하나는 남기고 가자 : 자료1 , 자료2 
- StackOverFlow : 자료 
- PyxisPub : 자료 

 

728x90
반응형