안드로이드 개발 팁 블로그

Multiple APK 적용하기 본문

Android Tip

Multiple APK 적용하기

tiii 2016.01.14 10:23

안드로이드 앱을 개발하면서 네이티브코드가 포함된 라이브러리를 사용할 때 
통합버전의 APK를 만들게 되면 모든 프로세스 별로 라이브러리가 추가 되면서 용량이 늘어나게 됩니다.
이럴 때 필요한 것이 Multiple APK기능인데 아래와 같은 것들은 지원합니다.

  • 각각의 APK에 다른 OpenGL texture 압축 포멧 지원
  • 각각의 APK에 다른 스크린 사이즈와 density를 설정
  • 각각의 APK에 다른 디바이스에 대한 특성 설정
  • 각각의 APK에 다른 플렛폼 버전 설정
  • 각각의 APK에 다른 CPU 아키텍처 설정 (ARM, x86, and MIPS)


Multiple APK를 만들기 위해서는 몇가지 필수 제약사항이 있습니다.

  • 패키지 명 같아야 하고 같은 인증서로 서명해야 합니다.
  • 버전 코드가 같아야 합니다.
  • 버전 코드에 대한 룰(https://developer.android.com/intl/ko/google/play/publishing/multiple-apks.html#Rules)



Multiple APK의 버전 코드 규칙

필수는 아니지만 구글에서 권장하는 버전 규칙입니다.
앞 두자리는 API 버전 그다음 두자리는 화면 사이즈 마지막 세자리는 앱버전 입니다. 궂이 지킬 필요는 없지만 버전코드를 통해 쉽게
지원 API 및 화면 크기를 알 수 있습니다.




Example

예제는 CPU 별로 나눠서 APK를 생성하는 예제 입니다.버전코드는 각 CPU 별 코드 값 * 1000000 + versionCode 입니다.


build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
android {
    ...
    splits {        
    abi {
            enable true
            reset()
            include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi' //분리할 CPU
            universalApk false //통합apk생성여부
        }
    }
 
}
 
// map for the version code
ext.versionCodes = ['x86':1, 'x86_64':2, 'arm64-v8a':3, 'armeabi-v7a':4, 'armeabi':5 ]
 
import com.android.build.OutputFile
 
android.applicationVariants.all { variant ->
    // assign different version code for each output
    variant.outputs.each { output ->
        output.versionCodeOverride =
                project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) * 1000000 + android.defaultConfig.versionCode
    }
}
cs



자세한 문서는 

http://developer.android.com/intl/ko/google/play/publishing/multiple-apks.html

http://developer.android.com/intl/ko/tools/building/plugin-for-gradle.html

http://geeks.everything.me/2015/06/10/taking-the-ks-off-your-apks-part-1/ (사이즈별 cpu 별 apk 분리하는 법)

을 참고하면 도움이 됩니다.




1 Comments
  • 프로필사진 행인 2016.08.02 10:03 신고 •All APKs you publish for the same application must have the same package name and be signed with the same certificate key.
    •Each APK must have a different version code, specified by the android:versionCode attribute.
    -> 달라야 한다라고 되어있는것 같습니다.
    •Each APK must not exactly match the configuration support of another APK.
댓글쓰기 폼