Alternar menu

Dicas para desenvolvedores Android para reduzir o tamanho do arquivo APK

Publicados: 2015-10-28
Aqui estão algumas recomendações para meus colegas desenvolvedores Android para reduzir a pegada estática. Você pode escolher os que melhor se adaptam às suas necessidades particulares.

1) ProGuard

Contrate Freelancer no Truelancer

Uma ferramenta para redução de código, como o ProGuard, reduzirá significativamente o tamanho do arquivo APK. A ferramenta está disponível no sourceforge. Observe que é muito importante testar novamente todo o aplicativo após a aplicação do ProGuard, pois às vezes pode alterar o comportamento do aplicativo. Como o ProGuard substitui os símbolos do aplicativo, para dificultar a leitura do código, é importante que você mantenha o mapeamento de símbolos, para poder traduzir um rastreamento de pilha de volta aos símbolos originais se precisar investigar uma falha em seu aplicativo.

2) Remoção de informações de depuração

Eu recomendo que você remova todas as funcionalidades relacionadas à depuração do aplicativo. O aplicativo geralmente não vê ou usa esses dados, e o sistema operacional Android não exige que ele execute o aplicativo. Portanto, as informações de depuração apenas desperdiçam espaço e devem ser removidas.

Para fazer isso, todas as funcionalidades relacionadas à depuração devem ser colocadas em blocos condicionais, como abaixo:

 depuração final estática = false;
 if (depurar) {
 v(TAG, "Depurar ...")
 }

É importante que o sinalizador de depuração seja definido em tempo de compilação (ou seja, declarado como final estático) para que o compilador possa remover completamente todas as funcionalidades de depuração. Criar seu próprio método de depuração como o mostrado abaixo não é uma boa ideia porque a chamada para myDebugPrint() não é delimitada por um bloco condicional, o que significa que o compilador deve reter informações sobre myDebugPrint() na classe de chamada.

 public void myDebugPrint()
se (Depurar)
v(TAG, "Depurar ...");
}
}
…
meuDebugPrint()

3) Remoção de símbolos de depuração de bibliotecas nativas O uso de símbolos de depuração faz sentido se seu aplicativo ainda estiver em desenvolvimento e ainda requer depuração. Mas se os símbolos de depuração ainda estiverem aparecendo quando você compila uma compilação de lançamento e se você deseja removê-los, recomendamos que os símbolos de depuração sejam removidos das bibliotecas nativas (arquivos .so). Isso é feito usando o comando arm-eabi-strip, do Android NDK.

4) Formatos de mídia recomendados Se seu aplicativo depende muito de imagens, áudio ou vídeo, outra maneira de reduzir o tamanho do arquivo APK é usando determinados formatos de mídia. Recomendamos que você use os seguintes formatos de mídia para imagens, áudio e vídeo:

  • Vídeo: Use H264 AVC. Codifique o vídeo para uma resolução não maior que a resolução da tela do dispositivo de destino (se conhecido).
  • Áudio : O áudio AAC é recomendado para todos os recursos de áudio. AAC consegue uma melhor compressão em uma determinada qualidade, em comparação com mp3 ou Ogg Vorbis. Formatos brutos como WAV nunca devem ser usados. O raciocínio comum para usar o formato WAV é que decodificar fluxos de áudio compactados geralmente significa alta latência na reprodução. No entanto, o Android fornece a API Sound Pool, que permite que os aplicativos usem fluxos de áudio compactados sem a penalidade de alta latência.
  • Imagens : PNG ou JPEG. Use PNG; como é um formato sem perdas, é muito adequado para texturas e obras de arte, pois não haverá artefatos visuais da compactação. Se houver restrições de espaço, use JPEGs ou uma combinação de PNGs e JPEGs. Uma imagem JPEG de alta qualidade pode funcionar bem para imagens fotorrealistas grandes, para as quais o esquema de compactação JPEG é otimizado.
  • Otimize tamanhos de PNG sem perder qualidade

Deve ler 5 resoluções financeiras para você definir em 2015

Se você usar o formato PNG, as imagens PNG podem ser reduzidas em tamanho de arquivo sem perder qualidade. Para fazer isso, use uma ferramenta como OptiPNG ou PNGCrush. Ambos são ótimos para reduzir o tamanho do arquivo PNG e, ao mesmo tempo, garantir a qualidade da imagem. PNGcrush é um programa de código aberto que itera sobre filtros PNG e parâmetros zlib (Deflate), compacta a imagem repetidamente usando cada configuração de parâmetro e escolhe a configuração que produz a menor saída compactada (IDAT). Por outro lado, o OptiPNG executa os testes inteiramente na memória e grava apenas o arquivo de saída final no disco. Além disso, oferece várias predefinições de otimização para o usuário.

5) Remova recursos não utilizados Outro grupo potencial de desperdiçadores de espaço a serem considerados para remoção do seu arquivo APK são os recursos não utilizados em seu diretório res, como layouts, drawables e cores não utilizados. Para detectar recursos não utilizados em seu APK que podem ser removidos, use a ferramenta android-unused-resources. Recursos não utilizados do Android é um aplicativo Java que verificará seu projeto em busca de recursos não utilizados.

6) Evite a duplicação Certificar-se de que seu aplicativo não tenha funcionalidades duplicadas ou ativos duplicados é uma maneira óbvia de evitar ter arquivos desnecessários em seu APK. É importante entender quais APIs do Android você usa e a funcionalidade completa que cada uma oferece. Pode ser que uma API do Android já esteja fazendo o trabalho de outra API. Ativos duplicados (strings, bitmaps etc) também são um desperdício de espaço e podem ser facilmente evitados. Em menor grau, o código duplicado também aumentará desnecessariamente o tamanho do binário entregue.

7) Reduza sua contagem de métodos Os desenvolvedores Android ávidos há muito enfrentam um problema indutor de dor de cabeça com seus aplicativos. O número de métodos que um aplicativo pode ter é limitado. Bem, costumava ser limitado. Finalmente, o bom pessoal do Google forneceu a solução em outubro passado, mas estava longe de ser o ideal. Embora muito fácil de implementar, a solução multidex complicou e prolongou significativamente o tempo de compilação. Sem ficar parado, a partir do Lollipop (Android 5.0), toda a Máquina Virtual Android foi revolucionada para oferecer uma solução muito mais suportável, do tipo que ainda melhora o tempo de compilação regular. No entanto, por enquanto, a solução Lollipop também não é ideal. Ele exige que os desenvolvedores desenvolvam apenas contra o Lollipop, o que pode ser problemático, pois a maioria dos aplicativos deseja ser compatível com uma gama maior de públicos e pode ter medo de usar recursos que não estão disponíveis em versões anteriores do Android. Então, agora, a solução Lollipop é uma boa solução Android para o futuro, mas pode não ter muito impacto no presente previsível. Então, o que pode ser feito nesse meio tempo? Todos concordamos que você não deve desistir de recursos e capacidades, apenas para evitar atingir o limite de 65K. Mas não há dúvida de que a melhor prática ainda seria reduzir a contagem de métodos de aplicação. Então, como você ainda pode tentar reduzir sua contagem de métodos sem perder aquela pequena faísca que torna seu aplicativo especial?

Deve ler Diversificando sua carreira com freelancing: benefícios garantidos

Uma breve visão geral: “De onde vêm todos esses métodos?”

O limite de contagem de métodos é aproximadamente de 65 mil métodos (65.536 para ser exato). Isso soa como um número enorme. Se você é um desenvolvedor Android iniciante, pode estar pensando “como tantos aplicativos podem atingir esse número tão rapidamente?” Você provavelmente estaria um pouco correto. Não é fácil escrever tantos métodos sozinho. Mas os desenvolvedores de aplicativos não escrevem seu aplicativo inteiro sozinhos. Os desenvolvedores de aplicativos estão usando cada vez mais bibliotecas de terceiros (SDKs – Software Development Kits), que os ajudam a atingir determinados objetivos e recursos que, de outra forma, teriam que desenvolver completamente por conta própria. De anúncios a aprimoramentos de GUI a redes sociais, relatórios de falhas e muito mais, os SDKs oferecem uma ampla variedade de recursos e APIs que economizam tempo precioso de desenvolvimento e ajudam a lançar seu aplicativo mais rapidamente. Mas cada SDK aumenta sua contagem de métodos, e alguns SDKs estão fazendo mais do que apenas o que você esperava. Não é necessariamente uma coisa ruim, é claro. No entanto, o golpe de misericórdia veio do próprio Google. O kit do Google Play Services é um grande SDK contendo mais de 28.000 métodos. Com o limite sendo 65K, esse número não é exatamente baixo. E muitos desenvolvedores de aplicativos gostariam de usar esse SDK, pois ele abre as portas para o reino mágico do Google, um recurso muito desejado que agrega muito valor ao aplicativo. Neste post, não apenas explicarei como usar seletivamente os pacotes do Google Play Services, mas também fornecerei informações detalhadas sobre quantos métodos cada um desses pacotes adiciona ao seu aplicativo. Então segurem-se em seus lugares, vai ser um passeio atribulado.

O Playground do Google Play Services

Então, quantos métodos o Google Play Services realmente adiciona? Bem, como tudo na vida, é muito mais complicado do que apenas um número de resultados. Mas vamos dar um passo de cada vez. Na verdade, o SDK do Google Play Services contém 19 SDKs diferentes. Com o Gradle, você pode escolher seletivamente quais usar. Tudo o que você precisa fazer é adicionar a seguinte dependência ao arquivo build.gradle do seu módulo de aplicativo:

 dependências {
compilar 'com.google.android.gms:play-services:7.5.0'
}

Com 7.5.0 sendo a versão mais recente do GPS lançada neste momento. Ele é rotulado como revisão 25 dentro do Android SDK Manager. Para escolher pacotes específicos, substitua a linha a seguir por quantas linhas de dependência desejar, especificando pacotes específicos. Digamos, por exemplo, que você queira apenas o Google Plus, Google Games, Google Ads e Google Maps:

 dependências {
compilar 'com.google.android.gms:play-services-plus:7.5.0'
compilar 'com.google.android.gms:play-services-games:7.5.0'
compilar 'com.google.android.gms:play-services-ads:7.5.0'
compilar 'com.google.android.gms:play-services-maps:7.5.0'
}

Não é muito difícil, mas aqui está a primeira captura. Um dos gloriosos 19 SDKs é chamado play-services-base. Se você incluir qualquer pacote do Google Play Service, ele também será adicionado automaticamente. Quantos métodos contém o pacote base? Quase 8.000 (número exato abaixo).

Deve ler a era dos empreendedores freelance: pessoas que têm freelance para um novo nível

E aqui está a segunda captura. Eu não incluí apenas 3 pacotes no exemplo acima. Eu nem incluí apenas 4, se você contar o pacote básico também. Na verdade, eu incluí 5 pacotes. Por quê? Porque o pacote do Google Games usa o pacote do Google Drive, então ele também foi importado (na verdade, o Google Ads também inclui um pacote chamado gerenciador de tags, mas estou contando apenas os pacotes “selecionáveis” aqui).

Então, agora estamos começando a entender por que é um pouco mais difícil contar quantos métodos cada pacote do Google Play Services adiciona ao nosso aplicativo. Incluir um pacote, não significa necessariamente excluir os outros.

Então aqui está o resumo – quais pacotes você pode adicionar, quantos métodos eles adicionam e quais outros pacotes eles trazem para quebrar a festa. Os dados referem-se à versão mais recente do Google Play Services (7.5.0 / revisão 25):

Dicas para desenvolvedores Android para reduzir o tamanho do arquivo APK 2
Número total de métodos: 28175

Número total de métodos: 28.175. Alguns desses números, você tem que admitir, são realmente atrozes. Se tudo que você queria era o pacote panorama, você não pode obter apenas nove métodos, você tem que obter quase 8.000. Não é de admirar que tantos aplicativos estejam chegando perto ou excedendo esse limite de 65K.

Alguns desses números podem parecer um pouco inconsistentes se você tentar somá-los. Isso porque, novamente, a lógica por trás do Google Play Services é um pouco mais complicada do que aparenta. Por exemplo, o Google Analytics inclui um único método do Google Ads para obter o ID de publicidade da conta.

Observe que, ao calcular quanto cada pacote adiciona ao seu aplicativo, certifique-se de excluir os duplos (por exemplo, não conte o pacote base mais de uma vez).

Você não pode adicionar tudo seletivamente

E aqui está a picada final. Existem dois pequenos pacotes dentro do Google Play Services que não podem ser adicionados seletivamente. O pacote de pesquisa (que dá acesso à API do Google Now) inclui apenas 22 métodos. Se você quiser usá-lo, não tem escolha a não ser adicionar todos os mais de 28.000 métodos, todo o Google Play Services. Espero que isso seja corrigido nas versões posteriores.

(Outro pacote “inacessível” é o pacote appstate que inclui 111 métodos, porém agora está obsoleto em favor de SavedGames , incluído no pacote google-play-games).

Contrate Freelancer no Truelancer