рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рджреВрд░ 2012 рд╕реЗ, рд╣реЗрдмреНрд░рд╛ рдХреЗ рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгреА рдпрд╛рдж рд╣реИ:
... рдЕрдЧрд░ рд╢реБрд░реВ рд╕реЗ рд╣реА рдХреЛрдИ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рд░рд╣реЗрдЧрд╛
рдЕрдзреВрд░рд╛ рд╣реИ, рдПрдХ рд╢реЗрд▓реНрдл рдкрд░ рдзреВрд▓ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА ...
рд╡рд┐рд╖рдп рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдШрдЯрдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдзреВрд▓ рднрд░реЗ рд╢реЗрд▓реНрдл рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдХрд╛рд░реНрдп рдпрд╣ рдерд╛ рдХрд┐ рдореБрдЭреЗ "рдП" рд╕реЗрд╡рд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ рдЖрд╡реЗрджрди рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдЪрд▓рд╛рдПрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдлреИрд╕рд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ ... рднрдпрднреАрдд рдерд╛ред
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рд╕рдорд╕реНрдпрд╛
Google рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдорд╛рдиреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ
рд╡рд┐рдзрд╛рдирд╕рднрд╛ ред
android { //... buildTypes { release { buildConfigField("String", "HOST_URL", "\"prod.com\"") } debug { buildConfigField("String", "HOST_URL", "\"debug.com\"") } } }
Build.gradle рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, android рдЙрдкрдХрд░рдг buildTypes рдФрд░ productFlavors рд╕реЗ buildConfigFileds рдХреЗ рд╕рднреА рдорд╛рди рд▓реЗрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП BuildConfig рдлрд╛рдЗрд▓реЗрдВ рдЬрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛ :
public final class BuildConfig {
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╕реНрд╡рд╛рдж рдФрд░ рдХрд╕реНрдЯрдо рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ> 20 рдФрд░ 3 рд╡рд╛рддрд╛рд╡рд░рдг (рдЖрдВрддрд░рд┐рдХ / рдЕрд▓реНрдлрд╛ / рдЙрддреНрдкрд╛рджрди) рдереЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА - рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдПрдХ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдорд╛рди рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреАред рдЖрдкрдХреЛ VCS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ build.gradle рдХреЙрдиреНрдлрд┐рдЧреНрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдкрдиреА рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕реАрдзреЗ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рддрдВрддреНрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рд╛рдЗрд▓, рдЖрдкрдХреЗ рд╕реАрдЖрдИ рдХреА рд╕реЗрд╡рд╛рдПрдВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдереАрдВ, рдЬрд╣рд╛рдВ рд░рд┐рд▓реАрдЬ рдкреНрд░реЛрдбрдХреНрд╢рди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рддрдХ рдореЗрд░реА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рдереАред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╣рд┐рддреЛрдВ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдпрд╛ рдЖрдВрддрд░рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛
рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд░рд▓ .рдкреНрд░реЛрдЯреЗрдХреНрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ: рдореВрд▓реНрдп рдорд╛рдирдЪрд┐рддреНрд░ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛ рдбрд┐рд▓реАрд╡рд░реА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо .properties рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдХрджрдо рд╣реИ: buildConfigField рд╕реЗ BuildConfig рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХреМрди рдХрд░рддрд╛ рд╣реИ? рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ, рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рднреА рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
apply plugin: "com.android.application"
рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЖрдкрдХреА build.gradle рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, BuildConfig рд╡рд░реНрдЧ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣, рдореИрдВ рдЕрдкрдиреА рджрд╡рд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ com.android.application рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧреА рдФрд░ рдмрдЪрд╛рдПрдЧреА
рдореБрдЭреЗ рдЗрд╕ рд╕рд┐рд░рджрд░реНрдж рд╕реЗред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдХ рдЕрдиреБрдмрдВрдз рдкреНрд░рджрд╛рди рдХрд░реЗрдВ,
рдЬреЛ рд╕рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред
рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдХреЛ рдЙрдкрдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВред рд╕рдм рдХреБрдЫ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рджреЗред

рдирд┐рд░реНрдгрдп
рдКрдкрд░ рд╣рдордиреЗ рд╕рдорд╛рдзрд╛рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдмрдЪреА рд╣реИ, рд╡рд╣ рд╣реИ рдЗрд╕реЗ рдЬреАрд╡рди рдореЗрдВ рдЙрддрд╛рд░рдирд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдПрдХ рддреБрдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рдФрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢реБрд░реВ рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ред
рдЙрдкрд╛рдп рдмрддрд╛рдПрдВ ```groovy class Constants { // Environments properties path pattern, store your config files in each folders of pattern static final CONFIG_PROPERTY_PATTERN = "config/%s/config.properties" } android.buildTypes.all { buildType -> buildConfigFields(buildType, buildType.name) } android.applicationVariants.all { appVariant -> buildConfigFields(appVariant, appVariant.flavorName) } private def buildConfigFields(Object variant, String variantName) { def properties = getProperties(variantName) properties.each { key, value -> variant.buildConfigField( parseValueType(value), toConfigKey(key), value ) } } // Convert config property key to java constant style private def toConfigKey(String key) { return key.replaceAll("(\\.)|(-)", "_") .toUpperCase() } // Parse configuration value type private def parseValueType(String value) { if (value == null) { throw new NullPointerException("Missing configuration value") } if (value =~ "[0-9]*L" ) { return "Long" } if (value.isInteger()) { return "Integer" } if (value.isFloat()) { return "Float" } if ("true" == value.toLowerCase() || "false" == value.toLowerCase()) { return "Boolean" } return "String" } private def getProperties(String variantName) { def propertiesPath = String.format( Constants.CONFIG_PROPERTY_PATTERN, variantName ) def propertiesFile = rootProject.file(propertiesPath) def properties = new Properties() // Do nothing, when configuration file doesn't exists if (propertiesFile.exists()) { properties.load(new FileInputStream(propertiesFile)) } return properties } ```
рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдмрд╛рд░ рдЙрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдирд╣реАрдВ рдерд╛ - рдПрдХ рдзреВрд▓ рднрд░реА рд░реЗрдЬрд┐рдореЗрдВрдЯред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдирд╛ рдирд┐рд░реНрдгрдп "рдмреЗрдЪрдиреЗ" рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рдбреЙрдХ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдорд╛рдорд▓реЗ рдХреЛ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ ... рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╣рдо рд╕рднреА рд▓реЛрдЧ рд╣реИрдВ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрд▓рд╕реА рд▓реЛрдЧ рд╣реИрдВред рдХреЛрдИ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдПрдореНрдмреЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ, рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЕрдЧрд░ рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЕрдЧрд░ рд╡рд╣ рдХреБрдЫ рдФрд░ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИ, рдФрд░ рдореИрдВ рдЦрд╛рдВрдЪреЗ рд╕реЗ рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рдирд┐рд░реНрдгрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдРрд╕рд╛ рдПрдХреАрдХрд░рдг рдореБрдЭреЗ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ред рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдП рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреА рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд░рд╛рд╕реНрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдкреНрд▓рдЧ-рдЗрди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░рд┐рдореЛрдЯ рдбрд┐рд▓реАрд╡рд░реА рд╕реЗ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛрдВрдЧреА?
- рдПрдХ рдЖрд▓рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рд╕рдорд╕реНрдпрд╛ред рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд▓реЗрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреЛрдб рд╕рдорд░реНрдерди, рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдкреНрд░реЛрдмреНрд░реЛрд╕рд┐рд╡рдирд┐рд╣ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред
- рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ред рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ 2019 рд╣реИ рдФрд░ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ https://sonarcloud.io рдпрд╛ https://codecov.io/
- рд╡рд┐рдиреНрдпрд╛рд╕ред рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдмрд┐рд▓реНрдбрдЯрд╛рдЗрдкреНрд╕ рдпрд╛ рдкреНрд░реЛрдбрдХреНрдЯрдлреНрд▓рд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдПрдХ рдЪреАрдЬ рдпрд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
- рдзреВрд▓ рднрд░реА рд╢реЗрд▓реНрдл рдХреА рд╕рдлрд╛рдИред рдореИрдВрдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рд╕реЗ рдХрдорд░реЗ рдХреЗ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрддреЗ рд╕рдордп рдореИрдВ рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛, рдпрд╣ рдПрдХ рдирдП рд╡рд┐рд╖рдп рдкрд░ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ
рдпрд╣рд╛рдБ ред