Fat Binaries

Felipe Pedroso
Ivan Costa
Agenda
• O que é o APK?
• Como as apps são distribuídas?

• Single APK e Múltiplas APKs, qual escolher?
• Fat Binaries

2
APK
• É o formato de distibuição dos aplicativos
android.
• Digitalmente assinado.
• Baseado no formato .jar
• São formatados como arquivos zip
• Contém as classes
compiladas(.dex), bibliotecas
nativas, resources e o manifesto
3
A estrutura do APK
•
•
•
•
•
•

AndroidManifest.xml
classes.dex
resource.arsc
META-INF
Res
lib

4
Como os APKs são distribuídos?
• Google Play Store
• Stores independentes*
•
•
•
•

Amazon
SlideME
F-Droid
…

• Instalação Manual*
OK, mas não é só criar o
APK e subir na store?

6
Diferentes marcas…

Relatório de fragmentação - http://opensignal.com
7
Diferentes dispositivos…

Relatório de fragmentação - http://opensignal.com
8
Diferentes tamanhos de tela…

Relatório de fragmentação - http://opensignal.com
9
… e diferentes arquiteturas!

Arquitetura

Compatibilidade

ARM, ARM-NEON
x86
MIPS

Android 1.5 (API Level 3) and higher
Android 2.3 (API Level 9) and higher
Android 2.3 (API Level 9) and higher

Referência
http://developer.android.com/tools/sdk/ndk/index.html

10
Vantagens de suportar múltiplas
arquiteturas
• Melhor aproveitamento das características
de cada arquitetura:
• Processador
• Memória
• GPU

• Economia de bateria
• Mais dispositivos com sua app e usuário(s)
feliz(es) 
Arquitetura Intel
• Bay Trail: os novos Atoms
• Intel C++ Compiler for Android

• Intel Graphics Performance Analyzers e
outras ferramentas
• Usar emulador com HAXM para testes

12
Como suportar todos?
• Single APK
• Colocar tudo em um único APK
• Simples e mais recomendado

• Múltiplos APKs
• Criar um APK para cada caso*
• É útil quando seu app é muito grande

13
Múltiplos APKs
• Feature do Google Play que permite que
você publique diferentes APKs para
diferentes configurações de dispositivo
• Recomendada a utilização apenas quando
o APK é maior que 50MB

14
Que situações posso utilizar?
• Tamanho da tela e sua densidade
• Versão da plataforma

• Arquitetura da CPU
• Formatos de compactação de texturas
(OpenGL)

15
Suporte no Google Play
• Mudar para Advanced
Mode antes de fazer o
upload do segundo APK

• A interface não vai
mudar quase nada mas
se você fizer o upload de
outro APK ele vai
sobrescrever o primeiro.
16
Caso de Estudo – Multiple APKs
120
100
resources.arsc

80

classes.dex
60

AndroidManifest.xml
res

40

META-INF

lib

20

0
armeabi

17

armeabi-v7a

mips

x86
Single APK
• Publicar diversos APKs para o mesmo app
não é a regra e sim a exceção
• One APK to rule them ALL!
• É a solução recomendada caso sua app
tenha menos de 50MB

18
Single APK - Vantagens
• Processo de publicação e gerenciamento é
mais simples
• Você consegue reduzir a base de código

• Existem diversas alternativas para gerenciar
as mudanças entre configurações de código
• Seu usuário vai conseguir restaurar as apps
em diferentes devices

19
Fat Binary
• Por definição são APKs que suportam
múltiplas arquiteturas
• Mas imaginem um APK com todos os tipos
recursos, como ele ficaria?

20
Por dentro do Fat Binary
libs/armeabi

Source Code

apk build

ndk-build
libs/armeabi-v7a

libs/x86

21

…
Caso de Estudo – Single APK
Size on disk
7%

2%

2%

5%
2%

META-INF
res
AndroidManifest.xml
classes.dex
resources.arsc

82%

22

lib
Caso de Estudo – Single APK
Tamanho
2%
13%

7%

2%

5%

META-INF
2%

res
AndroidManifest.xml
classes.dex

16%

resources.arsc
lib/armeabi
lib/armeabi-v7a

40%
13%

23

lib/mips
lib/x86
Comparando…
200
180
160
140
120
100
80
60
40
20
0

24

resources.arsc
classes.dex
AndroidManifest.xml
res
META-INF

lib
Isso é realmente um problema?
• O recomendado é que aplicações de até
50MB sejam Single APK.
• Até quando vale a pena manter diferentes
versões de APKs?
• O que é melhor para o usuário? O que é
melhor para o desenvolvimento?

25
Por quê não suportar diversas
arquiteturas?

26
Take aways
• Suportar diversas arquiteturas não é
difícil, basta querer
• Single APK x Multiples APKs: analisar o que é
melhor para sua aplicação
• Fat Binaries não são necessariamente ruins se
tem menos de 50MB

• X86: novo
processador, ferramentas, compiladores e
emulador
27
Q/A
Android Fat Binaries

Android Fat Binaries

  • 1.
  • 2.
    Agenda • O queé o APK? • Como as apps são distribuídas? • Single APK e Múltiplas APKs, qual escolher? • Fat Binaries 2
  • 3.
    APK • É oformato de distibuição dos aplicativos android. • Digitalmente assinado. • Baseado no formato .jar • São formatados como arquivos zip • Contém as classes compiladas(.dex), bibliotecas nativas, resources e o manifesto 3
  • 4.
    A estrutura doAPK • • • • • • AndroidManifest.xml classes.dex resource.arsc META-INF Res lib 4
  • 5.
    Como os APKssão distribuídos? • Google Play Store • Stores independentes* • • • • Amazon SlideME F-Droid … • Instalação Manual*
  • 6.
    OK, mas nãoé só criar o APK e subir na store? 6
  • 7.
    Diferentes marcas… Relatório defragmentação - http://opensignal.com 7
  • 8.
    Diferentes dispositivos… Relatório defragmentação - http://opensignal.com 8
  • 9.
    Diferentes tamanhos detela… Relatório de fragmentação - http://opensignal.com 9
  • 10.
    … e diferentesarquiteturas! Arquitetura Compatibilidade ARM, ARM-NEON x86 MIPS Android 1.5 (API Level 3) and higher Android 2.3 (API Level 9) and higher Android 2.3 (API Level 9) and higher Referência http://developer.android.com/tools/sdk/ndk/index.html 10
  • 11.
    Vantagens de suportarmúltiplas arquiteturas • Melhor aproveitamento das características de cada arquitetura: • Processador • Memória • GPU • Economia de bateria • Mais dispositivos com sua app e usuário(s) feliz(es) 
  • 12.
    Arquitetura Intel • BayTrail: os novos Atoms • Intel C++ Compiler for Android • Intel Graphics Performance Analyzers e outras ferramentas • Usar emulador com HAXM para testes 12
  • 13.
    Como suportar todos? •Single APK • Colocar tudo em um único APK • Simples e mais recomendado • Múltiplos APKs • Criar um APK para cada caso* • É útil quando seu app é muito grande 13
  • 14.
    Múltiplos APKs • Featuredo Google Play que permite que você publique diferentes APKs para diferentes configurações de dispositivo • Recomendada a utilização apenas quando o APK é maior que 50MB 14
  • 15.
    Que situações possoutilizar? • Tamanho da tela e sua densidade • Versão da plataforma • Arquitetura da CPU • Formatos de compactação de texturas (OpenGL) 15
  • 16.
    Suporte no GooglePlay • Mudar para Advanced Mode antes de fazer o upload do segundo APK • A interface não vai mudar quase nada mas se você fizer o upload de outro APK ele vai sobrescrever o primeiro. 16
  • 17.
    Caso de Estudo– Multiple APKs 120 100 resources.arsc 80 classes.dex 60 AndroidManifest.xml res 40 META-INF lib 20 0 armeabi 17 armeabi-v7a mips x86
  • 18.
    Single APK • Publicardiversos APKs para o mesmo app não é a regra e sim a exceção • One APK to rule them ALL! • É a solução recomendada caso sua app tenha menos de 50MB 18
  • 19.
    Single APK -Vantagens • Processo de publicação e gerenciamento é mais simples • Você consegue reduzir a base de código • Existem diversas alternativas para gerenciar as mudanças entre configurações de código • Seu usuário vai conseguir restaurar as apps em diferentes devices 19
  • 20.
    Fat Binary • Pordefinição são APKs que suportam múltiplas arquiteturas • Mas imaginem um APK com todos os tipos recursos, como ele ficaria? 20
  • 21.
    Por dentro doFat Binary libs/armeabi Source Code apk build ndk-build libs/armeabi-v7a libs/x86 21 …
  • 22.
    Caso de Estudo– Single APK Size on disk 7% 2% 2% 5% 2% META-INF res AndroidManifest.xml classes.dex resources.arsc 82% 22 lib
  • 23.
    Caso de Estudo– Single APK Tamanho 2% 13% 7% 2% 5% META-INF 2% res AndroidManifest.xml classes.dex 16% resources.arsc lib/armeabi lib/armeabi-v7a 40% 13% 23 lib/mips lib/x86
  • 24.
  • 25.
    Isso é realmenteum problema? • O recomendado é que aplicações de até 50MB sejam Single APK. • Até quando vale a pena manter diferentes versões de APKs? • O que é melhor para o usuário? O que é melhor para o desenvolvimento? 25
  • 26.
    Por quê nãosuportar diversas arquiteturas? 26
  • 27.
    Take aways • Suportardiversas arquiteturas não é difícil, basta querer • Single APK x Multiples APKs: analisar o que é melhor para sua aplicação • Fat Binaries não são necessariamente ruins se tem menos de 50MB • X86: novo processador, ferramentas, compiladores e emulador 27
  • 28.

Notas do Editor

  • #5 A quick description of the contents of the .apk file:AndroidManifest.xml – This is the AndroidManifest.xml file, in binary XML format.classes.dex – This contains the application code, compiled into the dex file format that is used by the Dalvik VM.resources.arsc – This file contains all of the precompiled resources for the application.lib – This directory holds the compiled code for each ABI. It will contain one subfolder for each ABI that was described in the previous section. In the screenshot above, the .apk in question has native libraries for both armeabi-v7a and for x86.META-INF – This directory (if present) is used to store signing information, package, and extension configuration data.res – This directory holds the resources that were not compiled into resources.arsc.
  • #15 You maintain only one set of product details (app description, icons, screenshots, etc.). This also means youcannot charge a different price for different APKs.All users see only one version of your application on Google Play, so they are not confused by different versions you may have published that are "for tablets" or "for phones."All user reviews are applied to the same application listing, even though users on different devices may have different APKs.If you publish different APKs for different versions of Android (for different API levels), then when a user's device receives a system update that qualifies them for a different APK you've published, Google Play updates the user's application to the APK designed for the higher version of Android. Any system data associated with the application is retained (the same as with normal application updates when using a single APK).