编译,提供,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过程的每个步骤中处理特定的依赖关系。
-
compile
– 一个默认的方法,它只是意味着所有的依赖应该在编译时可用。 编译依赖关系在项目的所有类path中都可用。 而且,这些依赖关系被传播到依赖项目。 运行时通常需要编译时间依赖性。 -
package
– 声明用于构build应用程序的其他configuration。 您可以列出为构build过程添加其他function的插件。 -
provided
– 这意味着运行时环境包含这些依赖关系。 例如,当您查看android.jar
库内部时,您将看到java.lang.RuntimeException: Stub!
在每一个方法体内。这有一些后果:
- 您可以在本地开发Android应用程序,而无需拥有完整的Android环境。
- 你的APK必须在Android设备或模拟器上运行它,因为它们提供了这些方法的实现。
- 您的引用SDK类的应用程序将正确构build,因为该jar提供类元数据。
- 除非您使用某个提供工件的库(例如Robolectric ), 否则您必须在仿真器/设备上运行testing。
provided
和package
不能用于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中。
- 尝试“System.Web.Mvc.PreApplicationStartCode.Start()”到关键方法“System.Web.WebPages.Razor.PreApplicationStartCode.Start()”失败
- 为什么更新composer php的依赖关系是如此之慢?
- .NET / Windows Forms项目有没有替代Maven的?
- 如果在解决scheme中使用项目依赖关系,MSBuild不会复制引用(DLL文件)
- 如何排除Maven插件中的依赖?
- 在Visual Studio 2010中,“链接库依赖项”链接器选项实际上做了什么?
- npm通过package.json中的依赖来安装私人github存储库
- 无法加载c ++ bson扩展
- Maven:无法读取工件描述符