`
zhhaogen
  • 浏览: 13408 次
  • 性别: Icon_minigender_1
  • 来自: 未知
社区版块
存档分类
最新评论

android studio 注解处理应用

 
阅读更多

1.AbstractProcessor类介绍

在eclipse上能够利用注释处理高效率的处理代码,同样也能用于Android studio上。

javax.annotation.processing.AbstractProcessor

是一个抽象类,位于javax.annotation.processing包,无关ide。通过实现

public abstract boolean process(Set<? extends TypeElement> annotations,
                                RoundEnvironment roundEnv)

处理源码上所标注注释。

2.注释的分类

按照功能,注释分为3类:

a.@Retention(RetentionPolicy.SOURCE),不需要记录在类文件

b.@Retention(RetentionPolicy.CLASS) ,需要记录在类文件,但在运行中并不需要保留

c.@Retention(RetentionPolicy.RUNTIME) ,需要记录在类文件,并在运行中需要保留

c类能够在运行时通过反射方式调用处理,灵活应用,但需要牺牲一定的性能,和不能够进行混淆丢失原有信息,缺乏安全性。

AbstractProcessor通过处理注释并不会影响性能,也完全可以正常混淆。

 

3.build.gradle配置

在模块dependencies中,添加provided 注释库(包含所有的@interface类),添加annotationProcessor 注释处理库(包含AbstractProcessor类)

一个完整的模块build.gradle例子

 

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"


    defaultConfig {
        applicationId "cn.zhg.test.annotations"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "0.9.0"


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    provided project(':libannotations')
    annotationProcessor project(':processor')
}
 项目目录结构为

 


 

4.注释类库

新建libannotations java库模块,如这里创建一个InjectParcel注释用于,将实体类自动实现Parcel,

 

package cn.zhg.test.annotations;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.CLASS)
@Target({  ElementType.TYPE})
public @interface InjectParcel
{
    /**
     * 指定生成类名
     * @return
     */
    String value() default "";
}
 @Target({  ElementType.TYPE})指定只能用于类上,@Retention(RetentionPolicy.CLASS) 不需要在运行时使用

 

5.注释处理类

新建Processor java模块,在main下创建resources文件夹,在main\resources\META-INF\services\创建javax.annotation.processing.Processor文件指定处理类,处理类TestInjectProcessor继承javax.annotation.processing.AbstractProcessor类。

@SupportedAnnotationTypes("cn.zhg.test.annotations.*")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class TestInjectProcessor extends AbstractProcessor
 指定支持版本和注释类,在process中获取所有需要处理的注释
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment)
    {
        log("正在处理...");
        Set<? extends Element> annotations = roundEnvironment.getElementsAnnotatedWith(InjectParcel.class);
 获取目标类的信息
TypeElement classElement = (TypeElement) ele;
                    String packageName = elementUtils.getPackageOf(classElement).getQualifiedName().toString();//包名
                    String  className = classElement.getQualifiedName().toString();//全名
                    String  simpleName = classElement.getSimpleName().toString();//简名
                    String targetClassName=simpleName+"Parcel";//生成类的名称
                    InjectParcel an = classElement.getAnnotation(InjectParcel.class);
                    if(!an.value().isEmpty())
                    {
                        targetClassName=an.value();
                    }
 通过processingEnv.getFiler()#createSourceFile创建源码
JavaFileObject jfo = processingEnv.getFiler().createSourceFile(packageName+"."+targetClassName);
try( Writer writer = jfo.openWriter())
                       {
//写入源码
}
 每次构建,源码都会生成在{ProjectDir}/{ModuleName}/build/generated/source/apt/{BuildVar}
6.结尾

完整源码

https://github.com/zhhaogen/TestAnnotations.git

  • 大小: 12.2 KB
分享到:
评论

相关推荐

    安卓期末项目作业Android studio

    8. **插件支持**:Android Studio支持丰富的第三方插件,如Butter Knife for注解绑定,Android Debug Database用于实时查看数据库内容,以及Instant Run快速部署应用等。 9. **Kotlin支持**:自Android Studio 3.0...

    Android studio插件集合

    本资源是一个“Android Studio插件集合”,它包含了多个常用且不易找到的插件,旨在帮助开发者更加高效地进行Android应用开发。 首先,我们来了解一下Android Studio插件的重要性。这些插件可以自动化常见的任务,...

    基于 Android studio 开发的记账本,带有详细报告

    在Android Studio中开发一个记账本应用是一项常见的实践任务,它可以帮助用户跟踪和管理个人财务。这个基于Android Studio的记账本项目具有详尽的报告功能,为用户提供了一种直观的方式来了解自己的收支情况。让我们...

    AndroidStudio实现天气预报小程序源码

    在移动开发领域,Android Studio是Google推出的一款强大的集成开发环境(IDE),专为Android应用开发设计。利用Android Studio,开发者可以高效地构建高质量、高性能的应用程序。本教程将详细介绍如何使用Android ...

    官方Launcher3可以在Android Studio上编译

    Android Studio是Google为Android开发者提供的集成开发环境(IDE),它提供了全面的工具集,用于构建、调试和发布Android应用程序。本话题聚焦于如何将官方的Launcher3源代码导入Android Studio,并进行编译,以便...

    Android Studio编写的简单数字时钟

    通过这个简单的数字时钟项目,开发者可以学习到Android应用开发的基础知识,包括线程通信、UI设计、时间处理以及代码组织和注释的重要性。这个项目不仅是一个实用的小应用,也是进一步深入Android开发的良好起点。

    AndroidStudio理财小助手

    【AndroidStudio理财小助手】是一款基于Android Studio开发的安卓应用,旨在帮助用户管理个人财务,实现简单的记账功能。这款应用作为一个安卓期末大作业,展示了开发者在移动应用开发上的技能和对用户需求的理解。 ...

    Android Studio实现简单的购物商城界面源码

    在Android应用开发中,创建一个简单的购物商城界面是常见的需求,尤其对于初学者而言,这是一个很好的实践项目。本文将详细讲解如何使用Android Studio和ListView组件来实现这样的界面。首先,我们要理解ListView的...

    Android Studio实现一个简约记账APP,代码附详细注释.zip

    在本项目中,我们主要探讨如何使用Android Studio开发一个简易的记账应用程序。这个项目名为"OneAccount",它提供了一个基础的框架,帮助初学者理解Android应用开发的基本流程和技术。 首先,Android Studio是...

    仿微信图片选择器(Android Studio版)

    【标题】"仿微信图片选择器(Android Studio版)"是一个专门为Android应用开发者设计的开源项目,它旨在帮助开发者在自己的应用中实现类似微信的图片选择功能。这个项目基于Android Studio开发,使得开发者可以轻松...

    基于Android studio的2048游戏设计源代码以及文档设计

    总的来说,基于Android Studio的2048游戏设计涉及到了Android应用开发的基础知识,如UI设计、事件处理、数据结构和算法。通过这个项目,开发者不仅可以提升编程技能,还能深入理解游戏开发的流程。提供的源代码和...

    仿微信 Android Studio

    【标题】"仿微信 Android Studio" 是一个专为Android开发者设计的项目,旨在帮助他们...通过学习和实践这个项目,开发者不仅能掌握基本的UI设计,还能了解到如何组织和注释代码,以及如何构建复杂的Android应用程序。

    Android Studio实现一个简约记账APP,代码附详细注释

    在本项目中,我们将探讨如何使用Android Studio来创建一个简易的记账应用程序。...通过这个项目,开发者不仅能掌握Android应用开发的基本流程,还能深入理解数据存储、用户界面设计以及事件处理等多个关键环节。

    Android Studio 1.3下载

    App permission annotations Android Studio 现在支持内嵌代码的注释,以帮助您在 Android M 管理 app permissions。了解更多 code annotations. Data Binding Support 新的数据 brinding 特性,可让您通过将您的...

    简单的 Android 浏览器源码,基于 Android Studio.zip

    这款名为"简单的 Android 浏览器源码,基于 Android Studio.zip"的压缩包提供了一个基础的安卓浏览器应用源代码,适合初学者或者希望快速理解Android浏览器实现的开发者。该源码仅包含大约400行代码,注释详尽,便于...

    基于Android Studio开发的旅游记录与分享APP源码,Android旅游路线记录与分享APP源码

    在本项目中,我们主要探讨的是一个基于Android Studio开发的旅游记录与分享应用程序。这个APP的设计目的是为了帮助用户轻松地规划他们的旅行路线,记录旅行经历,并与其他旅行爱好者分享这些珍贵的时刻。以下将详细...

    AndroidStudio工程清理工具(批处理)

    ### AndroidStudio工程清理工具(批处理)知识点解析 #### 一、工具概述 **AndroidStudioCleanKit**是一款专为Android Studio开发环境设计的项目清理工具,主要功能是帮助开发者高效地清理项目中的冗余文件,如...

    androidStudio测试代码

    本主题主要围绕"androidStudio测试代码"展开,将详细介绍如何在Android Studio中进行代码测试,以及相关的测试技术和实践。 一、Android Studio与测试框架 Android Studio内置了JUnit和Espresso等测试框架,使得...

    Android Studio 插件android-butterknife-zelezny.jar

    Android Studio 是Google官方推出的Android应用开发集成环境,它提供了丰富的功能和工具,使得开发者能够高效地构建、测试和调试应用程序。在Android Studio中,插件是扩展其功能的重要方式,可以提升开发效率并简化...

    Android Studio 配置与使用

    在开始使用 Android Studio 进行应用开发之前,一个重要的准备工作就是配置好 Android SDK。这通常包括选择合适的 API 级别、安装必要的系统镜像等。 **基本步骤如下:** 1. **打开 SDK Manager:** 在 Android ...

Global site tag (gtag.js) - Google Analytics