apt依赖范围在Android gradle – 它是什么用?

前端之家收集整理的这篇文章主要介绍了apt依赖范围在Android gradle – 它是什么用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是apt依赖范围在android gradle文件我看到有时?

一个例子看起来像这样?

  1. apply plugin: 'com.android.application'
  2. apply plugin: 'com.neenbedankt.android-apt'
  3. android {
  4. compileSdkVersion 20
  5. buildToolsVersion '20.0.0'
  6. defaultConfig {
  7. applicationId "org.ligboy.test.card.module1"
  8. minSdkVersion 14
  9. targetSdkVersion 20
  10. versionCode 1
  11. versionName "1.0"
  12. }
  13. buildTypes {
  14. release {
  15. runProguard false
  16. proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
  17. }
  18. }
  19. }
  20.  
  21. final DAGGER_VERSION = '2.0.2'
  22.  
  23. dependencies {
  24. compile "com.google.dagger:dagger:${DAGGER_VERSION}"
  25. apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope
  26. provided 'org.glassfish:javax.annotation:10.0-b28'
  27. }

并且在顶级build.gradle文件中,它具有此全局依赖性:

  1. buildscript {
  2. dependencies {
  3. classpath 'com.android.tools.build:gradle:1.3.0'
  4. classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
  5. }
  6. }

注意在依赖部分有一个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配置,你应该使用。

查看更多What’s next for android-apt?

猜你在找的设计模式相关文章