04/28/2025 20:45:30

Android Target API 28 업그레이드 가이드

1 백그라운드

Google Play Store 에서 올해 8 월 이후 업로드하는 App 과 11 월 이후 업데이트 하는 App 을 반드시 Target API 28 로 업그레이드 할 것을 요구하였습니다

참고자료:

  1. https://developer.android.com/distribute/best-practices/develop/target-sdk

    When you upload an APK, it needs to meet Google Play’s target API level requirements. Starting August 1, 2019, Google Play requires that new apps target at least Android 9.0 (API level 28), and that app updates target Android 9.0 from November 1, 2019. Until these dates, new apps and app updates must target at least Android 8.0 (API level 26).

  2. https://support.google.com/googleplay/android-developer/answer/113469#targetsdk

2 Target API 28 로 업그레이드하는 방법

간단하게 말하자면, 컴파일된 targetSdkVersion 의 값을 28 로 수정하면 됩니다

2.1 Android Studio 및 Gradle 컴파일 공정

일반적으로 App 디렉토리의 build.gradle 파일에서, android -> defaultConfig ->targetSdkVersion 의 값을 28 로 수정하면 됩니다. 예:

2.2 Unity 프로젝트

Unity 메뉴의 File -> Build Settings ... 팝업에서 PlatformAndroid 로 선택하고, Player Settings ...

Inspector 패널에서 Other Settings -> Target API Level 을 찾아 설정합니다

2.3 UE4 프로젝트

UE4 메뉴의 File -> Package Project -> Packaging Settings... 에서 팝업을 연 후,

Platforms -> Android 구성 항목을 찾아, 대응하는 설정으로 수정합니다

3 설정 및 처리

3.1 네트워크 보안 처리

Android 9 는 기본적으로 HTTPS 를 사용하고 있으며, HTTPS 가 아닌 요청의 경우, 추가 설정 또는 화이트리스트 처리가 필요합니다

주의: Webview 사용 시에도 화이트리스트 처리가 안 된 HTTP 웹사이트는 열 수 없습니다

Google 업그레이드 설명:https://developer.android.com/about/versions/pie/android-9.0-changes-28#tls-enabled

1)전역(글로벌) 구성 추가

전역 구성을 사용하면 AndroidManifest.xmlapplication 노드에 속성 android:usesCleartextTraffic="true" 를 추가합니다:

2)도메인 네임 화이트리스트 추가

설정 방법:

  1. AndroidManifest.xmlapplication 노드에 android:networkSecurityConfig="@xml/network_security_config" 속성 추가

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ... >
     <application android:networkSecurityConfig="@xml/network_security_config"
                     ... >
         ...
     </application>
    </manifest>
    
  2. res/xml/network_security_config.xml 파일 추가한 뒤, 도메인 네임 정보 설정:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
     <domain-config>
         <domain includeSubdomains="true">pingma.qq.com</domain>
         <domain includeSubdomains="true">182.254.116.117</domain>
         <domain includeSubdomains="true">android.bugly.qq.com</domain>
     </domain-config>
    </network-security-config>
    

더 많은 설정 정보는 아래 파일을 참조하십시오:https://developer.android.com/training/articles/security-config.html

3)Apache HTTP 라이브러리 지원

만약 애플리케이션에 Apach HTTP 라이브러리가 사용되었다면, Android 9 에서의 정상적인 실행을 위해 AnroidManifest.xmlapplication 노드에 아래 설정을 추가하여야 합니다

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

3.2 Webview 멀티 프로세스 데이터 디렉토리 제한

Android 9 에서는 Webview 의 디렉토리 액세스를 제한했습니다. MSDK 는 메모리의 정상적인 릴리스를 위해 멀티 프로세스 Webview 를 사용하였으며, 실사용을 위해서는 Android Webview 를 업데이트 하여야 합니다:

  • 1.15.3 및 그 이상 (2017년 중반기 이전 접속한 경우)
  • 2.2.8 및 그 이상 버전 (2017년 중반기 이후 접속한 경우)

주의:멀티 프로세스 파일 디렉토리 제한으로 Webview 간 cookie, 파일 데이터 공유가 불가능합니다

4 컴포넌트 SDK 업그레이드

4.1 Beacon

1)버전 조건

Beacon 의 SDK 버전 >= 3.0.4

2)업그레이드 방법

  • 기존 플러그인을 새로운 버전의 플러그인으로 교체
  • jar 패키지 압축 풀고, beaconcomp 디렉토리를 사용하여 기존 프로젝트 디렉토리의 assets/beaconcomp 파일 교체

4.2 XinGe

1)버전 조건

XinGe 는 반드시 4.0.0 이상 버전으로 업그레이드 해야 합니다

2)업그레이드 방법

  • 기존 플러그인을 새로운 버전의 플러그인으로 교체
  • 사용하고 있는 버전이 3.x.x 인 경우, 기존 XinGe 설정 정보를 삭제하고 새로운 버전의 설정 정보를 추가

4.3 Bugly

1)버전 조건

최신 버전 Java SDK 2.8.6, NDK 3.6.0 으로 업그레이드할 것을 권장합니다

2)업그레이드 방법

  • 기존 플러그인을 새로운 버전의 플러그인으로 교체

4.4 TBS Webview 브라우저

1)버전 조건

  • MSDK 플러그인은 멀티 프로세스 데이터 디렉토리 공유 문제를 해결하기 위해 반드시 업그레이드 되어야 합니다
    • 1.15.3 및 그 이상 (2017년 중반기 이전 접속한 경우)
    • 2.2.8 및 그 이상 버전 (2017년 중반기 이전 접속한 경우)
  • TBS SDK 지원 가능, 업그레이드 필수 아님

2)업그레이드 방법

  • 기존 플러그인을 새로운 버전의 플러그인으로 교체

5 업그레이드 주의사항

5.1 환경 조건

Unity, UE4 에 대해서는, Android SDK, build-tools 각각 디렉토리가 지정된 target 28 버전으로 올바르게 업그레이드 되었는지 점검하십시오. MSDK 지정 버전은 다음과 같습니다:

compileSdkVersion: 28,
buildToolsVersion: '28.0.3',
minSdkVersion    : 15,
targetSdkVersion : 28,
supportVersion : '28.0.0',

이 중, buildToolsVersion, supportVersion 는 이미 target 28 의 최고 안정 버전으로 업그레이드 된 것 입니다

5.2 Gradle 버전 조건

target api 를 28 로 업그레이드 한 후, support 패키지에 package name 충돌이 발생함. Android Gradle 플러그인 3.0 이하를 사용하여 컴파일 오류 리포트:

Execution failed for task ':GRobot:processDebugResources'.
> Error: more than one library with package name 'android.support.graphics.drawable'

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

2가지 해결방법:

1、Android Gradle 플러그인 버전을 3.0 으로, Gradle 버전을 4.1 이상으로 업그레이드

2、충돌로 인해 2개의 support 패키지에는 리소스(res)파일이 없습니다. 충돌을 피하기 위해 아래와 같은 gradle 스크립트를 통해 패키지 네임을 직접 수정할 수 있습니다

gradle.taskGraph.whenReady {
    // 버전 번호 점검
    if(gradle.gradleVersion.startsWith("2") || gradle.gradleVersion.startsWith("3")){
        println "gradle version is low"
        subprojects.each {
            it.gradle.taskGraph.allTasks.each {
                if(it.name == "processDebugResources" || it.name == "processReleaseResources"){
                    it.doFirst {
                        it.inputs.files.each {
                            if(it.exists() && it.path.contains("support-vector-drawable")){
                                def text = it.getText()
                                // 패지지 이름android.support.graphics.drawable 을android.support.graphics.vector 로 수정
                                if(text.contains("android.support.graphics.drawable")){
                                    text = text.replace("android.support.graphics.drawable", "android.support.graphics.vector")
                                    it.write(text)
                                    println("package name android.support.graphics.drawable has been renamed")
                                }
                            }
                        }
                    }
                }

            }
        }
    }
}

2번 방법에서 낮은 버전의 Android Gradle 컴파일 문제를 해결했지만, support-vector-drawable 의 패키지 네임을 수정하였으므로 사용하기 전에 변경하십시오(MSDK는 UE4 환경에서 이 스크립트를 제공하는 것을 기본값으로 설정하였습니다)!



Copyright © 2025 MSDK.
All rights reserved.

results matching ""

    No results matching ""