Android gradle中的apt依赖范围-它的用途是什么?
我有时看到的android gradle文件中的apt依赖范围是什么 一个例子是这样的Android gradle中的apt依赖范围-它的用途是什么?,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,我有时看到的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.te
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'
}
}
注意,在依赖项部分有一个apt范围?我只知道编译、打包和提供的范围。编译
在编译时和包中包含依赖项,前提是仅在编译时包含库并在
打包时间,因此不包括在最终构建中。包是相反的,它在包中包含依赖项,而不是在编译时。
但是什么是apt依赖范围,我们显然需要com.neenbedankt.android-apt才能工作,所以我知道它是基于android的
更新:
为什么我不能使用提供的依赖范围而不是apt范围?它们有何不同
我为那些需要更多信息的人创建了一个教程 来自:
android apt插件与android Studio结合使用,有助于使用注释处理器。它有两个目的:
- 允许将仅编译时注释处理器配置为依赖项,不包括最终APK或库中的工件
- 设置源路径,以便Android Studio正确拾取从注释处理器生成的代码
android apt
启用此行为
这听起来非常类似于提供的
范围,但是apt
在一些关键方面与提供的
不同。第一个区别是,apt
依赖项生成的代码可用于IDE,而由提供的
依赖项生成的代码则不可用
另一个重要区别是,使用提供的范围的库中的代码位于IDE类路径上(即,您可以导入类并尝试使用它们),而apt
依赖项中的代码则不在IDE类路径上。使用提供的
,如果您实际上没有为引用的依赖项提供编译
作用域对应项,则代码将在运行时崩溃
您可以在上找到关于apt
vs的讨论
对于Dagger,应该没有理由在任何代码中包含注释处理器和代码生成器(提供的范围允许)。因此,apt
范围更合适
2016年10月更新:
您可能不再需要apt
和android apt
插件了。Android Gradle插件的2.2版有一个annotationProcessor
配置,您应该改用它
有关如何在Studio 2.2+中更改此设置的详细信息,请参见
dependencies {
compile 'com.google.dagger:dagger:2.4'
annotationProcessor "com.google.dagger:dagger-compiler:2.4"
}
将此添加到应用程序渐变模块中。不需要改变任何其他东西
快乐编码:)为什么在这种情况下我不能使用“提供”而不是apt?我想如果你回答的话,我会把事情弄清楚的。补充了对差异的解释。太棒了。我还使用gradle中提供的“org.glassfish:javax.annotation:10.0-b28”。你认为把它做成一个合适的范围会更好吗?这样就不会在代码中包含任何生成器,对吗?您当然可以尝试一下。但是,如果该依赖项实际上是在运行时使用的(例如,通过反射),并且是由另一个依赖项提供的,则您的应用程序可能会崩溃。