|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Наверное, стоит чуть подробнее для начинающих описать, что это такое, как это едят и какие возможности в связи с применением аннотаций открываются. Сайт http://androidannotations.org/ На самом сайте дано следующее описание: Code Diet 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 . Грубо переведя, это фреймворк, который позволяет ускорить процесс разработки и повысить читаемость кода. Пример исходного кода: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107.
И то, что получается, после применения androidannotations: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Как подключить (актуально для android studio 1.5.1): 1. В build.gradle проекта добавить зависимость: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
2. В build.gradle модуля добавить следующие строки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И это (версия 3.3.2 актуальна на момент написания этого сообщения): Код: sql 1. 2. 3. 4. 5.
После этих нехитрых манипуляций можно писать лаконичный код. Так выглядит рабочий код пустой активности: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Основные ключевые слова: @EActivity - подключает и инициализирует layout активности. @OptionsMenu - указывает меню для активности. @ViewById - подключает любую активность (контрол) с id к переменной. @AfterViews - метод, который выполняется, когда все вью созданы и подключены к ранее объявленным переменным. @Background - метод, который будет выполняться в дополнительном потоке (фоновая задача). @UiThread - метод, который будет выполняться в основном потоке. Применяется после @Background. @Extra - переменная, которая будет сохранена между сеансами активности. Например, после смены ориентации экрана. @TextChange - метод-обработчик, который будет вызываться при изменении текста. @Click - метод-обработчик, который вызывается при клике на кнопку, галочку и т.п. @OptionsItem - метод-обработчик при выборе пункта меню. Это очень краткий список аннотаций. С полным списком можно ознакомиться тут: https://github.com/excilys/androidannotations/wiki/AvailableAnnotations --- добавлено 02.03.2016 Пример исходного кода нового проекта, созданного в студии 1.5.1 с BlankActivity Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Тот же функционал, но уже через AndroidAnnotations: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 09:26 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
wadman, Большое спасибо за обзор , очень полезная технология. а перечень граблей гдето можно найти ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 11:08 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
pandа перечень граблей гдето можно найти ? Из граблей я встречал только это: https://habrahabr.ru/post/154851/#comment_5322429 Интересная библиотека. Немного смутила ситуация с инъекциями. Например тот же @ViewById задекларированный в классе помеченным @EBean незаметно потащит за собой весь контекст, что может привести к утечке памяти при потери бдительности (а библиотека как раз этому способствует). Она не лишена недостатков, однако при осторожном использовании позволит избавится от бойлерплейтного кода который уже так надоел мне. Это похоже на правду. По меньшей мере было, когда была версия меньше 3-х. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 11:21 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
кстати, возможно не все знают - суфикс генерируемых классов можно менять с _ на что-то свое с помощью аргумента classSuffix. также можно менять пакет, финальность класса и кое чего еще https://github.com/excilys/androidannotations/wiki/CustomizeAnnotationProcessing ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 11:42 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
chpashaсуфикс генерируемых классов можно менять с _ Да, кстати, упустил эту деталь: если суффикс не менять, то в манифесте вместо MainActivity нужно будет прописать MainActivity_ и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 11:46 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Года 2 назад изучал эту технологию "ускоренного кодинга". Но применять не стал - читаемость кода намного хуже. Может кто клепает проекты десятками тому и пригодится для ускорения набивки кода. Android Studio и так все делает сама за меня так что хватает пока ее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:02 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Микола ПитерскийГода 2 назад изучал эту технологию "ускоренного кодинга". Но применять не стал - читаемость кода намного хуже. в каком месте она становится хуже? Микола ПитерскийAndroid Studio и так все делает сама за меня так что хватает пока ее :) например что она делает за тебя? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:06 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Микола ПитерскийAndroid Studio и так все делает сама за меня так что хватает пока ее :) Шутишь, да? Как только студия научится определять тяжелый код и автоматом его выносить в отдельный поток - соглашусь. Загляни на страницу аннотаций - удивишься, сколько можно сократить времени на кодинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:17 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
все хочу попробовать, но как от руки не доходят просто актуально для однотипных фрагментов. где незначительная часть отличается, пока наследованием обхожу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:49 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Не помню конкретно - но какие-то косяки там были. Может с отладкой проблемы или студия не умеет сама код аннотации завершать или еще что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:51 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Микола ПитерскийМожет с отладкой проблемы или студия не умеет сама код аннотации завершать или еще что-то. Ни с тем, ни с другим не испытывал проблем. Использую года 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:54 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
[quot chpashaМикола ПитерскийAndroid Studio и так все делает сама за меня так что хватает пока ее :) например что она делает за тебя?[/quot] Ты наверное Delphi никогда не пробовал раз так говоришь, если кодинг в Android Studio для меня праздник - то на IDE Delphi я уже спокойно смотреть не могу - так и хочется матюкнуться. Это действительно тупая деревяшка, которая ничего не умеет, ничего не знает и не хочет учиться и которая от версии к версии становится все хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 13:56 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Микола Питерскийкодинг в Android Studio для меня праздник - то на IDE Delphi я уже спокойно смотреть не могу Я тебя понимаю. :) Но можно сделать еще лучше... И тема этому посвящена. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 14:16 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Микола ПитерскийНе помню конкретно - но какие-то косяки там были. Может с отладкой проблемы или студия не умеет сама код аннотации завершать или еще что-то. оно генерит обыкновенный ява-код, примерно такой-же, какой пришлось бы писать руками. какие могут быть проблемы с отладкой или "завершением" аннотаций (что бы это не значило)? Микола ПитерскийТы наверное Delphi никогда не пробовал раз так говоришь ты не представляешь, сколько всего я пробовал. только я не понимаю какая связь между Android Studio и android annotations кроме слова "android"? твоя фраза имеет примерно столько же смысла как и "я не пользуюсь дезодорантом - меня вязанные носки устраивают". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 14:20 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Ок - убедили. Пока пару месяцев матюкаюсь с делфи, а как вернусь на андроид - обязательно еще раз попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 14:34 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
а c аннотациями в RecyclyView - ViewHolder да и других адаптерах? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 09:48 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Джибса c аннотациями в RecyclyView - ViewHolder да и других адаптерах? Не понял вопроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 09:57 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
я про class ViewHolder extends RecyclerView.ViewHolder { .... } ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 10:02 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Джибсclass ViewHolder extends RecyclerView.ViewHolder Вроде нет. Да и не совсем представляю, что там заинжектить можно... Описание холдера? Или где-то уже что-то подобное реализовано? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 10:22 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
wadmanВроде нет. Да и не совсем представляю, что там заинжектить можно... Описание холдера? Или где-то уже что-то подобное реализовано? когда сложная структура, много элементов во вьюшке, и ее нужно заполнить приходится та-же рутина в духе findViewById ... потом view.settext(...); с другой стороны здесь сложнее. у меня до 5 разных видов вьюшек в списке бывает ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 13:14 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Джибсприходится та-же рутина в духе findViewById ... потом view.settext(...); Думаю, что тот же ViewById должен сработать так или иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 13:30 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
не, с холдерами эта фишка скорее всего не сработает. они ищут контролы через контекст, а их в нем скорее всего не будет. но вот что можно сделать, так это дописать свою аннотацию и генератор (или запостить фича-реквест) чтобы в конструктор холдерa передавать вьюху, а не контекст. а дальше уже генерить findViewById. но на данный момент из коробки адаптеры остаются кажется единственным местом где приходится писать говнокод вида findViewById ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 14:44 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
chpashaэто дописать свою аннотацию и генератор В четверке будут плагины. Во заживем! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 15:37 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
wadmanchpashaэто дописать свою аннотацию и генератор В четверке будут плагины. Во заживем! да будет удобно. хотя я уже давно форкнул и свою версию пилю, но с плагинами будет действительно круче. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 15:50 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
а глуппый вопрос, аннотации. на скорость как влияют, или это настолько незначительно, что можно пренебречь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 00:29 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Джибсаннотации. на скорость как влияют, Считай это макросами. Как-бы ты сам писал, но много работы сделали за тебя. Присутствует некоторая избыточность (она в основном в подготовке вьюхи), но на мой взгляд не значительная. ViewById: Код: java 1. 2. 3. 4.
Background: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:00 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Джибса глуппый вопрос, аннотации. на скорость как влияют, или это настолько незначительно, что можно пренебречь ? никак не влияет - никакой рефлексии и т.д.. гугли что такое annotation processing. в двух словах, на этапе компиляции генерятся новые классы-наследники, в которых запрятан весь спагетти-код типа findViewById., работа с потоками и всякие приятные мелочи типа автоматичеких (onSaveInstanceState/OnRestoreInstanceState), аргументы, экшены и т.д. Т.е. ты в манифест пишешь не MyActivity, а MyActivity_ (extends MyActivity) и стартуешь ее MyActivity_.intent().start() - кодить при этом продолжаешь в MyActivity. там куча всего разного - просто полистай https://github.com/excilys/androidannotations/wiki/AvailableAnnotations и почитай что они делают Имхо must have для ЛЮБОГО проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 12:26 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Ок, я просто думал, что там много на рефлексиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:19 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ДжибсОк, я просто думал, что там много на рефлексиях. там ее нет вовсе. вернее есть на этапе компиляции. в рантайме нет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:22 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ТС, добавьте, наверное, в старттопик Этот вариант Код: java 1.
может вызывать ошибку: Код: java 1.
Лечится вот так: Код: java 1.
https://github.com/excilys/androidannotations/issues/1606 https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 07:56 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ыудусеможет вызывать ошибку: Не только эту, но при той конфигурации, что я указал (с теми версиями в зависимостях), ошибок не будет. Если брать последние apt и gradle то да, ошибки есть. У меня вылезла "Cant open file". Поправлю, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 08:52 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
вышла 4-я версия, убежал читать, что новенького ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 13:08 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
А можно как нибудь заиньектить абстрактный бин с реализацией абстрактного метода? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 10:59 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ыудусеА можно как нибудь заиньектить абстрактный бин с реализацией абстрактного метода? что за бредовый вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 11:03 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
chpashaчто за бредовый вопрос? Почему бредовый? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 11:32 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ыудусеchpashaчто за бредовый вопрос? Почему бредовый? Потому что в нем не прослеживается смысла. Ну т.е. ты-то знаешь, о чем говоришь и сейчас видимо искренне удивлен, но вот я из твоего вопроса нихрена не понял. Начиная с "можно ли заинжектить". АА не занимается вопросами dependency injection ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 12:06 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
chpashaПотому что в нем не прослеживается смысла. Ну т.е. ты-то знаешь, о чем говоришь и сейчас видимо искренне удивлен, но вот я из твоего вопроса нихрена не понял. Начиная с "можно ли заинжектить". АА не занимается вопросами dependency injection А это что? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
отсюда ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 12:50 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ыудусеА это что? это фигня в стиле "почти беременна". какой смысл писать интерфейс и тут же по месту указывать, что вместо него будет класс А. настоящая Dependency Injection это когда ты в конфигурации указываешь реализацию Код: java 1.
а в коде у тебя зависимость только от MyInterface. Код: java 1.
По-этому вопрос по-прежнему не понятен, вернее теперь вопрос понятен, а цель - нет. Ты хочешь сделать тоже самое, что в примере, но с абстрактным классом? ну попробуй - я не вижу технических причин, почему это не должно работать, но возможно это не будет работает просто, потому что автор АА подумал про фокус с интерфейсом и не подумал про тоже самое с абстрактным классом (т.е. у него в коде тупо валидация может стоять на наличие интерфейса). С точки зрения ява кода нет никаких преград. Но с точки зрения архитектуры приложения - это страдание фигней. Нужна настоящая DI, юзай DI, roboguice например. АА не для этого (но хорошо вписывается, поскольку по сути является генератором "имплементаций") ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2016, 13:28 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Кто то юзал Butter knife ? В чем разница ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:55 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
ДжибсВ чем разница ? в аа больше всего. намного. по сути в butterknife только инъекция вьюх и пару обработчиков событий. в аа передача параметров в активность/фрагмент, интенты, автоматическое сохранение данных (onsaveinstance/onrestore), background- процессы, onactivityresult, инъекция сервисов, создание и обработчики событий меню, sharedpreferences. имхо слон и моська. единственная интересная штука в butterknife, инъекция в viewholder, в аа такое не прокатит, но думаю можно плагин написать (тоже кстати плюс) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 22:56 |
|
AndroidAnnotations
|
|||
---|---|---|---|
#18+
Пришлось кое-что поменять в своем старом проекте в связи с изменениями в сдк, студии и т.п. Сделал следующие изменения, чтобы снова все работало: build.graddle проекта (apt теперь не нужен): Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Соответственно в build.graddle модуля (приложения) так же убираются все упоминания об apt Код: xml 1.
В buildTypes так же изменения (чтобы сгенерированный apk имел имя файла более осмысленного вида ru.wadman.somename-1.0-release.apk) Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
И зависимости чуть изменились: Код: xml 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2018, 09:50 |
|
|
start [/forum/search_topic.php?author=mr1kloun&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
others: | 600ms |
total: | 925ms |
0 / 0 |