Smaller apk

Preview:

Citation preview

#Otimizando o APKMenor e melhor.

Qual o tamanho do seu aplicativo?

● Quanto espaço ele ocupa quando é instalado?

● Quantos dados ele consome?

● Quanto ele utiliza de memória?

O que é um 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.

Comprimindo o APK do LoloAntes:

APK: 7.0MBEspaço em disco: 9.79MB

Depois:

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

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.

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

2- Limpando dependências

3- Filtrando resources

4- Otimizando Imagens

5- Vector Drawables

Minify, Proguard*, ShrinkResources

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

Limpando Dependências

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

Filtrando Resources

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”

* 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.

Otimizando Imagens

Comprimindo o APK do Lolo

4- Otimizando Imagens

APK: 2.2MBEspaço em disco: 2.61MB

APK: 3.3MBEspaço em disco: 4.0MB

* 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.

Vector Drawable

Comprimindo o APK do Lolo

5- Otimizando Imagens

APK: 1.98MBEspaço em disco: 2.42MB

APK: 2.2MBEspaço em disco: 2.71MB

* 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.

Splits

Redex

• 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

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

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.

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

Recommended