AndroidStudio三种自动写代码技术简介

声明:下载反编译软件(这里主要使用jd-gui.exe打开对应的jar即可),不必深入使用,对反编译有兴趣的可以深入研究。

         附:反编译软件目录(加固软件需要脱壳):

                                              apktool(解压apk)、

                                              dex2jar(将解压的dex.classes转化为jar)、

                                              jd-gui(打开对应的jar)、

                                              jeb(暂未使用)、

                                              IDA(反编译.so文件)。

1、通过plugin写代码:eg:butterKnife-Zelezny、GsonFormat等。

查看方式:通过反编译软件jd-gui打开jar包(路径eg:C:\Users\Administrator\.AndroidStudio3.3\config\plugins\android-butterknife-zelezny.jar)。

原理:主要是通过javaPlugin技术实现项目编写代码自动化书写(也就是在已完成代码的前提下,再书写某些重复性或者说类似的代码时通过插件一键生成。):

           AnAction的子类为主程序入口,同时需要在plugin.xml中声明;

           然后通过书写一套类似的Android界面化API生成的界面来确定用户需求,然后根据不同的选择按既定的规则生成目标的代码。

优点:没有侵入性;

缺点:灵活性不够(但是因为其是为特定代码而设计,扯不上什么灵活性,也只是相对模板来说灵活性不够);                                     需要学习和熟悉新的API。

 

2、通过模板生成代码(这是AndroidStudio自身生成代码的方式)。

       查看方式(均为AndroidStudio自动菜单的模板):C:\Program Files\Android\Android Studio\plugins\android\lib\templates;

       优点:参考这种方式,可以快速的生成自己所需要的业务代码模板(在对应目录下,参考EmptyActivity,BlankActivity等包可以快速生成自己的业务代码模板,另外可以参考MVPArmsTemplate的实现方式);看过模板就会自己写,不需要额外学习即可书写,足够灵活方便快捷。

       缺点:但是每次AndroidStudio更新都可能被AndroidStudio删除掉。需要手动保存。

 

3、通过apt(Annotation Processing Tool)技术eg:butterKnife、dragger等

     查看方式(需要先在项目里添加依赖编译,butterKnife为例):C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife-compiler\10.1.0\4963d03eb222d3352fe1f17b2625ae4f1b6ac7fb\butterknife-compiler-10.1.0.jar

     实现原理:主入口AbstractProcess子类,通过编译时将带有特定声明的Annotation(eg:@BindView)编译到build文件中(目录:app\build\generated\source\apt查看,类似反射实现),生成对应的可运行的XXActivity_ViewBinding文件(核心JavaFile类),在通过ButterKnife.bind(this)实现对应资源的绑定。这一切实现是无知觉的唯一需要手动声明注解、绑定时机等(ButterKnife可以通过plugin一键生成,dragger好像没有)。

     优点:实现解耦。

     缺点:需要学习新的API(API与反射有诸多相似)。

    题外话:Annotation这个东西就是一个标签,类似额外的一个分类标记。当然这个标记是可以被使用的,但是得额外得代码                        去为它添加功能。如果没有代码去实现,标记本身是没有任何功能得。

 

 

 

你可能感兴趣的:(Android)