Android gradle中的apt依赖范围 – 它用于什么?
我有时看到的Android Gradle文件中的apt依赖范围是什么?
一个例子是这样的吗?
apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId "org.ligboy.test.card.module1" minSdkVersion 14 targetSdkVersion 20 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } final DAGGER_VERSION = '2.0.2' dependencies { compile "com.google.dagger:dagger:${DAGGER_VERSION}" apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope provided 'org.glassfish:javax.annotation:10.0-b28' }
而在顶层的build.gradle文件中,它具有这种全局依赖性:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } }
注意在依赖部分有一个适当的范围? 我只知道编译,封装和提供的范围。 编译时在编译时和你的包中都包含了依赖关系,只是提供了编译时包含库在包时抛弃它,所以它没有包含在最终的构build中。 和Package是相反的,它包含了包中的依赖关系,而不是在编译时。 但是,我们明显需要com.neenbedankt.android-apt的apt依赖范围是如何工作的,所以我知道它的基于android的。
更新:为什么不能使用提供的依赖范围,而不是适应范围? 他们有什么不同?
我为那些需要更多信息的人创build了一个关于匕首依赖范围的教程。
从android-apt
项目页面 :
android-apt插件协助与Android Studio结合使用注释处理器。 它有两个目的:
允许将仅编译时注释处理器configuration为依赖项,不包括最终APK或库中的工件
设置源path,以便Android Studio正确拾取由注释处理器生成的代码。
您正在使用Dagger,它使用注释处理来生成代码。 注释处理代码不应该包含在最终的APK中,并且您希望生成的代码对Android Studio可见。 android-apt
启用了这种行为。
这听起来与provided
范围非常相似,但是与几个关键方面有所不同。 第一个区别是由IDE依赖生成的代码可用于IDE,而由provided
依赖生成的代码则不可用。
另一个重要的区别是,使用provided
范围的库中的代码位于IDE类path上(即,您可以导入类并尝试使用它们),而apt
依赖项中的代码则不是。 使用provided
的代码,如果您实际上没有提供引用的依赖关系,则代码将在运行时崩溃。
你可以在这个android-apt
问题上find关于apt
vs的讨论。
在Dagger的情况下,应该没有理由在任何代码中包含注释处理器和代码生成器(所provided
范围允许)。 因此,合适的范围是更合适的。
2016年10月更新:您可能不再需要apt
和android-apt
插件。 Android Gradle插件的2.2版本有一个annotationProcessor
configuration,您应该使用它。
有关android-apt的更多信息,请参阅更多内容
只是添加如何在Studio 2.2 +中进行更改
dependencies { compile 'com.google.dagger:dagger:2.4' annotationProcessor "com.google.dagger:dagger-compiler:2.4" }
将其添加到应用程序gradle模块中。 没有必要改变任何其他的事情。
快乐编码:)