编译, 提供, APK - 安卓依赖范围

在向Android项目添加新的依赖项时,特别是在有三个范围选项编译/提供/ APK中。Android StudioDependencies

选择每一个有什么影响,我们什么时候应该使用它们 ?除了名字说什么。

编辑:

“正确处理'提供'和'包装'范围,以做他们应该做的事情。提供的'和'包'不能与Android库一起使用,并且会产生错误。这是来自 http://tools.android.com/tech-docs/new-build-system


答案 1
  • provided- 仅编译时依赖项
  • package- 仅包时间依赖关系
  • compile- 编译时和包时依赖关系

provided通常用于基于注释处理的库。通常,这些库分为两个工件 - “注释”和“编译器”。“编译器”是依赖关系,因为你不需要在应用程序中使用它,只需要编译;“注释”是依赖关系 - 它在应用程序代码中使用,因此可以编译。或者生成的代码可能需要其他依赖项,而您的应用程序可能不需要。例如,匕首依赖关系配置:providedcompile

compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'

答案 2

这些属性来自 maven 作用域

它们只是指示如何在构建过程的每个步骤中处理特定的依赖项。

  1. compile- 默认方法,它只是意味着所有依赖项都应该在编译时可用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。在运行时通常需要编译时依赖项。

  2. package- 声明用于构建应用程序的其他配置。您可以列出向构建过程添加其他功能的插件。

  3. provided- 这意味着运行时环境包含这些依赖项。例如,当您查看库内部时,您将在每个方法主体中看到。android.jarjava.lang.RuntimeException: Stub!

    这会产生一些后果:
    • 您可以在本地开发Android应用程序,而无需完整的Android环境。
    • 您的APK必须在Android设备或模拟器上运行它,因为它们提供了这些方法的实现。
    • 引用 SDK 类的应用将正确生成,因为 jar 提供了类元数据。
    • 除非您使用某些提供工件的库(例如Robolectric),否则您必须在模拟器/设备上运行测试。

provided并且不能与安卓库一起使用,并且会生成错误。package

下面是这样的:sourceSet

enter image description here

有关生成系统的详细信息:https://www.youtube.com/watch?v=LCJAgPkpmR0

一篇关于Gradle的精彩文章:http://www.sinking.in/blog/provided-scope-in-gradle/


推荐