compile不推荐使用Gradle 关键字,而推荐使用apiand implementation关键字来配置依赖项。
using api等同于不推荐使用compile,因此如果您将所有内容替换为所有内容compile,则api一切将一如既往。
要了解implementation关键字,请考虑以下示例。
例
假设您有一个名为的库MyLibrary,该库在内部使用了另一个名为的库InternalLibrary。像这样:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
假设MyLibrary build.gradle使用api配置dependencies{}如下:
dependencies {
api project(':InternalLibrary')
}
您想MyLibrary在代码中使用,以便在应用程序中build.gradle添加以下依赖项:
dependencies {
implementation project(':MyLibrary')
}
使用api配置(或不推荐使用compile),您可以InternalLibrary在应用程序代码中访问:
// 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());
这样,模块MyLibrary可能会“泄漏”某些东西的内部实现。您不应该(不能)使用它,因为它不是您直接导入的。
该implementation引入的配置,以防止这一点。所以现在,如果您使用implementation而不是apiin MyLibrary:
dependencies {
implementation project(':InternalLibrary')
}
您将无法再调用InternalLibrary.giveMeAString()您的应用代码。
这种装箱策略使Android Gradle插件知道,如果您在其中进行编辑InternalLibrary,则它只能触发重新编译MyLibrary而不是整个应用程序的重新编译,因为您无权访问InternalLibrary。
当您有很多嵌套的依赖项时,此机制可以大大加快构建速度。(请观看最后链接的视频,以全面了解此内容)
结论
当您切换到新的Android Gradle插件3.XX时,应将所有关键词替换compile为(1 *)。然后尝试编译和测试您的应用程序。如果一切正常,则将代码保留原样,如果遇到问题,则可能是依赖项有问题,或者您使用的是现在私有的且无法访问的东西。Android Gradle插件工程师Jerome Dochez的建议(1)*)implementation
如果您是图书馆管理员,则应使用图书馆api公共API所需的每个依赖项,同时使用implementation测试依赖项或最终用户不得使用的依赖项。
有用的文章展示了实现和api之间的区别
参考
(这是为节省时间而分割的同一视频)
Google I / O 2017-如何加快Gradle构建速度(FULL VIDEO)
Google I / O 2017-如何加快Gradle的构建速度(仅限NEW GRADLE PLUGIN 3.0.0部分)
Google I / O 2017-如何加快Gradle构建(参考1 *)
Android文档