본문 바로가기

Programming/Android

ABI에 대해 여러 개의 APK 구성

link : https://developer.android.com/studio/build/configure-apk-splits

 

Build multiple APKs  |  Android Developers

Although you should build a single APK to support all your target devices whenever possible, that might result in a very large APK due to files needed to support multiple screen densities or Application Binary Interfaces (ABIs). One way to reduce the size

developer.android.com

 

*ABI에 대해 여러 개의 APK 구성

 다른 ABI에 대해 별도의 APK를 만들려면 분할 블록 내에 abi 블록을 추가하십시오. abi 블록에 원하는 ABI 목록을 제공하십시오.
다음 Gradle DSL 옵션은 ABI 당 여러 APK를 구성하는 데 사용됩니다.

1) enable
이 요소를 true로 설정하면 Gradle은 정의한 ABI를 기반으로 여러 개의 APK를 생성합니다. 기본값은 false입니다.

2) exclude
Gradle이 별도의 APK를 생성해서는 안되는 ABI의 쉼표로 구분 된 목록을 지정합니다. 대부분의 ABI에 대해 APK를 생성하고 앱에서 지원하지 않는 몇 개의 ABI를 제외해야하는 경우 제외를 사용합니다.

3) reset()
기본 ABI 목록을 지 웁니다. 추가하려는 ABI를 지정하려면 include 요소와 결합 할 때만 사용하십시오. 다음 스니펫은 reset()을 호출하여 목록을 지운 다음 include를 사용하여 ABI 목록을 x86 및 x86_64로 설정합니다:
reset()  // Clears the default list from all ABIs to no ABIs.
include "x86", "x86_64" // Specifies the two ABIs we want to generate APKs for.

4) include
Gradle이 APK를 생성해야하는 ABI의 쉼표로 구분 된 목록을 지정합니다. reset ()과 함께 사용하면 ABI의 정확한 목록을 지정할 수 있습니다.

5) universalApk
true 인 경우 Gradle은 ABI 단위 APK 외에도 범용 APK를 생성합니다. 범용 APK는 단일 APK에 모든 ABI에 대한 코드 및 리소스를 포함합니다. 기본값은 false입니다. 이 옵션은 splits.abi 블록에서만 사용할 수 있습니다. 화면 밀도에 따라 여러 개의 APK를 만들 때 Gradle은 항상 모든 화면 밀도에 대한 코드와 리소스가 포함 된 범용 APK를 생성합니다.



다음 예에서는 각 ABI에 대해 x86 및 x86_64에 대해 별도의 APK를 생성합니다. 이것은 reset ()을 사용하여 빈 ABI 목록으로 시작한 다음, 각각에 APK를 얻을 ABI 목록이있는 include를 사용하여 수행됩니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
android {
  splits {
 
    // Configures multiple APKs based on ABI.
    abi {
 
      // Enables building multiple APKs per ABI.
      enable true
 
      // By default all ABIs are included, so use reset() and include to specify that we only
      // want APKs for x86 and x86_64.
 
      // Resets the list of ABIs that Gradle should create APKs for to none.
      reset()
 
      // Specifies a list of ABIs that Gradle should create APKs for.
      include "x86""x86_64"
 
      // Specifies that we do not want to also generate a universal APK that includes all ABIs.
      universalApk false
    }
  }
}
 


*mips, mips64, and armeabi

 Gradle 3.1.0 이상의 Android Plugin은 더 이상 기본적으로 다음 ABI에 대한 APK (mips, mips64 및 armeabi)를 생성하지 않습니다. 이는 NDK r17 이상이 더 이상 이러한 ABI를 지원 대상으로 포함하지 않기 때문입니다.

 먼저 Google Play Console을 확인하여 사용자가이 ABI를 타겟팅하는 앱의 APK를 다운로드했는지 확인합니다. 그렇지 않은 경우 빌드에서 제외 할 수 있습니다. 이러한 ABI를 대상으로하는 APK를 계속 작성하려면 NDK r16b 이하를 사용하고 아래에 표시된 것처럼 build.gradle 파일에서 ABI를 지정해야합니다:
splits {
    abi {
        include 'armeabi', 'mips', 'mips64'
        ...
    }
}

!!Known Issue:
 Android Plugin for Gradle 3.0.1 이하를 NDK r17 이상과 함께 사용하는 경우 다음 오류가 발생할 수 있습니다. 
!!Error:
ABI [mips64, armeabi, mips]는 플랫폼에서 지원되지 않습니다. 이는 이전 버전의 플러그인이 ABI 별 APK를 작성할 때 기본적으로 지원되지 않는 ABI를 포함하기 때문입니다. 이 문제를 해결하려면 플러그인의 최신 버전으로 업데이트하거나 앱의 build.gradle 파일에서 플러그인의 기본 ABI 목록을 재설정하고 아래에 표시된대로 지원되는 ABI 만 포함하십시오:
...
splits {
    abi {
        ...
        reset()
        include "x86", "armeabi-v7a", "arm64-v8a", "x86_64"
    }
}

'Programming > Android' 카테고리의 다른 글

Multiple APK support  (0) 2019.07.01
AndroidManifest란?  (0) 2019.05.19
Application.mk란?  (0) 2019.05.19
Android.mk란?  (0) 2019.05.19
ABI란?  (0) 2019.04.22