рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп UI рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рддрдиреА рдХрдард┐рди рд╣реИред рдмрд╛рд░-рдмрд╛рд░ рдЖрдкрдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рдкрд╣рд╛рдбрд╝реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: findViewbyId, setOnClickListener, getources ()ред GetDrawable, ... рдЗрд╕ рдХрд╛рдо рдХреЛ AOP рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдЗрдЪреНрдЫрд╛ рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ, рд╢рд╛рдпрдж рдХреЗрд╡рд▓
рд░реЛрдмреЛрдЧреНрдпреВрдЗрд╕ рдкрд░, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдм рдкрд░
рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдерд╛ рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдХрд╛рд░ (~ 0.5 mb) рд╣реИ, рдЬреЛ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП RoboApplication рдФрд░ RoboActivity рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐
рдРрдмреЛрд▓рд┐рдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдПрдХ рдЖрд╕рд╛рди (~ 40kb), рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдпреВрдЖрдИ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЕрд╡рд╕рд░реЛрдВ
- рдЖрд░рдВрднреАрдХрд░рдг рджреЗрдЦреЗрдВ;
- рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рд▓рд╛рдЗрд╕реЗрдВрд╕рд░реНрд╕ рдЬреЛрдбрд╝рдирд╛;
- рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЖрд░рдВрдн: рдбреНрд░реЙрдмрд▓, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрдиреАрдореЗрд╢рди, рдмреВрд▓рд┐рдпрди, рдЖрдпрд╛рдо, рдкреВрд░реНрдгрд╛рдВрдХ, рд╕рд░рдгреА, рд░рдВрдЧ, рд╕рд░рдгреА рдПрдбрд╛рдкреНрдЯрд░;
- рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг;
- рдЖрд╡реЗрджрди рдХреА рдЖрд╡реЗрджрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдгред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
repositories { maven { url 'https://dl.bintray.com/alexeydanilov/maven' } } dependencies { compile 'com.danikula:aibolit:1.0' }
рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди
public class AibolitChatActivity extends Activity {
рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рд╛рд╣рдд рдорд┐рд▓реА рд╣реИ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, setOnClickListener рддрд░реАрдХреЛрдВ рдФрд░ рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
- рд╣рдо рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ InjectView рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рд╣рдо рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реА InjectOn * рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред Aibolit рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░рдореБрдЦ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
OnClick, OnLongClick, OnTouch, OnKey, OnTextChanged, OnCheckedChange, OnFocusChange, OnItemClick, OnItemSelected, OnEditor.ction, OnCreateContextMenu; - рд╣рдо
Aibolit.doInjections(this);
рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ Aibolit.doInjections(this);
рд╕рдХреНрд░рд┐рдпрдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
2 рддрд░реАрдХреЛрдВ рдХреА рдХреЙрд▓
setContentView(layoutId); Aibolit.doInjections(this);
рдПрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Aibolit.setInjectedContentView(this);
Aibolit рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
@InjectService private HttpManager httpManager;
рдЖрдк рдРрдмреЛрд▓рд┐рдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП
рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдХреЛрдб рд╕реНрд░реЛрдд рдЦреБрд▓реЗ рдФрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВред рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? Aibolit рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Inject * annotations рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЕрдкрдирд╛ рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреГрд╢реНрдп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
class ViewInjector extends AbstractFieldInjector<InjectView> { @Override public void doInjection(Object fieldOwner, InjectionContext injectionContext, Field field, InjectView annotation) { int viewId = annotation.value(); View view = injectionContext.getRootView().findViewById(viewId); if (view == null) {
рдЙрддреНрдкрд╛рджрдХрддрд╛
рд╣реЛрд▓реАрд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рд╕реВрдЦреЗ рдирдВрдмрд░ рджреВрдВрдЧрд╛ред рдорд╛рдк рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред 35 рддрддреНрд╡реЛрдВ (рджреГрд╢реНрдп, рд▓рд╛рдЗрд╕реЗрдВрд╕рдзрд╛рд░рд┐рдпреЛрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ) рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╢рд╛рд╕реНрддреНрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рджреВрд╕рд░реЗ рдЖрд╡рд╢реНрдпрдХ 40-50 рдПрдордПрд╕ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдЗрдмреЛрд▓рд┐рдЯ - 90-100 рдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдкреНрд░рддрд┐рдмрд┐рдВрдм-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд рдЕрдВрддрд░, IMHO, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
Aibolit рдХреЛ рддреИрдпрд╛рд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЛрдб рдЕрдкрд╛рдЪреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕, рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рддрд╣рдд рдЦреБрд▓рд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред
UPD 0:рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп
roboguiceandroidannotations