рдореИрдВ рдПрдХ Android рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдЬрдм рдореИрдВ рд╕реНрдХрд╛рдИреЗрдВрдЧ рдореЗрдВ рдмрд╕ рдЧрдпрд╛, рддреЛ рд╕реВрд░рдЬ рдереЛрдбрд╝рд╛ рдЪрдордХреАрд▓рд╛ рдерд╛, рдШрд╛рд╕ рд╣рд░рд┐рдпрд╛рд▓реА рдирд╣реАрдВ рдереА (рдпрд╣ рд╢реБрд░реБрдЖрддреА рд╡рд╕рдВрдд рдерд╛), рдФрд░ рдЯреАрдо рдХреЗ рдиреЗрддрд╛ рдиреЗ рдореБрдЭреЗ рдЬреАрд░рд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдХрд┐ рдХреЛрдбрд┐рдВрдЧ рдкрд░ рдХрд┐рддрдирд╛ рд╕рдордп рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХрд┐рддрдиреА рдмрд╛рдд рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреАред рд╣рд░ рджреЛ рд╣рдлреНрддреЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ред


"рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЯреАрдо рдореЗрдВ рд╕рдВрдЪрд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ," рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ред рд▓реЗрдХрд┐рди рдРрд╕реЗ "рдмрд╛рдмрд╛рдпрдХрд╛" рдХреЛ рдХрд┐рд╕рдиреЗ рдХрд╣рд╛ рдерд╛ред ред

рдЪреВрдВрдХрд┐ рд╣рдо рд╕рднреА рджреВрд░рд╕реНрде рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЙрдЪрд┐рдд рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рдпреЗ рдЖрда рдШрдВрдЯреЗ рдЪрд▓реЗ рдЧрдП рдереЗ: рдпрд╣рд╛рдВ рд╡реЗ рдереЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛? рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓реЙрдЧрд┐рдВрдЧ рдЕрд╕рд╛рдорд╛рдиреНрдп рдерд╛ред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЖрд▓рд╕реНрдп рдореЗрдВред рдлрд┐рд░ рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣реЗред рдФрд░ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рджреВрд░ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ IntelliJ IDEA рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛ред

рдиреАрдЪреЗ рдЖрдк рдкрд╛рдПрдВрдЧреЗрддреИрдпрд╛рд░ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдореЗрд░реА рдмрд╛рдЗрдХ (рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде) рдХреА рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╕рдореАрдХреНрд╖рд╛ ред

рдореИрдВ рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЯреАрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ


рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдХреА, рд╡рд╣ рдореЗрд░реЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рд╕реЗ рдкрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдИ рдереА рдХрд┐ рдХреМрди рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

1. рдШрдбрд╝реА - рдПрдХ рдмрдЯрди рд╕рдм рдХреБрдЫ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдбрд┐рдВрдЧ рдпрд╛ рдбреЙрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЪрд╛рд╣рд┐рдП? рдкреНрд▓рдЧрдЗрди рд▓рдЧрднрдЧ рдХрд╣реАрдВ рднреА рдПрдХ рдмрдЯрди (рдПрдХ рдХрд╛рдлреА рд╡рд┐рдиреАрдд рдЧреНрд░реЗ pacman) рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред


рддреЛ рдпрд╣ Google рдбреЙрдХреНрд╕ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ


рдФрд░ GitHub рдкрд░

рдЖрдк рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ Natrekannyi рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЬреАрд░рд╛ рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдЬреАрд░рд╛ рдореЗрдВ рдПрдХреАрдХрд░рдг рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рднреА рдЕрд▓рдЧ рд╕реЗ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрд▓реЙрдХрд╡рд╛рдЗрдЬрд╝ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдХрдЖрдЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдмрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред рдФрд░ рдСрдлрд╝рд▓рд╛рдЗрди рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬрд╝, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХ рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рдореЛрдмрд╛рдЗрд▓ рдПрдк рднреАред рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореБрдлреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЧреЛрдкрдиреАрдпрддрд╛, рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЬреИрд╕реЗ рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЯреИрд░рд┐рдл рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВред

2. рдЯреЙрдЧрд▓ , рд╕рд┐рд░реНрдл рдЯреЙрдЧрд▓


рд╕рдм рдХреБрдЫ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдордп рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЛрдореЛрдбреЛрд░реЛ рдореЛрдб рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдФрд░ рдСрдЯреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рднреА рд╣реИред


рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ: рдЙрдкрдпреЛрдЧ рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди рдореИрдВ рдЗрд╕ рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдФрд░ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд╕рд╛рде рд╕реВрдЪрдирд╛рдПрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд╢рд╛рдВрдд рд▓рдЧ рд░рд╣рд╛ рдерд╛)

3. рдЯреЙрдЧрд▓ + рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ : рдЬрдм рд╕рд┐рд░реНрдл рдПрдХ рдмрдЯрди рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд░рд╣ рдЬрд╛рддрд╛ рд╣реИ


рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ред рдХрд┐рд╕реА рддрд░рд╣, рдЙрд╕рдиреЗ рдЬреАрд░рд╛ рдХреЛ рдЯреЗрдмрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╢рд╛рд░реЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЯреЙрдЧрд▓ рдореЗрдВ рдХрд░рд╛рдзрд╛рди рдХреЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдЖрдк рдПрдХ рдХреНрд░реЛрди рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреАрд╡рди рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

4. рд╡рд╛рдХрд╛рдЯрд╛рдЗрдо - рдЬрд╣рд╛рдВ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ


рдЦреБрдж рд╕рдм рдХреБрдЫ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рд╣реИред

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрдИ рдПрдХреАрдХрд░рдг рдФрд░ рд╕рдмрд╕реЗ рдЖрдо рдЖрдИрдбреАрдИ рдФрд░ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдПрдХ рд╕рднреНрдп рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реАрди рдкрд░, рдЙрдкрд▓рдмреНрдз рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред Serenyk - "рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ", рдЙрдирдХреЗ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡реЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐ рдорд╛рд╣ $ 9 рдХреЗ рд▓рд┐рдП рдПрдХ рднреБрдЧрддрд╛рди рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рдХреБрдЫ рдкреНрд▓рдЧрдЗрдиреНрд╕ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреИрд╢рдмреЛрд░реНрдб рдкрд░, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдЯрд▓рд┐рди, рдЬрд╛рд╡рд╛, рдЧреНрд░реВрд╡реА рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдпрд╣ рдЦреБрдж рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред рдФрд░ рдпрджрд┐ рдЖрдк рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдордо рд╣реИ: рдбреИрд╢рдмреЛрд░реНрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреЛрдб рдХрд╛ рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рдЪрд┐рдкрдХреЗ рдХрд╛рдВрдЪ рдХреА рдирдЬрд╝рд░ рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдХрд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╢реМрдХрд┐рдпрд╛ред

рд╣рдореНрдо, WakaTime рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЦреБрд▓рд╛ рд╣реИ: рдЖрдк рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ...
, ? IDE JetBrains.

. WakaTime.java. , , Heartbeat (), WakaTime CLI . , , , .

рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдирд╛


рд╢рд╛рдпрдж рдПрдХ рдЖрд▓реВ рдХреА рдмрдВрджреВрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдиреБрд╕рдВрдзрд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╡рд╛рдХрд╛рдЯрд╛рдЗрдо рд╕реНрд░реЛрддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд▓рдЧ-рдЗрди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдИрдбреАрдИ рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд▓реЙрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рдЬреАрд░рд╛ рдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред (рд╣рдорд╛рд░реЗ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ, рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЬреАрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдпрдерд╛рд░реНрдерд╡рд╛рджреА рджрд┐рдЦрддрд╛ рд╣реИ)ред

рдФрд░ рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд▓реЙрдЧ рднреЗрдЬ рджреЗрдВрдЧреЗ, рдФрд░ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред

1. рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╣рдо рдХреМрди рд╕реА рдЗрдХрд╛рдЗрдпрд╛рдБ рдвреВрдБрдв рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ)?


рд╣рдо рдЕрд╡рдпрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд▓рд┐рдЧреЗрд╕реА рд╣реИ ) , рдЬреЛ рдкрд╣рд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреА рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпрд╛рдБ рдереАрдВред рдЖрд╡реЗрджрди рд╕реНрддрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрддрд░ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рд╕реНрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред WakaTime рд╕реНрд░реЛрдд рдореЗрдВ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХрдореНрдкреЛрдиреЗрдВрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдЧреЗ рдХреА рдЕрдиреБрдХреВрд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдШрдЯрдХ рдЙрд╕ рд╕реНрддрд░ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IDE рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ ApplicationComponent рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЖрдИрдбреАрдИ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдВрдЧреЗ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рд╣рдо рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ- рд╡рд░реНрддрдорд╛рди рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпрд╛рдБред рдЙрдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд╛рди рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рд╣рдореЗрдВ рдЙрдЪрд┐рдд рд╕реНрддрд░реЛрдВ рдкрд░ рддрд░реНрдХ рдХреЛ рдПрдиреНрдХреИрдк рдХрд░рдиреЗ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реЗрд╡рд╛ рдХреЛ ServiceManager.getService () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЖрдк рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдордВрдЪ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рд╕реЗрд╡рд╛ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИред

рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ - рд╡реЗ рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдиреВ рдЖрдЗрдЯрдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рд╡реЗ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдЬреЛ рдЖрдИрдбреАрдИ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЛрдИ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдЬреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреАрдИ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рддреЗ рд╕рдордп рдпрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдХрд░реЗрдВред

рдпрд╣ рд╕рдм рдлрд╝рд╛рдЗрд▓ /META_INF/plugin.xml рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

2. Plugin.xml рдФрд░ build.gradle



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг рдЦрд┐рдбрд╝рдХреАред рд╣рдо рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЧреНрд░реИрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рд╡рд╣ рдкрд╣рд▓реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдИрдбреАрдИрдП (рдлрд╛рдЗрд▓ -> рдирдпрд╛ -> рдкреНрд░реЛрдЬреЗрдХреНрдЯ ... -> рдЧреНрд░реЗрдбрд▓ -> рдЗрдВрдЯреЗрд▓реАрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд▓рдЧрдЗрди) рдореЗрдВ рдкреНрд▓рдЧрдЗрди рд░рд┐рдХреНрдд рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЗрд╕реЗ рдкреНрд▓рдЧ-рдЗрди рдШрдЯрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдШрдЯрдХреЛрдВ, рд╕реЗрд╡рд╛рдУрдВ, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиред рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдпрд╣ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рдХреНрд░рд┐рдпрд╛ рдпрд╛ IDE рдЬреАрд╡рдирдЪрдХреНрд░ рдШрдЯрдирд╛ рд╣реЛрдЧреАред

рд╣рдореЗрдВ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рдХрд┐ рдпрд╣ рдЧрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗред

<depends>Git4Idea</depends>
<depends>com.intellij.modules.androidstudio</depends>

Git4Idea рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (VCS) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд╣реИ рдФрд░ рд╡рд┐рд╖рдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рд╣рдо рдмрд╛рдж рдореЗрдВ git рдЗрд╡реЗрдВрдЯреНрд╕ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ рдЪреЗрдХрдЖрдЙрдЯред

рдЪреВрдВрдХрд┐ рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдЬреАрд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдмрд╛рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреГрдкрдпрд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдВ рдПрдЯрд▓рд╕рд┐рдпрди рдорд╛рд╡реЗрди рднрдВрдбрд╛рд░ рдЬреЛрдбрд╝реЗрдВ:

repositories {
   mavenCentral()
   maven {
       url "https://packages.atlassian.com/maven/repository/public"
   }
}

рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп:

implementation "joda-time:joda-time:2.10.4"
implementation("com.atlassian.jira:jira-rest-java-client-core:4.0.0") {
   exclude group: 'org.slf4j'
   dependencies {
       implementation "com.atlassian.fugue:fugue:2.6.1"
   }
}

рдпрд╣рд╛рдВ рд╣рдо рдЙрд╕ рдЖрдИрдбреАрдИ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рд░реБрдЪрддрд╛ рд╣реИ (рдУрд╣, рдЕрдЧрд░ рдЕрд╕рд▓реА рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╣рд▓реНрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛):

intellij {
   version '2019.1'
   plugins 'git4idea'
   alternativeIdePath 'E:\\Android Studio'
}

рдФрд░ рдпрд╣рд╛рдБ, рд╢рд╛рдпрдж, рдХрд┐рд╕реА рджрд┐рди рд╣рдо рдПрдХ рдирдИ, рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдкрд░ рдЕрднреА рдирд╣реАрдВред

patchPluginXml {
   changeNotes """
     Add change notes here.<br>
     <em>most HTML tags may be used</em>"""
}

3. рдПрдХ рдпреВрдЖрдИ рдмрдирд╛рдирд╛


рдЬреАрд░рд╛ рдореЗрдВ рдХреБрдЫ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ plugin.xml рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:

<postStartupActivity implementation="Heartbeat"/>

рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдПрдВред

рдпреВрдЖрдИ рдШрдЯрдХ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рд╕реЗ рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдВрдЧ рд╕реЗ рдШрдЯрдХ рд╣реИрдВред рдпрд╣ рд╕рдм рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рдпреВрдЖрдИ рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдкреНрд░рд▓реЗрдЦрди рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ dsl рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдбрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


override fun createCenterPanel(): JComponent? {

   title = "Jira credentials"
   setOKButtonText("Save")

   return panel {
       row {
           JLabel("Jira hostname")()
           hostname = JTextField("https://")
           hostname()
       }
       row {
           JLabel("Username:")()
           username = JTextField()
           username()
       }
       row {
           JLabel("Password:")()
           password = JPasswordField()
           password()
       }
   }
}

рд╣рдордиреЗ рдПрдХ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдпрд╛, рдЗрд╕реЗ рджрд┐рдЦрд╛рдпрд╛, рдЬреАрд░рд╛ рд╕реЗ рдкреНрд░рдорд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред рдЕрдм рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдЕрдзрд┐рдорд╛рдирддрдГ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред PersistingStateComponent рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрдПрдЧрд╛ред

4. PersistingStateComponent рдбрд┐рд╡рд╛рдЗрд╕ (рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ)


PersistingStateComponent рджреЛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ - saveState рдФрд░ loadState: рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╛рд╕ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╕реЗрд╡ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реЗ рдбреЗрдЯрд╛ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд░рд╛рдЬреНрдп рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рд╕реАрдЦрддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ - рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ:

@Storage("yourName.xml")
@Storage(StoragePathMacros.WORKSPACE_FILE) 
@State(
   name = "JiraSettings",
   storages = [
       Storage("trackerSettings.xml")
   ])

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред

override fun getState(): Credentials? {
   if (credentials == null)  {
       val credentialAttributes = createCredentialAttributes()
       credentials = PasswordSafe.instance.get(credentialAttributes)
   }
   return credentials
}
override fun loadState(state: Credentials) {
   credentials = state
   val credentialAttributes = createCredentialAttributes()
   PasswordSafe.instance.set(credentialAttributes, credentials)
}

рдПрдХ рдФрд░ PersistingStateComponent, рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред

рдЬреАрд░рд╛ рдиреЗ рд▓реЙрдЧрд┐рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде, рднреАред рдЕрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдкрд░ рдЪреЗрдХрдЖрдЙрдЯ рдЗрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

5. рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ


IntelliJ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрддрд░ рдХреЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЙрдирдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рд░реБрдЪрд┐ рдХреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдСрдмреНрдЬрд░реНрд╡рд░ рдХреЛ рд▓рдЯрдХрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдбреЙрдХ рд╣реИ , рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдПрдХ рд╡рд┐рд╖рдп рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИ, рдПрдХ рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ Git рдореЗрдВ рдЪреЗрдХрдЖрдЙрдЯ рд╕реБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

subscribeToProjectTopic(project, GitRepository.GIT_REPO_CHANGE) {
    GitRepositoryChangeListener {
        currentBranch = it.currentBranch
    }
}

... рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдирд╛ (рдЦреБрд╢реА рд╕реЗ рдкреНрдпрд╛рджрд╛ рд╕рдордп) ...

subscribeToAppTopic(AppLifecycleListener.TOPIC) {
    object: AppLifecycleListener {
        override fun appWillBeClosed(isRestart: Boolean) {
            if (!isRestart) {
                JiraClient.logTime(entry.key, DateTime.now(), entry.value)
            }
        }
    }
}

... рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ (рдмрд╕ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдерд╛)ред

subscribeToAppTopic(AppTopics.FILE_DOCUMENT_SYNC) {
    CustomSaveListener()
}

рдпрд╣, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдереЛрдбрд╝реА рд╕реА рд╕реНрдХреНрд░реЙрд▓ рдФрд░ рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рди рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

6. EditorEventMulticaster


рдпрд╣ рдЦреБрд▓реЗ рд╕рдВрдкрд╛рджрдХ рдХреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ - рд╕рдВрдкрд╛рджрди, рджреГрд╢реНрдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдирд╛, рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рдиреЛрдВ - рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдФрд░ рддреБрд░рдВрдд рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╡рд░реНрддрдорд╛рди рд╢рд╛рдЦрд╛ (рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ) рд╕реЗ рдЬреАрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдирд╛рдо рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд╛рд░реНрдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВред

7. рдпрд╣рд╛рдБ рдХреЛрдб рдФрд░ рд╡рд┐рд╡рд░рдг


рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╡реАрдирддрдо Android Studio (3.6.1) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЧрд┐рдЯ рдФрд░ рдПрдХ рд╢рд╛рдЦрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдХрдо рд╕реЗ рдХрдо рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдЬреАрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рди рд╣реИред
рддрд╛рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдордп рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ - рд╣рд╛рд░реНрдЯрдмреАрдЯ.рдХреИрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред

8. рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ



PS рдФрд░ рдЕрдВрдд рдореЗрдВ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдЪреБрдирд╛?


- рдЕрд░реЗ, рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦреВрдВ? рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреА рдирд╛рдХ рдЙрдард╛рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдХреЛрдб рдореЗрдВ, рдХреЗ рдЕрд░реНрде рдореЗрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред

- рдлрд┐рд░ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред

- рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рд┐рдВрд╕рдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рд╣реИред рдФрд░ рдлрд┐рд░, рдореИрдВ рд╣рдлреНрддреЛрдВ рддрдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рди рд╣реА рд░рд┐рдмреВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдРрд╕реА рдЦреБрд╢реА рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ?

"рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред" рдлрд┐рд░ рдПрдХ рдФрд░ рдХрд╛рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рд╣реИред рдФрд░ рдореИрдВ рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реАрд╕реАрдПрд╕ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдерд╛ред

"рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?"

- рдирд╣реАрдВред рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ, рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╕реАрдЦрд╛ред

All Articles