Android之使用apt编写编译时注解
2016-08-16 21:33
423 查看
参考链接:https://bitbucket.org/hvisser/android-apthttp://www.open-open.com/lib/view/open1423471786764.htmlhttp://alighters.com/blog/2016/05/10/apt-code-generate/
app的build.gradle中添加如下依赖:
来自为知笔记(Wiz)
定义注解
@Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface CocaAptTest { String value(); }
自定义虚处理器AbstractProcessor
注:若使用AndroidStudio,需要注意Android Library并不是普通的JavaSE,所以并没有提供javax的一些功能,因此在新建Module的时候不能选Android Library而应该选Java Library。因为它只在编译的时候使用到JavaSE的功能,所以并不用担心在手机上出现异常。@AutoService(Processor.class) public class CocaAptProcessor extends AbstractProcessor { @Override public Set<String> getSupportedAnnotationTypes() { return Collections.singleton(CocaAptTest.class.getCanonicalName()); } @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { Set<? extends Element> set = roundEnv.getElementsAnnotatedWith(CocaAptTest.class); for (Element element : set) { if (element.getKind() != ElementKind.CLASS) { processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "only support class"); } /*生成方法*/ MethodSpec creaedMethod = MethodSpec.methodBuilder("createApt") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .returns(void.class) .addParameter(String[].class, "parameters") .addStatement("System.out.println($S)", "this`s java source is created by dynamic") .build(); TypeSpec createdClass = TypeSpec.classBuilder("AptGenerator").addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(creaedMethod).build();//指定生成的类 JavaFile javaFile = JavaFile.builder("com.coca.apt", createdClass).build(); try { javaFile.writeTo(processingEnv.getFiler()); } catch (IOException e) { e.printStackTrace(); } } return false; } }注:这里引用两个库简化操作:
apply plugin: 'java' //由于AbstractProcessor隶属于javax,所以这里我们使用java Library的引用模式 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) /**/ compile 'com.google.auto.service:auto-service:1.0-rc2' compile 'com.squareup:javapoet:1.7.0' }AutoService主要的作用是注解processor类,并对其生成 META-INF 的配置信息,省去手动配置META-INF的麻烦。JavaPoet这个库的主要作用就是帮助我们通过类调用的形式来生成代码。
添加项目依赖
在项目根目录的build.gradle文件中的dependencies节点下面添加依赖如下:import com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile buildscript { repositories { jcenter() } dependencies { // replace with the current version of the Android plugin classpath 'com.android.tools.build:gradle:1.5.0' // the latest version of the android-apt plugin classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加该依赖 } } allprojects { repositories { jcenter() } }
app的build.gradle中添加如下依赖:
apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' //(1) android { compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { applicationId "com.coca.androidaptdemo" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.1.1' compile project(':cocaaptlib') //(2) 添加对上面java library的依赖 }
基本使用
对类添加CocaAptTest注解并执行Rebuild操作,之后即可在app的build/generated/source/apt目录下查看到生成的代码。@CocaAptTest("cocaValue") public class MainActivity extends AppCompatActivity { //... }
来自为知笔记(Wiz)
相关文章推荐
- Android注解使用之注解编译android-apt如何切换到annotationProcessor
- 使用编译时注解annotationProcessor(取代android-apt)开发组件化路由框架
- Android注解使用之注解编译android-apt如何切换到annotationProcessor
- Android注解使用之注解编译android-apt如何切换到annotationProcessor
- Android注解使用之注解编译android-apt如何切换到annotationProcessor
- Android 如何编写基于编译时注解的项目
- 利用APT实现Android编译时注解
- Android APT开发教程 六 使用注解替代setOnClickListener还有注释
- Android 如何编写基于编译时注解的项目
- 1.Android注解-编译时生成代码 APT(Annotation Processing Tool ) Poet 说明
- Android注解-编译时生成代码 (APT)
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- Android 如何编写基于编译时注解的项目
- 深入理解编译注解(二)annotationProcessor与android-apt
- Android APT开发教程 六 使用注解替代setOnClickListener还有注释给String赋值
- 2.Android注解-编译时生成代码 APT(Annotation Processing Tool ) 实例说明
- 利用APT实现Android编译时注解
- 利用APT实现Android编译时注解
- Android 如何编写基于编译时注解的项目---转载张鸿洋博文
- 使用新版Eclips编写的APK(V 7包)放入Android源码中mmm编译,报错的两种解决办法