Android Annotations

本来我想写个 Java 版本的《RESTful客户端库:RestClient》用于 Android 应用开发,结果发现不太好写,虽然用了 Dynamic Proxy 实现了大部分功能,但是因为无法通过反射取得参数名,而且 Java 没有 DuckType ,再加上也没有方便的 Dict 类型,搞出来的东西很难看,不好用。

后来令狐给我推荐了这个 Android Annotations ,这个用 annotation 实现的方法真是好,所以想试一下,刚好在 eoe 论坛看到有人问这个东西有没有一个可以跑的例子程序参考一下,我就去试了一下官方的例子,还是可以用的,估计是他配置不对。

这货的配置的确有点麻烦,我也是按官网的步骤一步步做才成功的,但是实际使用起来不知道如何,还是写个 Demo 试试吧。

配置

基本的配置方法来自《官方文档(Eclipse)》。

首先从这里下载编译好的包——当然要自己从 Github 上 clone 源码来编译也行。

解包后可以得到两个 jar 文件,一个是 androidannotations-xxx.jar 另一个是 androidannotations-api-xxx.jar 。

把 aa-api-xxx.jar 放到 libs 目录下,但是 aa-xxx.jar不可以放到 libs 目录下,可以另外建一个目录,比如说叫 compile-libs 。

然后打开 Project | Properties …

查看 Java Compiler ,确定 Compiler compliance level 必须是 1.6 。

查看 Java Compiler | Annontation Processing ,选中 Enabled annontation processing (可能需要先选中 Enable project specific settings) 。

查看 Java Compiler | Annontation Process | Factory Path ,点击 Add JARs (可能需要先选中 Enable project specific settings),把刚才那个 aa-xxx.jar 加进来。

点击确定后将弹出个对话框,提示 annotation 设置变更,要求 rebuild project ,确定即可重建项目。

最后在 Java Build Path 里,选择 Libraries 页,点 Add JARs ,把刚才那个 aa-api-xxx.jar 加进来即可。

最后修改AndroidManifest中的activity名称后面加上"_"。

配置完成。

使用

就拿自动生成的空白项目为例子。

首先一步是修改 Manifest 将默认的 xxx.MainActivity 名字改为 .MainActivity_ 。这个带下划线的版本是 AndroidAnnotations 生成的。

然后去修改 class MainActivity 的代码,把里面的 onCreate 什么的全删除了,只要这样即可自动在生成的 MainActivity_ 里加入 onCreate 并 setContentView :

  1. @EActivity(R.layout.activity_main)
  2. public class MainActivity extends Activity {
  3. }

如果需要在程序里使用 UI 控件,也不需要再写一大堆的 findViewById 和相应的强制类型转换。只需要这样即可:

  1. @ViewById(R.id.hello)
  2. TextView tvHello;

基本用法就是这么简单。

更多用法参见 Cookbook 及所有可用的 annotations 说明

当然最后还是要泼一盆冷水。这个东西跟很多非官方库不兼容,甚至我试了官方最新推出的 support - ActionBarCompat 也没成功。

最新文章

  1. AngularJs之三
  2. SOAPUI使用教程-MockService脚本概述
  3. pod
  4. WebForm---登陆状态保持(Cookies内置对象)
  5. iOS边练边学--NSURLConnection发送HTTP请求以及NSString和NSData的相互转换
  6. [CFgym101061C]Ramzi(贪心,双条件最短路)
  7. delphi 调用 webservice (.NET C#版)
  8. C# System.AppDomain类
  9. react入门——慕课网笔记
  10. MapReduce 简单的全文搜索
  11. Valgrind使用记录
  12. Python的range()函数用法
  13. 百度umeditor富文本编辑器插件扩展
  14. Can't use Subversion command line client***Probably the path to Subversion executable is wrong. Fix
  15. IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA 实体类浅谈
  16. vue-cli 组件运用
  17. 【HTML5】实现QQ聊天气泡效果
  18. iOS开发-Objective-C Block的实现方式
  19. Burp Suite使用介绍总结
  20. Android攻城狮学习笔记—入门篇二

热门文章

  1. 四则运算GUI版
  2. 201521123107 《Java程序设计》第5周学习总结
  3. 第二次项目冲刺(Beta阶段)--第七天
  4. 201521123064 《Java程序设计》第6周学习总结
  5. 201521123072《java程序设计》第四次总结
  6. 201521123090 《Java程序设计》第4周学习总结
  7. 201521123094 吴慧婷 Java课程设计
  8. 201521123037 《Java程序设计》第13周学习总结
  9. java is-a、has-a和like-a、组合、聚合和继承 两组概念的区别
  10. 三级菜单的实现(python程序)