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
• É 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
4. A estrutura do APK
•
•
•
•
•
•
AndroidManifest.xml
classes.dex
resource.arsc
META-INF
Res
lib
4
5. Como os APKs sã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
10. … 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
11. 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)
12. 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
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
• 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
15. 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
16. 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
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
• 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
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
• Por definiçã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 do Fat 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
25. 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
26. Por quê não suportar diversas
arquiteturas?
26
27. 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
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.
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).