编译,提供,APK – Android依赖范围

在向Android项目添加新的依赖关系的时候,特别是在Dependencies中的Android Studio中,有三个范围选项:Compile / Provided / APK。

什么是select每一个的影响,我们应该什么时候使用它们? 除了名字所说的。

编辑:

“正确处理'提供'和'包'范围做他们应该做的事情'提供'和'包'不能用于Android库,并会产生一个错误”..这是从http://工具。 android.com/tech-docs/new-build-system

  • provided – 编译时只依赖
  • package – 包时间只依赖
  • compile时间和封装时间依赖性

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

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

这些属性来自maven范围 。

他们只是指出如何在构build过程的每个步骤中处理特定的依赖关系。

  1. compile – 一个默认的方法,它只是意味着所有的依赖应该在编译时可用。 编译依赖关系在项目的所有类path中都可用。 而且,这些依赖关系被传播到依赖项目。 运行时通常需要编译时间依赖性。

  2. package – 声明用于构build应用程序的其他configuration。 您可以列出为构build过程添加其他function的插件。

  3. provided – 这意味着运行时环境包含这些依赖关系。 例如,当您查看android.jar库内部时,您将看到java.lang.RuntimeException: Stub! 在每一个方法体内。

    这有一些后果:

    • 您可以在本地开发Android应用程序,而无需拥有完整的Android环境。
    • 你的APK必须在Android设备或模拟器上运行它,因为它们提供了这些方法的实现。
    • 您的引用SDK类的应用程序将正确构build,因为该jar提供类元数据。
    • 除非您使用某个提供工件的库(例如Robolectric ), 否则您必须在仿真器/设备上运行testing。

providedpackage不能用于Android库,并会产生一个错误。

以下是sourceSet样子:

在这里输入图像说明

有关构build系统的更多信息: https : //www.youtube.com/watch?v = LCJAgPkpmR0

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

Xavier 在这里谈论APK范围。

在Android插件中,等效(有点)的运行时被称为apk。 你可以做

依赖关系{apk文件('libs / foo.jar')}

它只会被打包,但不会在编译类path中。