
рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓, рд╣рдордиреЗ рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рдЦреЛрдЬ рдЖрдпреЛрдЬрд┐рдд рдХреА - рдбреНрд░реЙрдпрдб рдорд┐рд╢рдиред рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рднреАрддрд░, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рддреАрди рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдерд╛: рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ! (рдмрдЧ рдЦреЛрдЬ рдФрд░ рдХреЛрдб рдЕрдиреБрд╕рдВрдзрд╛рди), рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЗрдВ! (рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ) рдФрд░ рдЗрд╕реЗ рдЦреЛрджреЛ! (Android рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдирд╛)ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЦреЛрдЬ рдХреЗ 23 рдХрд╛рд░реНрдп рдереЗ - рд╡реЗ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рдореБрдарднреЗрдбрд╝ рдХрд░рддреЗ рд╣реИрдВред рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдФрд░ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдПрдВрдЧреЗред
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХреЛрдб рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 1
рд▓реЗрдЦрдХ: рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рд▓реБрд╢реНрдХрд┐рдирд╛рдПрдХ рд╢рд╛рдВрдд рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреА рд░рд╛рдд рдХреЛ, рджреЛ рдПрдЬреЗрдВрдЯ рджреЗрд░ рд╕реЗ рдЙрдарддреЗ рд╣реИрдВ рдФрд░ рдЕрдШреБрд▓рдирд╢реАрд▓ рд╡рд┐рд╡рд╛рдж рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде Sqlite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЧреБрдкреНрдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдЬреЗрдВрдЯ A рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ: рдХреНрд░рд┐рдПрдЯ рдЯреЗрдмрд▓ рдЯреА (рдХреБрдВрдЬреА INT PRIMARY KEY, secret_value_1, secret_value_2), рдФрд░ рдПрдЬреЗрдВрдЯ B рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде CREATE TABLE t (рдХреБрдВрдЬреА рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА ASC, secret_value_1, secret_value_2)ред
рдПрдЬреЗрдВрдЯ рдП рдХреЛ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдЬреЗрдВрдЯ рдмреА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░реНрдХ рд╣реИ: рдЙрдирдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдПрдЬреЗрдВрдЯ рдП рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреА: рд╡рд╣ рд╕реНрддрдВрдн рдпрд╛ рд╕реНрддрдВрдн рдЬреЛ рдПрдЬреЗрдВрдЯ B рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди Agent A рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИ; рд░реВрд╕реА рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдПрдЬреЗрдВрдЯ рдмреА рдХрд╛ рдЕрдиреБрд░реЛрдз рддреЗрдЬреА рд╕реЗ рд╣реЛрдЧрд╛ред
рдиреЛрдЯрдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк: [рдХреЙрд▓рдо рдирд╛рдо 1], [рдХреЙрд▓рдо рдирд╛рдо рдПрди], [рд╕рдВрд░рдЪрдирд╛ рдирд╛рдо] (рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде)
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг: x, y, рд╕рд░рдгреА
рдирд┐рд░реНрдгрдпрдпрд╣ rowId рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
"CREATE TABLE t (key INTEGER PRIMARY KEY ASC, secret_value_1, secret_value_2) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ" рдХреБрдВрдЬреА рдкрдВрдХреНрддрд┐ рдХрд╛ рдЙрдкрдирд╛рдо рд╣реИред "CREATE TABLE t (рдХреБрдВрдЬреА INT PRIMARY KEY, secret_value_1, secret_value_2) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, rowId рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрдмрдВрдз рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдЕрдиреБрд░реЛрдз "INSERT INTO t VALUES (" рдХреБрдЫ "," y "," z ") рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рд╣реИ, рддреЛ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдмреЗрдореЗрд▓ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред
рдЙрддреНрддрд░ рдХреЛ рдХреБрдВрдЬреА, rowId, рдФрд░ key / rowId рдХреА рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рд╣реИ, рддреЛ рд╡реЗ рдПрдХ рд╣реА рдХреЙрд▓рдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред
рдЦреЛрдЬ рд╡реГрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # реи
рд▓реЗрдЦрдХ: рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рд▓реБрд╢реНрдХрд┐рдирд╛рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рджреБрд╢реНрдордиреЛрдВ рдХрд╛ рдЬрд▓реНрдж рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдЬреЗрдВрдЯ рдХреЗрд╡ рдПрдХ рдЬреНрдЮрд╛рдд рдЕрдкрд░рд╛рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдЙрд╕рдиреЗ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рдорд╕реНрдпрд╛: рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╡рд┐рдЬреЗрдЯ рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡реГрддреНрддрд┐ рдПрдЬреЗрдВрдЯ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рд╣реИред
рдЗрд╕реЗ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рдирд╛рдо рджреЗрдВ, рд╕рд╛рде рд╣реА рд╡рд╣ рд░реЗрдЦрд╛ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рд╕рдХреЗред
рдиреЛрдЯрдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк: [рдкрдВрдХреНрддрд┐ рез], [рдкрдВрдХреНрддрд┐ реи] (рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛)
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг: рдлреНрд░реЗрдорд▓реЗрдЖрдЙрдЯ, рд╕реНрдХреНрд░реЛрд▓ рд╡реНрдпреВ
рдирд┐рд░реНрдгрдп1. рд╣рдо рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдиреНрдЯрд▓реЗрдпрдЖрдЙрдЯ рддрддреНрд╡ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (
рдбреЗрд╡рд▓рдкрд░ .android.com/guide/topics/appwidgets#CreatingLayout рджреЗрдЦреЗрдВ)ред
2. рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдФрд░ рдЗрд╖реНрдЯрддрдо рдореЗрдВ рдмрджрд▓реЗрдВ - LinearLayout / FrameLayoutред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлреНрд░реЗрдорд▓реИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рднреА рдЗрд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 3
рд▓реЗрдЦрдХ: рдЕрд░реНрдЯреЛрдо рд╡реЗрдЯрд░рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдкрд░реАрдХреНрд╖рдХреЛрдВ рдиреЗ рд░реИрдо рдХреА рдЦрдкрдд рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡реГрджреНрдзрд┐ рджреЗрдЦреАред рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд░рд┐рд╕рд╛рд╡ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдФрд░ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рдХреЙрд▓ рдХрд╛ рд╕реНрдерд╛рди рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рддреЛ рдЙрди рд╕рднреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред
рдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк: [рдЙрд╕ рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ]: [рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛]: [рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо] (рдмрд┐рдирд╛ рдмреНрд░реИрдХреЗрдЯ рдХреЗ)
рд▓реЗрдХреНрд╕реЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХрдИ рдЙрддреНрддрд░реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ, рдПрдХ # рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ExampleFileName.java рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ,
class ExampleFileName { public problemMethodName(Sting arg) {} public test(Sting arg) { problemMethodName(arg); // 8 ExampleFileName.java } }
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг: ExampleFileName: 8: problemMethodName
рдирд┐рд░реНрдгрдпрдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред
- рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВред
- рдкрд╣рд▓реА рд▓реАрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ SecondActivity рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдмреНрд░реЙрдбрдХреИрд╕реНрдЯрд░рд╛рдЗрд╡рд░ рдкрдВрдЬреАрдХрд░рдг рд╣реИред рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд▓реЙрдЧрдХрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдпрджрд┐ рдЖрдк startTimer () рд╡рд┐рдзрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ CountDownTimer рд╡рд░реНрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдереНрд░реЗрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдирд╖реНрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрджрд╛рд╣рд░рдг (рдХрд╛рдЙрдВрдЯрдбрд╛рдЙрдирдЯрд╛рдЗрдорд░) рд╡рд░реНрдЧ рд░рджреНрдж () рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рджреВрд╕рд░реА рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИред
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЙрдкрдХрд░рдгред рдЖрдк рдЖрд╡реЗрджрди рдореЗрдВ
рд▓реАрдХреЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, adb рдпрд╛ android Profiler рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдвреЗрд░ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░рд╣рдг рдореЗрдореЛрд░реА рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ (MAT) рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред MAT рдореЗрдВ heapdump рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ hprof-convd рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ MAT рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # рек
рдкреЛрд╕реНрдЯ рдХрд░рдиреЗрд╡рд╛рд▓реЗ: Vali Ibragimovрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдЗрд╡рд╛рди рдПрдХ рдСрдирд▓рд╛рдЗрди рдлрд┐рд▓реНрдо рдерд┐рдпреЗрдЯрд░ рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рджрд┐рди рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд╣ рдПрдХ рд╢рд╛рдВрдд рдбреЗрд╡рд▓рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рддреБрд░рдВрдд рдПрдХ рдлрд┐рд▓реНрдо рджреЗрдЦрддреЗ рд╕рдордп рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕реА рд╕рдордп рдирд┐рд╢реНрдЪрдп рдХрд┐рдпрд╛ рдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИред рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд╛рдл рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ рдЧрдИ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдлрд┐рд▓реНрдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдмреИрдХрдПрдВрдб рдХреЛ рдирд╣реАрдВ рднреЗрдЬреА рдЧрдИ рдереАред рдЗрд╡рд╛рди рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ рдХрд┐ рдЙрд╕рдиреЗ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд░реНрдгрдпрд╣рд░ рдкрд╛рдВрдЪ рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рджреЗрдЦрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рднреЗрдЬрдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, ExecutorService рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП ScheduledThreadPoolExecutor рдмрдирд╛рдирд╛, рдЗрд╡рд╛рди рдиреЗ рд╕реЛрдЪрд╛ - рдХреНрдпреЛрдВ рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЖрдЦрд┐рд░, ScheduledThreadPoolExecutor ThreadPoolExecutor рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИред рдЗрд╡рд╛рди рдХреЛ рдпрд╣ рднреА рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╢реЗрдбреНрдпреВрд▓реНрдбрдЯреНрд░реЗрдбрдкреВрд▓ рдПрдХреНрд╕рдХреНрдпреВрдЯрд░ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
scheduleFuture = scheduledExecutorService.scheduleAtFixedRate(() -> { try { timingsApi.sendTiming(filmId, player.getContentPosition()).get(); } catch (Exception e) { e.printStackTrace(); } }, 0, PERIOD_SECONDS, TimeUnit.SECONDS);
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрдереНрдп рд╕реЗ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдо UI рдереНрд░реЗрдб рдореЗрдВ ExoPlayer рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд░рд╣реЗ рдереЗ - рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг 2.9 рдореЗрдВред * ExoPlayer рдиреЗ рд▓реЙрдЧреНрд╕ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рдФрд░ рдЗрд╡рд╛рди рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 5
рд▓реЗрдЦрдХ: рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ Tsybinрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдПрдХ рдХрдВрдкрдиреА рдПрдХ рдХрд┐рд╕рд╛рди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реА рдереАред
рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рддреЛ рдЧрддрд┐рд╣реАрди рдереЗ рдпрд╛ рдЙрдирдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХреНрд╖реЗрдк рдкрде рдерд╛ред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕ рдЦреЗрд▓ рдореЗрдВ рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдзрд╛ рдмрди рдЬрд╛рдПрдЧрд╛ред
рдбреЗрд╡рд▓рдкрд░ рд╡рд╛рд╕рд┐рдпрд╛ рдХреЛ рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди, рд╡рд╛рд╕рд┐рдпрд╛ рдХреЛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ рд╡рд╕реНрдпрд╛ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдиреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЪрд░рдг рдореЗрдВ, рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХрднреА-рдХрднреА рдЦреЗрд▓ рдЬрдорд╛ рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрдпрд╛ рдХреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрдб рдХреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ - рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛, рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдФрд░ рдмрд┐рдирд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗред рдЗрд╕ рддрд░рд╣: 1,17,42
рдирд┐рд░реНрдгрдпрдмреЙрдХреНрд╕рд┐рдВрдЧ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ рдЗрдВрдЯреЗрдЧрд░ рдореЗрдВ рдЗрдВрдЯ) рдорд╣рдВрдЧреЗ рдСрдкрд░реЗрд╢рди рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдорд╢реАрдиреЗрдВ рдХрднреА-рдХрднреА рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рд▓рд╛рдЗрдиреЗрдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВред
ENEMY_LOCK рдФрд░ DECISIONS_LOCK рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рдЕрдЧрд░ рдЙрд╕реА рддрд░реНрдЬ рдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬрдЧрд╣ рд╣реИрдВ, рддреЛ рдЧрддрд┐рд░реЛрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ / рдЗрдВрдЯреЗрдЧрд░, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЙрддреНрддрд░: 7.8
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 6
рд▓реЗрдЦрдХ: рдЗрд╡рд╛рди рдкреБрдЦреЛрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЯреАрдо рдиреЗ рдПрдХ рдирдпрд╛ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред
рдирд┐рд░реНрдгрдпрдпрд╣ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рд╣реИред рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдирд┐рд╣рд┐рдд рд╣реИред рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрдкрдЯреНрдЯреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ (рдПрдирдбреАрдХреЗ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ) рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ! рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧрд╛ред рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣ рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдпрд╣ рд▓реМрдЯреА рд╣реБрдИ рд╡рд╕реНрддреБ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд┐рдЯрдореИрдк рд╣реИ? рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рддреБрд░рдВрдд ImageView рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рд╣рдо рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрддреНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдорд╣рдЬ рдПрдХ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред :)
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 7
рд▓реЗрдЦрдХ: рджрд┐рдорд┐рддреНрд░реА рдЬрд╝реИрддрд╕реЗрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╛рдВрдЫрд┐рдд рдХреЛрдб рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓реЗрдЖрдЙрдЯ рдЯреВрдЯ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреЛрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдиреЛрдЯрдХреЛрдб рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлреНрд░реЗрдо рдареАрдХ 22 рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдлреНрд░реЗрдо рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рд╡рд╛рдорд╛рд╡рд░реНрдд рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг: ScQG1jxbazmjbcarefbRMo
рдирд┐рд░реНрдгрдпрдЕрдм рдбреИрдЧрд░ рдПрдВрдбреНрд░реЙрдпрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИред рдЬрдм рдбреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ, рддреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рдордиреЗ рдЗрдВрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдирд╛ рдФрд░ рдбреИрдЧрд░ рдХреЛ рдмрд╛рдХреА рд╕рднреА рдХрд╛рдо рджреЗрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреИрд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рднреА, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдФрд░ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ, рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЧрд▓рдд рд╕рдВрджрд░реНрдн рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдп рдареАрдХ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рдбрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдЪреНрдЫрдиреНрди рд╣реИред
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ItemStyle рд╕рднреА TextViews рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
- рджреЗрдЦреЗрдВ рдХрд┐ рд╢реИрд▓реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкреИрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред
- рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреЛ рд╕рдордЭреЗрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- ContestAdapter рдореЗрдВ, рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдмрджрд▓реЗрдВред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 8
рдкреЛрд╕реНрдЯ рдХрд░рдиреЗрд╡рд╛рд▓реЗ: Vali Ibragimovрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдЗрд╡рд╛рди рдХреЛ DI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ContentProvider рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХрд╛ рдХрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдбреИрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реБрдЖ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд▓рдЧрд╛ред
рдЗрд╡рд╛рди рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ:
- рдЙрд╕ рд╡рд░реНрдЧ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
- рдПрдХ рдПрдВрдХрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИред
рдиреЛрдЯрдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рд░реВрдк: [рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо]: [рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛] -> [рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо]: [рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛], [рд▓рд┐рдВрдХ]
рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
FirstCLass: 12-> SecondClass: 45, https: //developer.android.com/reference/android/app/Activity#activity-lifecycle
рдирд┐рд░реНрдгрдпрдХрд╛рд░реНрдп рдореЗрдВ рджреЛ рднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рдереЗ:
1. рд╕рдордЭреЗрдВ рдФрд░ DI рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп ContentProvider рдореЗрдВ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХ рдХреЗ рд▓рд┐рдП DI рдШрдЯрдХ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдерд╛ред

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

2. рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдХрд┐ ContentProvider рдХреЗ рд▓рд┐рдП рдСрдирдХреНрд░реАрдЯ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Google рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ ContentProvider рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ onCreate рдЖрд╡реЗрджрди рд╡рд┐рдзрд┐ рдХреЗ рд╡рд░реНрдгрди рд╕реЗ рдПрдХ рдЕрдВрд╢ рд╣реИ:
рдЬрдм рдХреЛрдИ рднреА рдЧрддрд┐рд╡рд┐рдзрд┐, рд╕реЗрд╡рд╛ рдпрд╛ рд░рд┐рд╕реАрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ! # 9
рд▓реЗрдЦрдХ: рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ Tsybinрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЯреАрдХреЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рд╕реВрдЪреА рдХреЛ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рддрддреНрд╡реЛрдВ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпреЗ рддрддреНрд╡ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВред рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрднреА-рдХрднреА рдХреЗрдВрджреНрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд▓рд╛рдЗрдиреЗрдВ рдвреВрдВрдврдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
рдиреЛрдЯрдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк:
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо>: <<рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдирдВрдмрд░>
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо>: <<рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдирдВрдмрд░>
рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд╛рдЗрди рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
рдмрд╛рд░рдлреВ: 1
рдлреВрдмрд░: 12,13,14,99
рдирд┐рд░реНрдгрдпрдХреЛрдб рдореЗрдВ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
1. рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ onViewDetachedFromWindow рдкрд░ рдХреЙрд▓ рд╣рдореЗрд╢рд╛ onBindViewHolder рдХреЗ рдмрд╛рдж рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред OnViewDetachedFromWindow рдХреЗ рд▓рд┐рдП рдЬреБрдбрд╝рд╡рд╛рдВ рд╡рд┐рдзрд┐ onViewAttachedToWindow рд╣реИред рдирддреАрдЬрддрди, рдзрд╛рд░рдХ редview.reset () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рдзреАрдорд╛ рд╣реЛрдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
2. Android рдкрд░ рд╕рдВрд╕реНрдХрд░рдг 7 рд╕реЗ рдкрд╣рд▓реЗ, addView (rootView, params) рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЬрдм рдЖрдк рдХреЛрдИ рджреГрд╢реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ LayoutParam рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдорд╛рд░реНрд╢рдореИрд▓реЛ -
github.com/aosp-mirror/platform_frameworks_base/blob/marshmallow-release/core/java/android/widget/FrameLayout.java#L403рдиреМрдЧрдЯ -
github.com/aosp-mirror/platform_frameworks_base/blob/nougat-release/core/java/android/widget/FrameLayout.java#L384FrameLayout.LayoutParams рдореЗрдВ рджреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ ViewGroup.MarginLayoutParams рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рд╛рд╢рд┐рдпреЗ рдХреЛ рд╕реНрд╡рдпрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ:
github.com/aosp-mirror/platform_framvestvest_base/blob/nougat-release/core/java/android/view.viewрджреВрд╕рд░рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ViewGroup.LayoutParams рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд╛рд░реНрдЬрд┐рди рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ:
github.com/aosp-mirror/platform_frameworks_base/blob/nougat-release/core/java/android/view/ViewGroup.java#L7328рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдВрд╕реНрдХрд░рдг 7 рддрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЙрддреНрддрд░ рд╣реИ:
рдЖрдЗрдЯрдо рджреГрд╢реНрдп: 35
рдореБрдЦреНрдпрддрд╛: 53
рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # 1
рд▓реЗрдЦрдХ: рд╡реИрд▓реЗрдВрдЯрд╛рдЗрди рдмреИрд░рд╢реЗрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреА рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдВрддрд┐рдо .apk рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрддрд┐рд╡рд┐рдзрд┐_main.xml рдореЗрдВ рдХреБрдЫ рд╡реНрдпреВрдЧреНрд░реБрдк рдорд┐рд▓рд╛рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЯреЗрдХреНрд╕реНрдЯрд╡реНрдпреВ рдореЗрдВ рд░рдЦрд╛ред рдирддреАрдЬрддрди, рд▓реЗрдЖрдЙрдЯ рдкрд░ рд╕рднреА рд╡рд┐рдЪрд╛рд░ рдЬреБрджрд╛ рд╣реЛ рдЧрдП рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреВрд░реА рдирд╛рд░рд╛рдЬрдЧреА рд╣реИред
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреМрди рд╕рд╛ рд╡реНрдпреВрдЧреНрд░реБрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрддреНрддрд░ рд╕рд╣реА рджреГрд╢реНрдпрд╕рдореВрд╣ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИред
рдирд┐рд░реНрдгрдпрдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЗ рд╕реЗ (ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдирд▓рд╛рдЗрди рдбреАрдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛) рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ред
рдпрджрд┐ рд╣рдо main_layout рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдЯ рд╡реНрдпреВрдЧреНрд░реБрдк рдХрд╛рдВрд╕реНрдЯреНрд░реЗрдиреНрдерд▓рд╛рдИрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрддреНрддрд░: tniartsnoc
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # реи
рд▓реЗрдЦрдХ: рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ Tsybinрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдПрдХ рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджрд┐рдпрд╛ред рд╡рд╣ рдЕрдЪрдВрднреЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рд▓реЙрдЧ рдЦреЛрд▓реЗ, рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдХреЛ рдкрд╛рдпрд╛: N72XbphDx5NnFl6CKMNl8w == рдФрд░ рдЗрд╕реЗ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕реЗ рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛрдб рдЦреЛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ .apk рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рдерд╛ред
рд╕рдВрджреЗрд╢ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
рдирд┐рд░реНрдгрдпрдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЗ рд╕реЗ (ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдирд▓рд╛рдЗрди рдбреАрдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛) рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ред
рдХреЛрдб рдореЗрдВ рд╣реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрддреНрддрд░ рд╣реИ:
TF: рдЕрдЪреНрдЫрд╛ рдХрд╛рдо!
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # 3
рд▓реЗрдЦрдХ: рд╡реИрд▓реЗрдВрдЯрд╛рдЗрди рдмреИрд░рд╢реЗрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдЖрдк рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░ рд╕рдХрддрд╛ рд╣реИ?
рдЖрд╡реЗрджрди рдкрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВред
рдЖрдк рдЖрд╡реЗрджрди рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд╡рд╛рдм рджреЗрдЦреЗрдВрдЧреЗ - рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВред
рдирд┐рд░реНрдгрдпрдпрд╣ рдлреЛрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд╛рдорд▓рд╛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╣ рдкрд░реНрджреЗ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЖрд╡реЗрджрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдо рдХрд░рдирд╛ рд╣реИ (рдпрд╛ рдмрд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ)ред рдлрд┐рд░ рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ adb рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, рд▓реЙрдЧрдХреИрдЯ рдЯреИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд▓рд╛рд▓ рд╕реНрдЯреЙрдк рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдлрд┐рд░ рдкрд░реНрджреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЖрд╡реЗрджрди рдЦреЛрд▓реЗрдВред рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрддреНрддрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛: sss2384gxcxxX
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # рек
рд▓реЗрдЦрдХ: рдЗрд╡рд╛рди рдкреБрдЦреЛрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд╣рдпреЛрдЧреА рдиреЗ рдирдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдбреЗрдореЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдЕрдм рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реЛрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдПрдХ рдбреЗрдореЛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рд╕реЗ, рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдпрд╛рдж рд╣реИ "рд╣рд╛рдВ, рдпрд╣ рд╡рд╣рд╛рдВ рдЖрд╕рд╛рди рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рд╕реНрдЯрдмреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред"
рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдХрд┐рд╕реА рд╕рд╣рдХрд░реНрдореА рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдирд┐рд░реНрдгрдпрдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдФрд░ рджреГрдврд╝рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, WebView рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рдереЛрдбрд╝реЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо "рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди" рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВред рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдлреЛрди рдХреЛ рдореЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрд╕рдХреЗ рдмрд╛рдж, рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рдеред
рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдЧреИрд░-рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо JSView рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebView рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ, рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рднреА рдЬрд╡рд╛рдм рдХреЗ рд╕рд╛рде рдХреЛрдИ рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред рдлреЛрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ - рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рднреА рдЬреЛрдбрд╝реЗрдВред рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдХреЙрд▓ рдХреЙрд▓рд┐рдВрдЧ рдФрд░ рдлрд┐рд░ storeResult рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рд▓рд╛рдЗрди рдЖ рдЬрд╛рдПрдЧреАред
рд╕реНрд░реЛрдд рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдХреБрдЫ рднреА рд╣рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрддреНрддрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЫреЛрдЯреЗ рд░реЗрдХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖрдкрдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреА рд╣реИред
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # 5
рд▓реЗрдЦрдХ: рдЗрд╡рд╛рди рдкреБрдЦреЛрд╡рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреЗрд╡-рдЕрд╕реЗрдВрдмрд▓реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд▓реАрдХ рд╣реЛ рдЧрдпрд╛, рдЬрд┐рд╕ рдкрд░ рд╕реАрдзреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рдЗрдирд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдХреБрдВрдЬреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реАрд╡рди рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UI рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдХреБрдВрдЬреА рдЦреЛрдЬреЗрдВред
рдирд┐рд░реНрдгрдп1. рдЬрдм рдЖрдк рдПрдореБрд▓реЗрдЯрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реАрдХреНрд░реЗрдЯрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЯреЛрд╕реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЪреВрдВрдХрд┐ рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ рд▓реЙрдЧ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд╛рдо рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
adb logcat | grep 'SecretActivity'
1898 1898 E SecretActivity: Try broadcast ZggwxXsaQ9SapPKyHpnwnYmALHazVFWX
2. рд╣рдо рд▓реЙрдЧ рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рдг рдлреЗрдВрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
adb shell am broadcast -a ZggwxXsaQ9SapPKyHpnwnYmALHazVFWX
3. рд╕реНрдХреНрд░реАрди рдкрд░ рдЯреЛрд╕реНрдЯ рд╕реАрдХреНрд░реЗрдЯрд░рд╛рдЗрд╡рд░ рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
adb logcat | grep 'SecretReceiver'
1898 1898 E SecretReceiver: ISecretService.aidl
1898 1898 E SecretReceiver: package android.app;
1898 1898 E SecretReceiver: interface ISecretService {
1898 1898 E SecretReceiver: String getSecret();
1898 1898 E SecretReceiver: }
1898 1898 E SecretReceiver: See global settings to bind SecretService
4. рд╣рдо рд╕реАрдХреНрд░реЗрдЯ рд╕рд░реНрд╡рд┐рд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
adb shell settings list global
...
bind_secret_service_action=g8mNyGQZR8aHLTXNWcjdwJJYZ85Ewx83
...
5. рд╣рдо рдЗрд╕ рд╕рд╣рд╛рдпрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ ISecretService рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(); intent.setAction("g8mNyGQZR8aHLTXNWcjdwJJYZ85Ewx83"); PackageManager pm = getPackageManager(); List<ResolveInfo> resolveInfoList = pm.queryIntentServices(intent, 0); if (resolveInfoList == null || resolveInfoList.size() != 1) { return; } ResolveInfo serviceInfo = resolveInfoList.get(0); ComponentName component = new ComponentName(serviceInfo.serviceInfo.packageName, serviceInfo.serviceInfo.name); Intent explicitIntent = new Intent(intent); explicitIntent.setComponent(component); bindService(explicitIntent, new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { ISecretService secretService = ISecretService.Stub.asInterface(service); try { Log.d("MainActivity", secretService.getSecret()); } catch (Exception e) { Log.e("MainActivity", "RemoteException", e); } } @Override public void onServiceDisconnected(ComponentName name) { } }, Context.BIND_AUTO_CREATE); } }
6. рднрд╛рдЧреЛ, рд▓реЙрдЧ рдореЗрдВ рд╣рдореЗрдВ рдЬрд╡рд╛рдм рдорд┐рд▓рддрд╛ рд╣реИ:
adb logcat | grep 'MainActivity'
1898 1898 E MainActivity: VENHz=qWr7y!t3ZhP!8Skw!!kcTkt7V%
рдЗрд╕реЗ рд╣реИрдХ рдХрд░реЛ! # 6
рд▓реЗрдЦрдХ: рдкрд╛рд╡реЗрд▓ рд╡реЛрд░реЛрдмрдХрд▓реЛрд╡рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓рд╢реНрд░реА Tupper рдиреЗ рдПрдХ Android рдРрдк рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
рд╕рдВрджреЗрд╢ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк: рдПрдХ рдХрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧред
рдирд┐рд░реНрдгрдпрдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рд╣рдо рджреЛ рдмрдЯрди рджреЗрдЦрддреЗ рд╣реИрдВ: рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдФрд░ рд╕реВрддреНрд░ рднреЗрдЬреЗрдВред рдЬрдм рдЖрдк рдЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рднреЗрдЬрддрд╛ рд╣реИред

рд╣рдо рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .apk рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЖрдк onSendMessageClick рдФрд░ onSendFormulaClick рддрд░реАрдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ "com.yandex.tupper.action.NEW_MESSAGE" рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╢рдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдВрдЬреА "com.yandex.tupper.message" рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реВрдЪреА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рднреЗрдЬрддреЗ рд╣реИрдВред рд╡реЗ PackageManager.queryBroadcastReceivers рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рд╕рдВрджреЗрд╢ рдХреЛрдб рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реЗ рдирд┐рдХрд╛рд▓рдХрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд░рд╛рд╕реНрддрд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ (рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ) рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд░рдПрд╕рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЬрдЯрд┐рд▓ рд╣реИред
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рд╕рд╛рд░рдг рдЗрд░рд╛рджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИред рд╣рдо рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд░рд┐рд╕реАрд╡рд░ рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ:
<receiver android:name=".TupperMessageReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.yandex.tupper.action.NEW_MESSAGE" /> </intent-filter> </receiver>
рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗ:
public class TupperMessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); if (message == null) { return; } Intent activityIntent = new Intent(context, MainActivity.class); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activityIntent.putExtra(MainActivity.EXTRA_MESSAGE, message); context.startActivity(activityIntent); } }
рдЕрдм рд╕рдВрджреЗрд╢ рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рд╣реА рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк "Tupper рдХреЗ рд╕рдВрджреЗрд╢" рдХреЗ рд▓рд┐рдП Yandex рдореЗрдВ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡реВрдкрд░ рдХреЗ Tupper рдХреЗ рд╕реВрддреНрд░ рдкрд░
рдПрдХ рд▓реЗрдЦ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╕реВрддреНрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
48584 ...4858450636189713423582095962494202044581400587983244549483093085061934704708809928450644769865524364849997247024915119110411605739177407856919754326571855442057210445735883681829823754139634338225199452191651284348332905131193199953502413758765239264874613394906870130562295813219481113685339535565290850023875092856892694555974281546386510730049106723058933586052544096664351265349363643957125565695936815184334857605266940161251266951421550539554519153785457525756590740540157929001765967965480064427829131488548259914721248506352686630476300
рдЗрд╕ рдирдВрдмрд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдореЗрдВ рднреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдЬрд╛рд╡рд╛ рдореЗрдВ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рд╕реБрдВрджрд░рддрд╛ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА рдирдВрдмрд░ рдХреЛ рдореЛрдиреЛрдХреНрд░реЛрдо рдмрд┐рдЯрдореИрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
public class TupperCodec { static final int TUPPER_R = 17; private TupperCodec() {} public static BigInteger decodeFromDecString(String decString) throws NumberFormatException { BigInteger data = new BigInteger(decString, 10); return data.divide(BigInteger.valueOf(TUPPER_R)); } public static String getNumberAsBinImage(BigInteger number) { String binString = number.toString(2); StringBuffer result = new StringBuffer(binString.length()); int i; for (i = 0; i < binString.length(); i++) { if ((i % TUPPER_R) == 0 && i > 0) { result.append('\n'); } result.append(binString.charAt(binString.length() - 1 - i)); } int numberOfRows = (binString.length() + TUPPER_R - 1) / TUPPER_R; for (; i < numberOfRows * TUPPER_R; i++) { result.append(~_~quot�quot~_~); } return result.toString(); } public static Bitmap getBinImageAsBitmap(String binImage) { String[] lines = binImage.split("\n"); int[] colors = new int[lines.length * TUPPER_R]; for (int i = 0; i < lines.length; i++) { String line = lines[i]; assert line.length() == TUPPER_R; for (int j = 0; j < line.length(); j++) { colors[i * TUPPER_R + j] = line.charAt(j) == '0' ? Color.WHITE : Color.BLACK; } } return Bitmap.createBitmap(colors, TUPPER_R, lines.length, Bitmap.Config.ARGB_8888); } }
рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ, рдХреЙрд▓ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ ImageView рдореЗрдВ рдПрдХ рдмрд┐рдЯрдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:
public class MainActivity extends AppCompatActivity { static final String EXTRA_MESSAGE = "com.yandex.tupper.message"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); if (intent != null && intent.hasExtra(MainActivity.EXTRA_MESSAGE)) { String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); try { BigInteger data = TupperCodec.decodeFromDecString(message); String binImage = TupperCodec.getNumberAsBinImage(data); Bitmap bitmap = TupperCodec.getBinImageAsBitmap(binImage); ImageView imageView = findViewById(R.id.message_image); imageView.setImageBitmap(bitmap); CharSequence toastText = TextUtils.ellipsize(message, new TextPaint(), 400, TextUtils.TruncateAt.END); Toast.makeText(this, toastText, Toast.LENGTH_SHORT).show(); } catch (NumberFormatException ex) { Toast.makeText(this, getString(R.string.invalid_message), Toast.LENGTH_LONG).show(); } } } }

тАФ
clck.ru/FevR5 .
hack it! #7
:.
. , , .
: - .
.apk zip- classes.dex тАФ Java- . , , dex2jar Android Studio. dex2jar Java-, Android Studio class-. , .
, proguard ( android.support.* androidx.*, ), тАФ com.yandex.contest.keygenme.MainActivity, Activity . , : MainActivity.a#doInBackground bbaab b , .

c d. N- ╧А ( --), . , ╧А
hexed [c[i] + key[i]] = d[i], i = 0..11. , . 50 hex- ╧А. : 537306089144. key_2056BE33E064.
, , тАФ . doInBackground:

, , if (var12[0] == var8) {тАж }. var7 тАФ i- . , var7 0 9 . . , .apk ( JVM) .
hack it! #8
:N , . : Android 4.4, 1200 ├Ч 600, FM-. , , FM- . FM- , .
, FM-. .
, :
1. 106.00
2. (seek)
3. ,
, .
: . .
: , a(106.00) 106.00 , b(true) , c() , a(106.00);b(true);c()
: , FM- . .apk dex-. Java. , , тАФ jadx.
.apk, . MainActivity. : fragment_holder RadioFullFragment . . RadioFullPresenter, ChangeRadioFrequencyUsecase, RadioRepo. .
┬лimplements RadioRepo┬╗. : RadioRepoImpl. , b. ServiceConnection тАФ . , b lambda$new$0$RadioRepoImpl. , $$Lambda$RadioRepoImpl$FYTR9gAgZEGvrLjkbkpAIup7OKw, serviceConnection IRadioService radioService. , RadioService.
: onServiceConnected ┬лb radioManager = Stub.asInterface(service)┬╗. , . ┬лbindService┬╗. bindService ┬лcom.some_company.help_service┬╗. , com.some_company.carradio.FmUtils. , , . , : j , : 8880 88.00 . 8800. a. , .
. : k z. RadioRepoImpl, enableRadio() disableRadio() k. z(boolean isForwardDirection), ┬л (seek) ┬╗.
: a(10600);z(true);j().
hack it! #9
:flatbuffers . GPX . . , .
FlatBuffers :
namespace ru.yandex.android.task; struct GeoPoint { latitude:double; longitude:double; } table Points { items:[GeoPoint]; } root_type Points;
: , sha256. .
, FlatBuffers.
1. fbs- .
2. Java-. JVM- , Gradle flatbuffers.
3. fbs-.
4. fbs-, - тАФ . , FlatBuffers.
5. , . structs , struct table. .
6. Kotlin. FlatBuffers.
fbs , . FlatBufferBuilder input. input :
val pointsList = Points.getRootAsPoints(buffer) val restoredPoints = (0 until pointsList.itemsLength()) .mapNotNull(pointsList::items)
c , (lat, long). as-is GPX-.
GPX- ( ) . GPX XML. , XML- . XML- GPX-track-. XML- MAP- . ┬лyandroid┬╗.
, . CLI-:
echo "yandroid" | shasum -a 256
.
Android
dig it! #1
:QA- .
:
тАФ ( 'Screen 1')
тАФ GO NEXT ( 'Screen 2')
тАФ GO BACK
тАФ GO NEXT,
тАФ 5тАУ10
: 'Screen 2'.
: , ┬л ┬╗.
.apk .
C stack trace, .
рдЙрджрд╛рд╣рд░рдгstack trace тАж
at android.os.MessageQueue.nativePollOnce(Native method) at android.os.MessageQueue.next(MessageQueue.java:326) at android.os.Looper.loop(Looper.java:160) at com.android.server.SystemServer.run(SystemServer.java:454) at com.android.server.SystemServer.main(SystemServer.java:294) at java.lang.reямВect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:838)
тАж , RuntimeInit.java, 493, :
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
, , ┬л ┬╗.
/data/anr/traces.txt /data/anr/anr_* (https://developer.android.com/topic/performance/vitals/anr#pull_a_traces_file). adb-:
adb root adb shell ls /data/anr adb pull /data/anr/<filename>
( adb root , Google API.)
stack trace . тАФ stack trace, :
com.droid.mission.anrapk.MainActivity$2.onClick(MainActivity.java:43)

dig it! #2
:Android Studio, , MultiDex. -, apk- .dex- (65536). / apk Andorid Studio .dex-.
тАФ dex- , dex- ( , ) . dex- .
: multidex , android gradle plugin 3.0.0 тАУ 3.1.4
.
?
, dex-. Gradle тАФ , , .apk.
Java- dex- ART/Dalvik: transformClassesWithDexBuilderForDebug. dex-, . Android Gradle plugin (AGP) Gradle . , тАФ , Gradle . , . AGP, тАФ DSL- Gradle build.gradle.
3.1.* minimal-main-dex. , .
dig it! #3
:тАФ - .
?
: тАФ .
, . Android WindowManager.
. ,
WindowManager.LayoutParams . , ,
TYPE_APPLICATION .
, , . , , - .
, Android SDK, , . ,
WindowManager AOSP. , , , .
, ,
TYPE_BOOT_PROGRESS . getWindowLayerFromTypeLw WindowManagerPolicy. Javadoc :
Returns the layer assignment for the window type. Allows you to control how different kinds of windows are ordered on-screen
, , . switch-case , layer тАФ TYPE_POINTER, 2018. .
dig it! #4
:, - , .
. , , , .
Android , ?
, , Android SDK, .
startActivity Context . Context Activity тАФ ,
startActivity . startActivityForResult. , Activity
mInstrumentation.execStartActivity .
? startActivity ActivityManagerService, ServiceManager.getService(Context.ACTIVITY_SERVICE).
ActivityManagerService . startActivityAsUser, startActivity, ActivityStarter execute. ,
.
C
startActivity . ,
abort , true START_ABORTED Activity.
, , mService.mIntentFirewall.checkStartActivity. ,
. :
This is called from ActivityManager to check if a start activity intent should be allowed.
, IntentFirewall .
RULES_DIR . : ifw.
dig it! #5
:. , (, ) тАФ 8800. , , (+8800). , 8800 +8800 , / , .
. . , +8800 8800 .
, (java/c/c++). , .
:
source.android.comтАФ :
androidxref.comDialer , , URI
authorities = "content://com.android.contacts"
.
ContentProvider. URI ContactsPoviider. : , SQL- . :
sb.append("PHONE_NUMBERS_EQUAL(" + Tables.DATA + "." + Phone.NUMBER + ", ");
PHONE_NUMBERS_EQUAL тАФ SQL-. sqlite .
sqlite, , . ContactsProvider , config_use_strict_phone_number_comparation, . :
<bool name="config_use_strict_phone_number_comparation">true</bool>