Plug-in do Android para Gradle 3.6.0 (fevereiro de 2020)
Esta versão do plug-in do Android requer o seguinte:
Versão mínima | Versão padrão | Observações | |
---|---|---|---|
Gradle | 5.6.4 | 5.6.4 | Para saber mais, consulte Como atualizar o Gradle. |
Ferramentas de build do SDK | 28.0.3 | 28.0.3 | Instale ou configure as Ferramentas de build do SDK. |
Esta atualização secundária oferece suporte a novas configurações e recursos padrão para visibilidade do pacote no Android 11.
Consulte as notas da versão 4.0.1 para saber mais detalhes.
Novos recursos
Esta versão do Plug-in do Android para Gradle inclui os novos recursos a seguir.
Vinculação de visualizações
A vinculação de visualizações fornece segurança durante a compilação quando há referências a visualizações
no código. Agora você pode substituir findViewById()
pela referência
de classe de vinculação gerada automaticamente. Para começar a usar a vinculação de visualizações,
inclua o seguinte no arquivo build.gradle
de cada módulo:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Para saber mais, leia a documentação de Vinculação de visualizações.
Suporte ao plug-in Maven Publish
O Plug-in do Android para Gradle oferece suporte ao plug-in Maven Publish para Gradle, que permite a publicação de artefatos de build em um repositório Apache Maven. O Plug-in do Android para Gradle cria um componente para cada artefato de variante de build no módulo do app ou da biblioteca usado para personalizar uma publicação para um repositório Maven (links em inglês).
Para saber mais, acesse a página sobre como usar o plug-in Maven Publish.
Nova ferramenta de empacotamento padrão
Ao criar a versão de depuração do app, o plug-in usa uma nova
ferramenta de empacotamento, chamada zipflinger, para criar o APK. Essa nova
ferramenta vai trazer melhorias de velocidade de build. Se a nova ferramenta de empacotamento
não funcionar como esperado,
informe um bug. Você pode voltar a usar a
ferramenta de empacotamento antiga incluindo o seguinte no
arquivo gradle.properties
:
android.useNewApkCreator=false
Atribuição do build nativo
Agora é possível determinar o tempo que o Clang leva para criar e vincular cada arquivo C/C ++ no seu projeto. O Gradle pode gerar um trace do Chrome que contém carimbos de data/hora para esses eventos do compilador para que você possa analisar o tempo necessário para criar seu projeto. Para gerar esse arquivo de atribuição de build, faça o seguinte:
-
Adicione a flag
-Pandroid.enableProfileJson=true
ao gerar um build do Gradle. Exemplo:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Abra o navegador Chrome e digite
chrome://tracing
na barra de pesquisa. -
Clique no botão Load e navegue até
<var>project-root</var>/build/android-profile
para encontrar o arquivo. O nome do arquivo éprofile-<var>timestamp</var>.json.gz
.
Você pode conferir os dados de atribuição do build nativo perto da parte de cima do visualizador:
Mudanças de comportamento
Ao usar esta versão do plug-in, você pode encontrar as seguintes mudanças no comportamento.
Bibliotecas nativas empacotadas descompactadas por padrão
Quando você cria seu app, o plug-in agora define
extractNativeLibs
como "false"
por
padrão. Ou seja, suas bibliotecas nativas são alinhadas na página e empacotadas
sem compactação. Apesar de isso gerar um tamanho do upload maior, seus usuários
se beneficiam pelos seguintes motivos:
- O tamanho de instalação do app é menor porque a plataforma pode acessar as bibliotecas nativas diretamente do APK instalado, sem criar uma cópia das bibliotecas.
- O tamanho de download é menor, porque a compactação da Play Store geralmente é melhor quando você inclui bibliotecas nativas não compactadas no seu APK ou Android App Bundle.
Se, em vez disso, você quiser que o Plug-in do Android para Gradle empacote bibliotecas nativas compactadas, inclua o seguinte no manifesto do app:
<application
android:extractNativeLibs="true"
... >
</application>
Observação: o atributo de manifesto extractNativeLibs
foi substituído pela
opção DSL useLegacyPackaging
. Para saber mais, consulte a nota da versão
Usar a DSL para empacotar bibliotecas
nativas compactadas.
Versão padrão do NDK
Se você fizer o download de várias versões do NDK, o Plug-in do Android para Gradle
agora vai selecionar uma versão padrão para compilar seus arquivos de código-fonte.
Antes, o plug-in selecionava a versão mais recente do NDK transferida por download.
Use a propriedade android.ndkVersion
no arquivo
build.gradle
do módulo para substituir o padrão selecionado pelo plug-in.
Geração de classe R simplificada
O Plug-in do Android para Gradle simplifica o caminho de classe de compilação gerando apenas uma classe R para cada módulo de biblioteca no projeto e compartilhando essas classes R com outras dependências do módulo. Essa otimização proporciona builds mais rápidos, mas exige que você tenha em mente o seguinte:
- Como o compilador compartilha classes R com dependências de módulo upstream, é importante que cada módulo do projeto use um nome de pacote exclusivo.
- A visibilidade da classe R de uma biblioteca para outras dependências do projeto
é determinada pela configuração usada para incluir a biblioteca como
dependência. Por exemplo, se a Biblioteca A incluir a Biblioteca B como uma
dependência "API", a Biblioteca A e outras bibliotecas que dependem dela vão ter
acesso à classe R da Biblioteca B. No entanto, outras bibliotecas podem não ter
acesso à classe R da Biblioteca B. Se a Biblioteca A usar a
configuração de dependência
implementation
. Para saber mais, leia sobre as configurações de dependência.
Remover recursos ausentes da configuração padrão
Para módulos de Biblioteca, se você adicionar um recurso a um idioma que
não incluiu no conjunto padrão de recursos (por exemplo, se você incluir
hello_world
como um recurso de string em
/values-es/strings.xml
, mas não definir esse recurso em
/values/strings.xml
), o Plug-in do Android para Gradle não
vai incluir mais esse recurso ao compilar seu projeto. Essa mudança de comportamento
resulta em menos exceções de tempo de execução Resource Not Found
e maior
velocidade de build.
O D8 agora respeita a política de retenção de classe para anotações
Ao compilar seu app, o D8 agora respeita quando as anotações aplicam uma política de retenção CLASS, e essas anotações não estão mais disponíveis no ambiente de execução. Esse comportamento também existe ao definir o SDK de destino do app para a API de nível 23, que anteriormente permitia acessar essas anotações durante a execução ao compilar o app usando versões mais antigas do Plug-in do Android para Gradle e do D8.
Outras mudanças de comportamento
-
aaptOptions.noCompress
não diferencia mais caracteres maiúsculos de minúsculos em todas as plataformas (para APK e pacotes) e respeita caminhos que usam caracteres maiúsculos. -
A vinculação de dados agora é incremental por padrão. Para saber mais, consulte o problema 110061530.
-
Todos os testes de unidade, incluindo Roboeletric, agora podem ser totalmente armazenados em cache. Para saber mais, consulte o problema 115873047.
Correções de bugs
Esta versão do Plug-in do Android para Gradle inclui as seguintes correções de bugs:
- Agora, os testes de unidade Roboletric têm suporte de módulos de biblioteca que usam vinculação de dados. Para saber mais, consulte o problema 126775542.
- Agora é possível executar tarefas
connectedAndroidTest
em vários módulos enquanto o modo de execução paralela do Gradle está ativado.
Problemas conhecidos
Esta seção descreve problemas conhecidos que existem no Plug-in do Android para Gradle 3.6.0.
Desempenho lento da tarefa Android Lint
O Android Lint pode levar muito mais tempo para ser concluído em alguns projetos devido a uma regressão na infraestrutura de análise, o que resulta em um cálculo mais lento de tipos de inferência para lambdas em determinadas construções de códigos.
O problema é relatado como um bug no IDEA e será corrigido no Plug-in do Android para Gradle 4.0.
Falta a classe do manifesto {:#agp-missing-manifest}
Se o app define permissões personalizadas no manifesto, o Plug-in
do Android para Gradle normalmente gera uma classe Manifest.java
que
inclui suas permissões personalizadas como constantes de string. O plug-in empacota
essa classe com seu app para que você possa referenciar essas
permissões com mais facilidade no tempo de execução.
A geração da classe de manifesto está corrompida no Plug-in do Android para Gradle 3.6.0.
Se você criar seu app com essa versão do plug-in e fizer referência à
classe de manifesto, talvez ocorra uma
exceção ClassNotFoundException
. Para resolver esse problema, execute uma destas ações:
-
Refira-se às suas permissões personalizadas pelo nome totalmente qualificado. Por exemplo:
"com.example.myapp.permission.DEADLY_ACTIVITY"
. -
Defina suas próprias constantes, conforme mostrado abaixo:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }