A compile
palavra-chave Gradle foi descontinuada em favor das palavras-chave api
e implementation
para configurar dependências.
Usar api
é o equivalente a usar o obsoleto compile
, portanto, se você substituir todos compile
por api
tudo, tudo funcionará como sempre.
Para entender a implementation
palavra - chave, considere o seguinte exemplo.
EXEMPLO
Suponha que você tenha uma biblioteca chamada MyLibrary
que internamente use outra biblioteca chamada InternalLibrary
. Algo assim:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Suponha que a configuração de MyLibrary
build.gradle
usos seja assim:api
dependencies{}
dependencies {
api project(':InternalLibrary')
}
Você deseja usar MyLibrary
no seu código e, no aplicativo, build.gradle
adicionar esta dependência:
dependencies {
implementation project(':MyLibrary')
}
Usando a api
configuração (ou obsoleta compile
), você pode acessar InternalLibrary
no código do seu aplicativo:
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
Dessa maneira, o módulo MyLibrary
está potencialmente "vazando" a implementação interna de algo. Você não deve poder usá-lo porque não é importado diretamente por você.
A implementation
configuração foi introduzida para evitar isso. Portanto, agora se você usa implementation
em vez de api
em MyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
você não poderá mais acessar InternalLibrary.giveMeAString()
o código do seu aplicativo.
Esse tipo de estratégia de boxe permite que o plug-in Android Gradle saiba que, se você editar algo InternalLibrary
, ele deve acionar a recompilação MyLibrary
e não a recompilação de todo o aplicativo, porque você não tem acesso InternalLibrary
.
Quando você tem muitas dependências aninhadas, esse mecanismo pode acelerar muito a compilação. (Assista ao vídeo no final do link para uma compreensão completa disso)
CONCLUSÕES
Ao mudar para o novo plug-in Android Gradle 3.XX, você deve substituir todo o seu compile
pela implementation
palavra - chave (1 *) . Em seguida, tente compilar e testar seu aplicativo. Se tudo estiver ok, deixe o código como está, se você tiver problemas, provavelmente há algo errado com suas dependências ou usou algo que agora é privado e não é mais acessível. Sugestão do engenheiro de plug-in Android Gradle Jerome Dochez (1 ) * )
Se você é um mantenedor de biblioteca, deve usar api
para todas as dependências necessárias para a API pública da sua biblioteca, enquanto usa implementation
para dependências de teste ou dependências que não devem ser usadas pelos usuários finais.
Artigo útil Mostrando a diferença entre implementação e API
REFERÊNCIAS
(este é o mesmo vídeo dividido para economizar tempo)
E / S do Google 2017 - Como acelerar a construção do Gradle (VÍDEO COMPLETO)
Google I / O 2017 - Como acelerar a criação do Gradle (SOMENTE NOVA GRADLE PLUGIN 3.0.0)
Google I / O 2017 - Como acelerar a criação do Gradle (referência a 1 * )
Documentação do Android