multiple apk for density
TRANSCRIPT
k y o b a s h i . d e x # 1
M u l t i p l e A P K f o r d e n s i t y
A b o u t m e
A b o u t m e
• Kenji Tazawa
• Android Engineer
• Recruit Marketing Partners Co.,Ltd
M u l t i p l e A P K
M u l t i p l e A P K
– A n d r o i d D e v e l o p e r s : M u l t i p l e A P K S u p p o r t
“a single APK is unable to support all device configurations, because alternative resources make the APK file too big (greater than 50MB) or other technical
challenges prevent a single APK from working on all devices.”
S u p p o r t e d f i l t e r s
• Support different OpenGL texture compression formats with each APK.
• Support different screen sizes and densities with each APK.
• Support different device feature sets with each APK.
• Support different platform versions with each APK.
• Support different CPU architectures with each APK (such as for ARM, x86, and MIPS, when your app uses the Android NDK).
S u p p o r t e d f i l t e r s
• Support different OpenGL texture compression formats with each APK.
• Support different screen sizes and densities with each APK.
• Support different device feature sets with each APK.
• Support different platform versions with each APK.
• Support different CPU architectures with each APK (such as for ARM, x86, and MIPS, when your app uses the Android NDK).
H o w t o
Density Splits
H o w t o
android {
…
splits { density { enable true exclude "mdpi", "tvdpi", "ldpi" compatibleScreens "small", "normal", "large", "xlarge" } } }
Density Splits
H o w t o
VersionCode
H o w t o
project.ext.versionCodesDensity = [all:0, hdpi: 1, xhdpi: 2, xxhdpi: 3, xxxhdpi: 4]
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output -> def density = output.getFilter(com.android.build.OutputFile.DENSITY)
output.versionCodeOverride = project.ext.versionCodesDensity.get(density, 0) * 100000 + android.defaultConfig.versionCode } }
VersionCode
H o w t o
H o w t o
U p l o a d
H o w t o
H o w t o
android {
…
splits { density { enable true exclude "mdpi", "tvdpi", "ldpi" compatibleScreens "small", "normal", "large", "xlarge" } } }
Density Splits
H o w t o
android {
…
splits { density { enable true exclude "mdpi", "tvdpi", "ldpi" compatibleScreens "small", "normal", "large", "xlarge" } } }
Density Splits
H o w t o
android {
…
splits { density { enable true exclude "mdpi", "tvdpi", "ldpi" compatibleScreens "small", "normal", "large", "xlarge" } } }
This will inject a matching <compatible-screens><screen ...> node in the manifest.
Density Splits
H o w t o
H o w t o
U p l o a d
H o w t o
H o w t o
<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=“com.tazawa.density.sample" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727"> <compatible-screens> <screen android:screenDensity="hdpi" android:screenSize="small"/> <screen android:screenDensity="hdpi" android:screenSize="large"/> <screen android:screenDensity="hdpi" android:screenSize="xlarge"/> <screen android:screenDensity="hdpi" android:screenSize="normal"/> </compatible-screens>
hdpi - AndroidManifest.xml
H o w t o
hdpi - drawable
H o w t o
<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tazawa.density.sample" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name"
universal - AndroidManifest.xml
H o w t o
universal - drawable
I m p r e s s i o n s
I m p r e s s i o n s
画像リソースという観点から見ると、現時点で最も容量をとるのはxxxhdpiのリソース群
I m p r e s s i o n s
将来的に
I m p r e s s i o n s
将来的に
xxxxhdpi
I m p r e s s i o n s
将来的に
xxxxhdpi xxxxxhdpi
I m p r e s s i o n s
将来的に
xxxxhdpi xxxxxhdpi xxxxxhdpi
I m p r e s s i o n s
将来的に
xxxxhdpi xxxxxhdpi xxxxxhdpi xxxxxxxhdpi
I m p r e s s i o n s
将来的に
xxxxhdpi xxxxxhdpi xxxxxhdpi xxxxxxxhdpi xxxxxxhdpi
I m p r e s s i o n s
将来的に
xxxxhdpi xxxxxhdpi xxxxxhdpi xxxxxxxhdpi xxxxxxhdpi xxxxxxxxxhdpi
I m p r e s s i o n s
• 画像を多用していると、将来的に1density分のapk
でも50Mに到達することも起こりえる
• compatibleScreensを使用しているため、Densityの対応もれに気をつける必要がある(tvdpi,mdpi)
• apkの種類が増えることでQAコストかさむ
I m p r e s s i o n s
• 画像を多用していると、将来的に1density分のapk
でも50Mに到達することも起こりえる
• compatibleScreensを使用しているため、Densityの対応もれに気をつける必要がある(tvdpi,mdpi)
• apkの種類が増えることでQAコストかさむ
I m p r e s s i o n s
• 画像を多用していると、将来的に1density分のapk
でも50Mに到達することも起こりえる
• compatibleScreensを使用しているため、Densityの対応もれに気をつける必要がある(tvdpi,mdpi)
• apkの種類が増えることでQAコストかさむ
S u m m a r y
S u m m a r y
• DensityごとでのAPK作成は比較的容易
• 画像リソースによる肥大化対応のために使用するのは控えたい
• そもそも、画像リソースは入れすぎない
• そもそも、画像でapkサイズをひっぱくさせない
• シンプルに運用したいから極力使いたくない
S u m m a r y
• DensityごとでのAPK作成は比較的容易
• 画像リソースによる肥大化対応のために使用するのは控えたい
• そもそも、画像リソースは入れすぎない
• そもそも、画像でapkサイズをひっぱくさせない
• シンプルに運用したいから極力使いたくない
S u m m a r y
• DensityごとでのAPK作成は比較的容易
• 画像リソースによる肥大化対応のために使用するのは控えたい
• そもそも、画像リソースは入れすぎない
• そもそも、画像でapkサイズをひっぱくさせない
• シンプルに運用したいから極力使いたくない
S u m m a r y
• DensityごとでのAPK作成は比較的容易
• 画像リソースによる肥大化対応のために使用するのは控えたい
• そもそも、画像リソースは入れすぎない
• そもそも、画像でapkサイズをひっぱくさせない
• シンプルに運用したいから極力使いたくない
S u m m a r y
• DensityごとでのAPK作成は比較的容易
• 画像リソースによる肥大化対応のために使用するのは控えたい
• そもそも、画像リソースは入れすぎない
• そもそも、画像でapkサイズをひっぱくさせない
• シンプルに運用したいから極力使いたくない
M u l t i p l e A P K
– A n d r o i d D e v e l o p e r s : M u l t i p l e A P K S u p p o r t
“we encourage you to develop and publish a single APK”
t h a n k s