Targeting Android 12

Android 12 타겟팅

Android 12 를 대상으로 targetSdkVersion 31 를 적용한 경우에 아래와 같이 조치가 필요합니다.

1. SDK 버전

  • Android SDK 1.17.6 버전 이상이 필요합니다.

2. Gradle 버전

  • Gradle 버전 : 6.1.1 이상 필요합니다.

  • Gradle Plugin 4.0.1 이상 필요합니다.

3. android:exported 값 적용

  • AndroidManifest.xml 에서 activity, service, receiver 에 intent-filter 가 포함되어 있으면서 android:exported 가 선언되어 있지 않은 경우 경고가 발생하며 앱 설치시 아래와 같이 오류가 발생합니다.

  • 애드엑스 SDK 1.17.6 에는 android:exported 관련하여 수정하였습니다.

Installation did not succeed. The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

4. 광고 ID 권한 추가

  • AndroidManifest.xml 에 아래와 같 Google Play Service 일반 권한을 선언해야 합니다.

  • <uses-permission android:name="com.google.android.gms.permission.AD_ID" />

5. PendingIntent 오류

  • AdMob에서 사용중인 WorkManager 버전에 의해 아래와 같은 오류가 발생합니다.

  • AdMob 20.5.0 버전 이상을 사용하거나 WorkManager 2.7.0 버전 이상을 사용하면 해결됩니다.

java.lang.IllegalArgumentException: com.adxcorp.adxdev: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubble

dependencies {
  implementation 'com.google.android.gms:play-services-ads:20.4.0'

  // For apps targeting Android 12, add WorkManager dependency.
  constraints {
    implementation('androidx.work:work-runtime:2.7.0') {
      because '''androidx.work:work-runtime:2.1.0 pulled from
      play-services-ads has a bug using PendingIntent without
      FLAG_IMMUTABLE or FLAG_MUTABLE and will fail in Apps
      targeting S+.'''
    }
  }
}

Last updated