AndroidStudio4.1后自定义Activity模板无法使用的问题

3,491 阅读2分钟

原创文章,谢绝转载。
  众所周知在AS中可以通过系统的activity模板快捷创建一个页面,但是往往系统提供的几种类型无法满足我们自己的需求,尤其是在mvp,mvvm等模式流行的今天,所以很早以前我们就开始自定义模板,从而根据自己需求快捷生成文件,具体参考我之前的一篇文章:studio模板,一键生成多个类,mvp党福利
  根据之前的文章可知,AS的模板是存放在android-studio3.6\plugins\android\lib\templates这个目录下的,然而前段时间升级到4.1版本后突然发现AS中plugins\android\lib下已经没有templates这个目录了!经过详细的对比,找了很久发现原来AS已经把模板类的文件打包成了一个jar,路径为android-studio\plugins\android\lib\wizard-template.jar,下面是这个包解压后的文件:
  写过自定义模板的同学都对上面两张图片非常熟悉了,就是模板的资源了。那么首先我想到就是修改AS这个jar包重新签名后覆盖原包,但是他的jar包竟然是用kotlin写的!而且看了下模板的语法和之前完全不同,现在更多的是用代码拼成的布局文件,而不是像之前一样用模板生成,考虑到难度问题果断放弃了,这时突然想起之前某个大神同事唐某曾用FreeMarker插件方式写过一个功能和我的模板类似的东西,果断拿过来改改。
先上效果图:

下面是自动生成的类:

插件源码就不讲解了,懂java的人一看就懂,下面是插件源码链接:
插件源码
最后说下插件方式和之前的模板生成相比目前还存在的问题:
1.无法获取安卓主包名造成无法自动导入databinding自动生成的类。
2.无法实现activity自动注册
3.无法读取插件包内的模板文件,所以必须把模板文件放在某个目录下才能用
如果大家解决了上述两个问题,欢迎留言交流
2021年3月15日更新日志: 实现直接从插件包jar中读取模板,不再需要把模板文件放在本地目录下,只需要初始化Configuration时使用setClassForTemplateLoading(getClass(), "/template");方法,template为resources目录下的目录,具体参考插件源码,已同步