33
#Otimizando o APK Menor e melhor.

Smaller apk

Embed Size (px)

Citation preview

Page 1: Smaller apk

#Otimizando o APKMenor e melhor.

Page 2: Smaller apk

Qual o tamanho do seu aplicativo?

Page 3: Smaller apk

● Quanto espaço ele ocupa quando é instalado?

Page 4: Smaller apk

● Quantos dados ele consome?

Page 5: Smaller apk

● Quanto ele utiliza de memória?

Page 6: Smaller apk

O que é um APK?

Page 7: Smaller apk

O que é um APK?

classes.dex res/ resources.arsc

AndroidManifest.xml libs/ assets/

META-INF/

Matheus Corregiari
Todo asset que não é um Android-type resource. Fontes, dados de jogos, arquivos.
Matheus Corregiari
.so etc...
Matheus Corregiari
O AndroidManifest depois da compilação, passa por algumas mudanças pelo gradle, esse é o arquivo final.
Matheus Corregiari
Alguns resources e identifiers são compilados aqui... Comprimir parace uma boa ideia mas não... O Google play já faz isso E ter coisas comprimidas dentro do APK pode acarretar em problemas de performance =P
Matheus Corregiari
Resources... Drawables, Layouts, Values... e todas as suas variantes
Matheus Corregiari
Código compilado em Dex bytecode. Pode existir mais classes.dex dependendo do seu DEX.
Page 8: Smaller apk

Comprimindo o APK do LoloAntes:

APK: 7.0MBEspaço em disco: 9.79MB

Depois:

APK: ~2.0MBEspaço em disco: ~2.5MB

Page 9: Smaller apk
Matheus Corregiari
Todo asset que não é um Android-type resource. Fontes, dados de jogos, arquivos.
Matheus Corregiari
.so etc...
Matheus Corregiari
O AndroidManifest depois da compilação, passa por algumas mudanças pelo gradle, esse é o arquivo final.
Matheus Corregiari
Alguns resources e identifiers são compilados aqui... Comprimir parace uma boa ideia mas não... O Google play já faz isso E ter coisas comprimidas dentro do APK pode acarretar em problemas de performance =P
Matheus Corregiari
Resources... Drawables, Layouts, Values... e todas as suas variantes
Matheus Corregiari
Código compilado em Dex bytecode. Pode existir mais classes.dex dependendo do seu DEX.
Page 10: Smaller apk

Comprimindo o APK do Lolo1- Minify, Proguard*, ShrinkResources

2- Limpando dependências

3- Filtrando resources

4- Otimizando Imagens

5- Vector Drawables

Page 11: Smaller apk

Minify, Proguard*, ShrinkResources

Page 12: Smaller apk

Comprimindo o APK do Lolo

1- Minify, Proguard*,

ShrinkResources

APK: 3.4MBEspaço em disco: 4.21MB

APK: 7.0MBEspaço em disco: 9.79MB zipAlignEnabled true

minifyEnabled falsesigningConfig signingConfigs.release

Page 13: Smaller apk

Limpando Dependências

Page 14: Smaller apk

Comprimindo o APK do Lolo

2- Limpando dependências

APK: 3.3MBEspaço em disco: 4.00MB

APK: 3.4MBEspaço em disco: 4.21MB

Page 15: Smaller apk

Filtrando Resources

Page 16: Smaller apk

Comprimindo o APK do Lolo

3- Filtrando resources

APK: 3.2MBEspaço em disco: 3.98MB

APK: 3.3MBEspaço em disco: 4.0MB

shrinkResources trueresConfigs “en”, “fr”

Page 17: Smaller apk

* ArscBlamer https://github.com/google/android-arscblamer

Matheus Corregiari
Zopfli é um algoritmo de compressão bem legal, antes era até recomendado usar no apk para diminuir o tamanho dos arquivos dele. Mas usar isso no APK pode trazer problemas no Google Play na parte de calcular o tamanho do update.
Page 18: Smaller apk

Otimizando Imagens

Page 19: Smaller apk

Comprimindo o APK do Lolo

4- Otimizando Imagens

APK: 2.2MBEspaço em disco: 2.61MB

APK: 3.3MBEspaço em disco: 4.0MB

Page 20: Smaller apk

* Png Compresshttps://tinypng.com/

* Jpeg Mini http://www.jpegmini.com/

* Não usem o Zopfli para comprimir o APK!!

* Desativem  Cruncher do AAPT

Matheus Corregiari
Zopfli é um algoritmo de compressão bem legal, antes era até recomendado usar no apk para diminuir o tamanho dos arquivos dele. Mas usar isso no APK pode trazer problemas no Google Play na parte de calcular o tamanho do update.
Page 21: Smaller apk

Vector Drawable

Page 22: Smaller apk

Comprimindo o APK do Lolo

5- Otimizando Imagens

APK: 1.98MBEspaço em disco: 2.42MB

APK: 2.2MBEspaço em disco: 2.71MB

Page 23: Smaller apk

* Habilitar no build.gradlevectorDrawables.useSupportLibrary = true

* Utilizar sempre appCompatapp:srcCompat

* Não esquecer de habilitar nos Fragment’s/Activity’sstatic {

AppCompatDelegate.setCompatVectorFromSourcesEnabled(true);}

* Sempre que utilizar em drawableLeft/Top/Right/Left<selector xmlns:android="...">

<item android:state_checked="true" android:drawable="@drawable/checked_icon" /><item android:drawable="@drawable/icon" />

</selector>

Matheus Corregiari
Zopfli é um algoritmo de compressão bem legal, antes era até recomendado usar no apk para diminuir o tamanho dos arquivos dele. Mas usar isso no APK pode trazer problemas no Google Play na parte de calcular o tamanho do update.
Page 24: Smaller apk
Page 25: Smaller apk

Splits

Page 26: Smaller apk
Page 27: Smaller apk
Page 28: Smaller apk
Page 29: Smaller apk

Redex

Page 30: Smaller apk

• Redex é um bytecode (dex) otimizador Android desenvolvido originalmente

no Facebook. 

• Ele fornece um quadro de leitura, escrita e análise DEX arquivos, e um

conjunto de otimização passa que o uso dessa estrutura para melhorar a

bytecode. 

• APK otimizado por Redex deve ser menor e mais rápido do que sua fonte.

• Melhora cerca de 25% melhor na inicialização.

https://github.com/facebook/redex

Page 31: Smaller apk

Agradecimentos/Link’s:

* Matheus Corregiari

* Wojtek Kalicinskihttps://medium.com/google-developers/smallerapk-part-1-anatomy-of-

an- apk-da83c25e7003#.u1v3o93vm

* Chris Baneshttps://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-

91cbafa87c88#.jcqmhxgxw

Page 32: Smaller apk
Matheus Corregiari
Todo asset que não é um Android-type resource. Fontes, dados de jogos, arquivos.
Matheus Corregiari
.so etc...
Matheus Corregiari
O AndroidManifest depois da compilação, passa por algumas mudanças pelo gradle, esse é o arquivo final.
Matheus Corregiari
Alguns resources e identifiers são compilados aqui... Comprimir parace uma boa ideia mas não... O Google play já faz isso E ter coisas comprimidas dentro do APK pode acarretar em problemas de performance =P
Matheus Corregiari
Resources... Drawables, Layouts, Values... e todas as suas variantes
Matheus Corregiari
Código compilado em Dex bytecode. Pode existir mais classes.dex dependendo do seu DEX.
Page 33: Smaller apk

www.concretesolutions.com.br

Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030

São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449

Ajudamos empresas a criar produtos digitais de sucesso