Android gradle中的apt依赖范围 - 它用于什么?

时间:2016-01-26 14:46:37

标签: android gradle android-gradle

我有时会看到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的教程。

2 个答案:

答案 0 :(得分:68)

来自android-apt project page

  

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上找到关于aptprovided的讨论。

对于Dagger,没有理由在任何代码中包含注释处理器和代码生成器(provided范围允许)。因此apt范围更合适。

2016年10月更新 您可能不再需要aptandroid-apt插件了。 Android Gradle插件的2.2版本具有annotationProcessor配置,您应该使用它。

What's next for android-apt?

了解详情

答案 1 :(得分:11)

添加如何在Studio 2.2 +中添加更改

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

在apps gradle模块中添加此项。无需改变任何其他事情。

快乐编码:)

相关问题