首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android自定义注解开发

最近在对项目进行重构,模块化的拆分是必须的。由于是pad项目,本身Activity用到的次数较少,大多是fragment之间的跳转,ARouter不能做很好的支持,并且处于对项目安装包瘦身的考虑,决定自定义一个简单的路由组件,用于支持Activity和Fragment的切换。

开发一个自定义注解和把大象装进冰箱一样只有三步:

1、实现在一个有参(path)的编译时注解IActivity

2、实现一个在编译时把被注解标识的类和和参数path做映射的类IActivityCompiler

3、实现一个跨模块跳转的工具方法RouterHelper

下面是具体的实现:

1 在项目中创建两个类型为Java Library的module(注意,类型一定要是Java Library)lib_annotation和lib_compiler。

在lib_annotation中创建IActivity类:

在lib_compiler的build.gradle修改依赖:

implementation 'com.squareup:javapoet:1.8.0' //一款可以自动生成Java文件的第三方依赖

implementation 'com.google.auto.service:auto-service:1.0-rc2' //自动在META-INF文件夹下生成Processor配置信息文件

implementation project(':lib_annotation')

并边写一个将注解生成映射文件的类IActivityCompiler

将这两个module在app项目中进行引入:

并在任意一个Actiivty类上进行注解:

此时Rebuild的工程,将会在目录app/build/generated/source/apt/debug/com.common.base.router/下,创建一个名为Activity_Router_Mapper的映射文件(并没有...问题解决方案请参考“Java/kotlin混开,自定义注解的坑”)。

假装我们已经解决了问题

这个类里面实现了注解里面的参数和Activity路径的映射。

经过一番研究,解决了无法生成映射文件的问题,接下来就创建项目的公共Android Library,实现RouterHelper:

这里只是对RouterHelper做了一下简单的实现,可以在这个类里做更多的实现

只需要这些简单的代码,Router库就实现了,只是在获取Activity的时候,也是通过反射实现的,这里还有继续优化的空间,有空继续优化。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191225A0ABZ300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券