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月更新:您可能不再需要aptandroid-apt插件。 Android Gradle插件的2.2版本有一个annotationProcessorconfiguration,您应该使用它。

有关android-apt的更多信息,请参阅更多内容

只是添加如何在Studio 2.2 +中进行更改

 dependencies { compile 'com.google.dagger:dagger:2.4' annotationProcessor "com.google.dagger:dagger-compiler:2.4" } 

将其添加到应用程序gradle模块中。 没有必要改变任何其他的事情。

快乐编码:)