GitHub参考地址:
源码:https://github.com/excilys/androidannotations
Documents:https://github.com/excilys/androidannotations/wiki
在文档页右侧,有关于Annotations的信息入口:
Get Started 相关配置,Download 源码下载,Cookbook 注解使用文档, Examples 官方Demo
简介
AndroidAnnotations is an Open Source framework that speeds up Android development. It takes care of the plumbing, and lets you concentrate on what's really important. By simplifying your code, it facilitates its maintenance.
如上英文简介,AndroidAnnotations是一个能够加速Android开发的开源框架。它负责管道,让开发者专注于真正重要的事情上。通过建华代码,它能够便于维护!
HowItWorks(必读):https://github.com/excilys/androidannotations/wiki/HowItWorks
使用前后对比案例:
Before
public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; ListView bookmarkList; EditText search; BookmarkApplication application; Animation fadeIn; ClipboardManager clipboardManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); setContentView(R.layout.bookmarks); bookmarkList = (ListView) findViewById(R.id.bookmarkList); search = (EditText) findViewById(R.id.search); application = (BookmarkApplication) getApplication(); fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in); clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1); updateBookmarksButton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { updateBookmarksClicked(); } }); View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2); updateBookmarksButton2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { updateBookmarksClicked(); } }); bookmarkList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> p, View v, int pos, long id) { Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem( pos); bookmarkListItemClicked(selectedBookmark); } }); initBookmarkList(); } void initBookmarkList() { adapter = new BookmarkAdapter(this); bookmarkList.setAdapter(adapter); } void updateBookmarksClicked() { UpdateBookmarksTask task = new UpdateBookmarksTask(); task.execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = // "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { @Override protected Bookmarks doInBackground(String... params) { String searchString = params[0]; String userId = params[1]; RestTemplate client = new RestTemplate(); HashMap<String, Object> args = new HashMap<String, Object>(); args.put("search", searchString); args.put("userId", userId); HttpHeaders httpHeaders = new HttpHeaders(); HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>( httpHeaders); ResponseEntity<Bookmarks> response = client.exchange( // BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args); Bookmarks bookmarks = response.getBody(); return bookmarks; } @Override protected void onPostExecute(Bookmarks result) { adapter.updateBookmarks(result); bookmarkList.startAnimation(fadeIn); } } void bookmarkListItemClicked(Bookmark selectedBookmark) { clipboardManager.setText(selectedBookmark.getUrl()); } }
After@NoTitle @Fullscreen @EActivity(R.layout.bookmarks) public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; @ViewById ListView bookmarkList; @ViewById EditText search; @App BookmarkApplication application; @RestService BookmarkClient restClient; @AnimationRes Animation fadeIn; @SystemService ClipboardManager clipboardManager; @AfterViews void initBookmarkList() { adapter = new BookmarkAdapter(this); bookmarkList.setAdapter(adapter); } @Click({ R.id.updateBookmarksButton1, R.id.updateBookmarksButton2 }) void updateBookmarksClicked() { searchAsync(search.getText().toString(), application.getUserId()); } @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } @UiThread void updateBookmarks(Bookmarks bookmarks) { adapter.updateBookmarks(bookmarks); bookmarkList.startAnimation(fadeIn); } @ItemClick void bookmarkListItemClicked(Bookmark selectedBookmark) { clipboardManager.setText(selectedBookmark.getUrl()); } }
@Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); }
Eclipse使用配置
从官网下载压缩文件,解包可以得到两个Jar包文件:
androidannotations-xxx.jar、androidannotations-api-xxx.jar(作者当前使用3.2版本)
在自己的Android Project中,将aa-api-xxx.jar文件放入libs文件夹下,并右键Jar文件--->Build Path--->Add to Build Path(也可以这样添加:
右键Project--->Java Build Path--->Libraries--->Add JARs)
注意:aa-xxx.jar文件不可以放入libs文件夹下,需新建一个目录,如compile-libs。
然后,设置Project ---> Properties:
Java Compiler : Compiler compliance level确保是1.6
Java Compiler | Annotation Processing : 选中 Enabled annontation processing (需要先选中 Enable project specific settings)
Java Compiler | Annotation Processing | Factory Path : 点击Add JARs,添加aa-xxx.jar文件,设置完成!
特别说明:
1. 通过@EActivity注解的Activity,在AndroidManifest.xml注册时,需要在Activity Name后面添加 _ 符号,如:
<activity android:name=".MyListActivity_" />
在代码中使用时,也需要使用MyListActivity_.class,否则通过startActivity启动MyListActivity.class会报Manifest.xml没有注册的错误。见官方说明:
AndroidAnnotations works in a very simple way. It automatically adds an extra compilation step that generates source code, using the standard Java Annotation Processing Tool.
What source code ? For each enhanced class, for example each
@EActivity
annotated activity, a subclass of this activity is generated, with the same name plus an underscore appended at the end.For instance, the following class:
package com.some.company; @EActivity public class MyActivity extends Activity { // ... }Will generate the following subclass, in the same package but in another source folder:
package com.some.company; public final class MyActivity_ extends MyActivity { // ... }This subclass adds behavior to your activity by overriding some methods (for instance
onCreate()
), yet delegating the calls to super.That is the reason why you must add
_
to your activity names inAndroidManifest.xml
:<activity android:name=".MyListActivity_" />
2. 待补充。。。