gpt4 book ai didi

android - Gradle 实现与 API 配置

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:35 24 4
gpt4 key购买 nike

在构建我的依赖项时,我试图找出 apiimplementation 配置之间的区别。

在文档中,它说 implementation 有更好的构建时间,但是,看到这个 comment在一个类似的问题中,我想知道这是不是真的。

由于我不是 Gradle 专家,希望有人能提供帮助。我读过 documentation已经,但我想知道一个易于理解的解释。

最佳答案

Gradle compile 关键字已弃用,取而代之的是 apiimplementation 关键字来配置依赖项。

使用 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.gradledependencies{} 中使用 api 配置,如下所示:

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 (but you shouldn't)
System.out.println(InternalLibrary.giveMeAString());

通过这种方式,模块 MyLibrary 可能会“泄露”某些内容的内部实现。你不应该(能够)使用它,因为它不是你直接导入的。

引入了implementation 配置来防止这种情况。所以现在,如果您在 MyLibrary 中使用 implementation 而不是 api:

dependencies {
implementation project(':InternalLibrary')
}

您将无法再在您的应用代码中调用 InternalLibrary.giveMeAString()

这种装箱策略允许 Android Gradle 插件知道,如果您在 InternalLibrary 中编辑某些内容,它只能触发 MyLibrary 的重新编译,不会 重新编译整个应用程序,因为您无权访问 InternalLibrary

当你有很多嵌套的依赖时,这个机制可以大大加快构建速度。 (观看最后链接的视频以充分理解这一点)

结论

  • 当您切换到新的 Android Gradle 插件 3.X.X 时,您应该将所有的 compile 替换为 implementation 关键字 *(1)。然后尝试编译和测试您的应用程序。如果一切正常,请按原样保留代码,如果您遇到问题,则可能是您的依赖项有问题,或者您使用了现在私有(private)且无法访问的东西。 *Android Gradle 插件工程师 Jerome Dochez 的建议 (1))

  • 如果您是库维护者,您应该为库的公共(public) API 所需的每个依赖项使用 api,同时为测试依赖项使用 implementation或最终用户不得使用的依赖项。

Useful article展示实现api

之间的区别

引用文献(这是为了节省时间而拆分的同一视频)

Google I/O 2017 - How speed up Gradle builds (FULL VIDEO)

Google I/O 2017 - How speed up Gradle builds (NEW GRADLE PLUGIN 3.0.0 PART ONLY)

Google I/O 2017 - How speed up Gradle builds (reference to 1*)

Android documentation

关于android - Gradle 实现与 API 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com