Multiple apk for Density

Post on 19-Jan-2017

1.449 views 0 download

Transcript of Multiple apk for Density

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