一个例子看起来像这样?
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。
更新:
为什么不能使用提供的依赖关系范围而不是适用范围?它们如何不同?
我创建了一个教程dagger dependency scopes为那些谁需要更多的信息。
android-apt
project page:
The android-apt plugin assists in working with annotation processors in combination with Android Studio. It has two purposes:
Allow to configure a compile time only annotation processor as a dependency,not including the artifact in the final APK or library
Set up the source paths so that code that is generated from the annotation processor is correctly picked up by Android Studio.
您正在使用Dagger,它使用注释处理来生成代码。注释处理代码不应包含在最终APK中,您希望生成的代码对Android Studio可见。 android-apt启用此行为。
这听起来非常类似于提供的范围,但适应不同于几个关键方式提供。第一个区别是,由apt提供的依赖关系生成的代码可用于IDE,而由提供的依赖关系生成的代码则不可用。
另一个重要的区别是,使用提供的作用域的库中的代码在IDE类路径上(即,您可以导入类并尝试使用它们),而apt依赖项中的代码则不是。如果提供,你的代码将在运行时崩溃,如果实际上不提供引用的依赖与编译作用域对端。
您可以在this android-apt
issue上找到关于apt vs的讨论。
在Dagger的情况下,没有理由在任何代码中包含注释处理器和代码生成器(提供范围允许)。因此适用范围更合适。
2016年10月更新:
你可能不需要apt和android-apt插件了。 Android Gradle插件的2.2版本有一个annotationProcessor配置,你应该使用。