我有时会看到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'
}
}
请注意,依赖项部分中有一个apt范围?我只知道编译,包和提供的范围。编 包括编译时和包中的依赖项,前提是只在编译时包含库并将其丢弃 包时间因此不包含在最终版本中。和Package是相反的,它包括包中的依赖,而不是在编译时。 但是什么是apt依赖范围,我们显然需要com.neenbedankt.android-apt才能工作,所以我知道它基于android。
更新: 为什么我不能使用提供的依赖范围而不是 apt 范围?他们有什么不同?
我为那些需要更多信息的人创建了dagger dependency scopes的教程。
答案 0 :(得分:68)
android-apt插件有助于与Android Studio结合使用注释处理器。它有两个目的:
允许将编译时只将注释处理器配置为依赖项,不包括最终APK或库中的工件
设置源路径,以便Android Studio正确选取从注释处理器生成的代码。
您正在使用Dagger,它使用注释处理来生成代码。注释处理代码不应包含在最终的APK中,并且您希望生成的代码对Android Studio可见。 android-apt
启用此行为。
这听起来与provided
范围非常相似,但apt
在几个关键方面与provided
不同。第一个区别是,apt
依赖项生成的代码可供IDE使用,而provided
依赖项生成的代码则不可用。
另一个重要区别是使用provided
范围的库中的代码位于IDE类路径上(即您可以导入类并尝试使用它们),而apt
依赖项中的代码不是。对于provided
,如果您实际上未使用compile
范围的对应项提供引用的依赖项,则代码将在运行时崩溃。
您可以在this android-apt
issue上找到关于apt
与provided
的讨论。
对于Dagger,没有理由在任何代码中包含注释处理器和代码生成器(provided
范围允许)。因此apt
范围更合适。
2016年10月更新
您可能不再需要apt
和android-apt
插件了。 Android Gradle插件的2.2版本具有annotationProcessor
配置,您应该使用它。
答案 1 :(得分:11)
添加如何在Studio 2.2 +中添加更改
dependencies {
compile 'com.google.dagger:dagger:2.4'
annotationProcessor "com.google.dagger:dagger-compiler:2.4"
}
在apps gradle模块中添加此项。无需改变任何其他事情。
快乐编码:)