Как стать автором
Обновить

Как улучшить читабельность нашего Android-кода или используем android-annotations

Время на прочтение 3 мин
Количество просмотров 8.2K
В крошечном проекте решил попробовать данную библиотеку и посмотреть что из этого получится. Об этом опыте хочу рассказать в данном топике.


Библиотека android-annotations позволяет сократить объем кода на такие действия как:
1.Загрузка ресурсов
2.Поиск вьюшки по идентификатору(findViewById метод)
3.Привязка обработчиков к кнопкам
4.Получение сервисов(ссылок на классы сервисов), фоновую обработку и другие полезные штуки в простейшем виде.

Как установить.

Скачиваем по ссылке выше два jar-а:androidannotations-X.X.X.jar(процессор аннотаций) и сам апи: androidannotations-X.X.X-api.jar. Далее, заходим в Eclipse в свойства проекта в пункт Java Compiler, выбираем Annotation Processors, затем ставим галку в этом меню — Enable project specific settings. После этого необходимо зайти в подпункт Factory Path, снова поставить ту же галку и нажав на Add externak JARs добавить путь к процессору аннотаций.
Это еще не все. После проделанного необходимо зайти в пункт Java Build Path и добавить androidannotations-X.X.X-api.jar во вкладке Libraries данный JAR. Теперь все настроено и готово.

Пример использования.

Данная библиотека требует от вас следующего: когда вы используете аннотации из данной библиотеки, то ваш активити в манифесте должен заканчиваться знаком "_". То бишь, у вас есть активити SMSSender, тогда в манифест необходимо добавить активити SMSSender_. Вот такие дела.

Далее приведу кусок примера:
import com.googlecode.androidannotations.annotations.*;
import com.googlecode.androidannotations.annotations.res.*;

@EActivity(R.layout.main) //аля setContentView()
public class SMSSenderActivity extends Activity {

@ViewById(R.id.ok_button) //аля findViewById()
Button buttOk;

@StringRes   //загружаем строковый ресурс R.string.message
String message;
...

@Click(R.id.ok_button) //связываем обработчик с нашей кнопкой
void okClickHandler(){
    ...
}


Красиво не так ли? Заметьте, что у нас нет привычного метода onCreate и прекрасно все работает! Но ничто не мешает его добавить, как и другие методы состояний активити.

Как это работает? Заглянем в вики: «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.» Собственно потому и нужно добавлять прекфик в манифест или при старте активити. Также замечу, что если не указывать id, то ресурс будет подгружаться по имени переменной, что также удобно для читаемости кода.

Более полный пример со многими возможностями представлен тут:
code.google.com/p/androidannotations/source/browse/trunk/HelloWorldEclipse/src/com/googlecode/androidannotations/helloworldeclipse/MyActivity.java

Стоит отметить, что аннотацию @BeforeViews(как в коде по ссылке выше) я так и не нашел, но зато есть @BeforeCreate.

Вот некоторые доступные аннотации:
@ColorRes
@StringRes
@AnimationRes
@BooleanRes
@ColorStateListRes
@DimensionRes
@DimensionPixelOffsetRes
@DimensionPixelSizeRes
@DrawableRes
@IntArrayRes
@IntegerRes
@LayoutRes
@MovieRes
@TextRes
@TextArrayRes
@StringArrayRes
Extra
@SystemService
Background
@UiThread
@UiThreadDelayed
@RoboGuice

И многие другие. Да, с библиотекой можно совместно использовать RoboGuice.
Многие вещи данная приятная библиотечка действительно делает проще, сокращая объем рутинного кода, который постоянно повторяется.
Много примеров и доков можно найти на домашней страничке проекта.

Заключение

В заключение хочется добавить интересный момент, который я заметил на недели: когда вы объявляете тег <uses-permission>, то описывать его нужно ДО тега application, иначе права не будут применены к приложению. По крайней мере у меня так было трижды, что говорит о неслучайности данного момента. Вот так, будьте внимательны!

Как обычно все предложения и вопросы пишем в личку.
Кто использовал данную библиотечку описывайте свой опыт, будет всем хорошо.

Также прощу выбрать какой топик будет интересно прочитать первее:
1) Авторизация Вконтакте через Android: публикация записи на стену.
2) Процессы и потоки в Андроид: пишем AsyncTask правильно.
3) Собираем полноценное приложение вместе с Scripting Layer for Android (SL4A) code.google.com/p/android-scripting
4) Ваш вариант.
Теги:
Хабы:
+28
Комментарии 40
Комментарии Комментарии 40

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн