Android之APT

Android apt....菜鸟的我是一脸懵逼,哈哈。

英文连接:Android-apt

1、什么是apt:

在Android studio 中,apt 协助处理annotation processors,有两个目的:

1)、允许配置在编译的时候作为注解处理器的依赖,而不添加到apk或者library;

2)、设置源路径,使注解处理器生成的代码能被Android Studio正确的引用;

使用这个插件需要在Android studio 项目中进行依赖配置。

2、在构建脚本中配置apt插件:

//构建脚本
buildscript {
    repositories {
      mavenCentral()
    }
    dependencies {//依赖
        // 替换当前最新的gradle版本
        classpath 'com.android.tools.build:gradle:1.3.0'
        // 替换当前最新的apt插件版本
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

3、传递参数:

一些注解处理器可能需要通过自定义参数,您可以使用apt.arguments。例如对于AndroidAnnotations您可以使用以下配置:

apt {
    arguments {
            resourcePackageName android.defaultConfig.applicationId
            androidManifestFile variant.outputs[0]?.processResources?.manifestFile
    }
}

AndroidAnnotations 需要知道AndroidManifest.xml文件所在的位置,检索variant获取不同flavor的AndroidManifest.xml文件。然而并非所有变量都有这个属性(例如,单元测试就没有),因此使用groovy操作符?.区分不能属性的不同的情况。

def getManifestByVariant(variant) {
    // return the value based on the variant
    if (variant.name == 'release') {
        return '/my/path/to/the/manifest.xml'
    }
    return variant.outputs[0]?.processResources?.manifestFile
}

apt {
     arguments {
         if (variant.name == 'debug') {
            resourcePackageName "com.myapp.package.name.debug"
            // more options
         }             
         androidManifestFile project.getManifestByVariant(variant)             
     }
}
4、配置编译和依赖:

注解一般包含API和使用API生成代码的。项目依赖可能分为多个部分。例如Dagger有两个组件Dagger-compiler和dagger。dagger-commpiler仅用于编译,运行时必需使用dagger。
为Gradle配置这种依赖,可以使用如下:

dependencies {
 apt 'com.squareup.dagger:dagger-compiler:1.1.0'
 compile 'com.squareup.dagger:dagger:1.1.0'

如果你想在Android studio 中看到你生成的代码,可以配置AndroidTestApt;

dependencies {
 androidTestApt 'com.github.frankiesardo:android-auto-value-processor:0.1'
 androidTestCompile 'com.github.frankiesardo:android-auto-value:0.1'
}
使用apt 进行unit tests测试:注意(Android Studio需要1.4以上版本)

dependencies {
 testApt 'com.github.frankiesardo:android-auto-value-processor:0.1'
 testCompile 'com.github.frankiesardo:android-auto-value:0.1'
}

5、其他配置:

它可以指定编译时处理器的类名,并禁用javac默认的发现机制,需要配置这些类到apt块中:

apt {
    processor "my.class.name"
    processor "another.processor.class.name"
    // 仅运行上面的声名的处理器类
    disableDiscovery true
}

配置其它注解:

添加其它注解器不需要额外的配置,你只需要使用apt添加相关组件到compile模块中。另外,处理器所有生成资源都在代码正常引用。

FAQ

Q:什么时候需要这个插件?

A:当你需要引入Processors 生成的源代码到你的代码中时。例如,当你使用Dagger 2 或 AndroidAnnotaition.该插件使得Android Studio可以配置生成资源的build path,避免IDE报错。当使用 apt添加添加依赖,它将不会被包含到最终的APK里。

Q:provided vs apt 使用注解处理器的不同?

A:provided 将会导入注解处理器的classes和它的依赖到IDE的类路径下。这意味着你可以附带的引入并使用这些classes。例如,当注解处理器使用Guava,你可能错误的import其相关代码到你的Android 代码中。当运行时将导致crash。而使用apt,注解处理器的classes将不会添加到你当前的类路径下,仅仅用于注解处理过程。并且会把所有注解处理器生成的source放在IDE的类路径下,方便Android Studio引用。






猜你喜欢

转载自blog.csdn.net/qq_36220729/article/details/59057490
apt