hacktricks/mobile-pentesting/android-app-pentesting/android-applications-basics.md

57 KiB

Android Applications Basics

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Android Security Model

рджреЛ рдкрд░рддреЗрдВ рд╣реИрдВ:

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

UID Separation

рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдРрдк рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдРрдк рдХреЗрд╡рд▓ рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХреЗред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдРрдк рд╕реНрд╡рдпрдВ, OS рдХреЗ рдХреБрдЫ рдШрдЯрдХ рдФрд░ рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрдк рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

UID Sharing

рджреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдорд╛рди UID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рдордЭреМрддрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рджреЛрдиреЛрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдордЭреМрддрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирдХрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╛рди UID рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рд╕рдорд╛рди android:sharedUserId рдорд╛рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

Sandboxing

Android Application Sandbox рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЗ рддрд╣рдд рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдкрдиреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдРрдк рдХрд╛ рдХреЛрдб рдЕрдиреНрдп рдРрдкреНрд╕ рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рдЪрд▓рддрд╛ рд╣реИред
Android 5.0(L) рд╕реЗ SELinux рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, SELinux рдиреЗ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЗрд╡рд▓ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрддрд┐рдпрд╛рдБ рдмрдирд╛рдИред

Permissions

рдЬрдм рдЖрдк рдПрдХ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ, рддреЛ рдРрдк AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ uses-permission рддрддреНрд╡реЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реИред uses-permission рддрддреНрд╡ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреБрдорддрд┐ рдХреЗ рдирд╛рдо рдХреЛ name attribute рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ maxSdkVersion attribute рднреА рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЙрдЪреНрдЪ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рднреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рднреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

  • рдЕрдиреБрдорддрд┐ рдХрд╛ рдирд╛рдо
  • permission-group attribute, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • protection-level рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдХреИрд╕реЗ рджреА рдЬрд╛рддреА рд╣реИрдВред рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
  • Normal: рдЬрдм рдРрдк рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬреНрдЮрд╛рдд рдЦрддрд░реЗ рдирд╣реАрдВ рд╣реЛрддреЗред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рд╕реНрд╡реАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • Dangerous: рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдорддрд┐ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдХреБрдЫ рдЙрдЪреНрдЪ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • Signature: рдХреЗрд╡рд▓ рдЙрд╕реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдРрдкреНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдордЬрдмреВрдд рдкреНрд░рдХрд╛рд░ рд╣реИред
  • SignatureOrSystem: рдХреЗрд╡рд▓ рдЙрд╕реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдРрдкреНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо-рд╕реНрддрд░реАрдп рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдРрдкреНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

Pre-Installed Applications

рдпреЗ рдРрдкреНрд╕ рдЖрдорддреМрд░ рдкрд░ /system/app рдпрд╛ /system/priv-app рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ classes.dex рдлрд╝рд╛рдЗрд▓ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ)ред рдпреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рд╡реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рд░реВрдЯ)ред

  • рдЬреЛ AOSP (Android OpenSource Project) ROM рдХреЗ рд╕рд╛рде рд╢рд┐рдк рдХрд┐рдП рдЧрдП рд╣реИрдВ
  • рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП
  • рд╕реЗрд▓ рдлреЛрди рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП (рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрдирд╕реЗ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рд╣реЛ)

Rooting

рдПрдХ рднреМрддрд┐рдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд░реВрдЯ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ 1 рдпрд╛ 2 рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрддреА рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рд╢реЛрд╖рдг рдХрд╛рдо рдХрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рд▓рд┐рдирдХреНрд╕ su рдмрд╛рдЗрдирд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ PATH env рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ /system/xbinред

рдПрдХ рдмрд╛рд░ рдЬрдм su рдмрд╛рдЗрдирд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ su рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░реВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ Superuser рдФрд░ SuperSU (рдЬреЛ Google Play рд╕реНрдЯреЛрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ)ред

{% hint style="danger" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реВрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреА рд╣реИ {% endhint %}

ROMs

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рдлрд░реНрдорд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ OS рдХреЛ рдмрджрд▓реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдкреБрд░рд╛рдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдврд╝рд╛рдирд╛, рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рдпрд╛ рдирд╡реАрдирддрдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
OmniROM рдФрд░ LineageOS рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдлрд░реНрдорд╡реЗрдпрд░ рдореЗрдВ рд╕реЗ рджреЛ рд╣реИрдВред

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

Implications

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

Android Application Fundamentals

  • рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк APK рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ ZIP рдлрд╝рд╛рдЗрд▓ рд╣реИ (рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ .zip рдореЗрдВ рдмрджрд▓рдХрд░, рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  • APK рд╕рд╛рдордЧреНрд░реА (рдкреВрд░реНрдг рдирд╣реАрдВ)
  • AndroidManifest.xml
  • resources.arsc/strings.xml
  • resources.arsc: рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдмрд╛рдЗрдирд░реА XMLред
  • res/xml/files_paths.xml
  • META-INF/
  • рдпрд╣реАрдВ рдкрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд┐рдд рд╣реИ!
  • classes.dex
  • рдбрд▓рд╡рд┐рдХ рдмрд╛рдЗрдЯрдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдЬрд╛рд╡рд╛ (рдпрд╛ рдХреЛрдЯрд▓рд┐рди) рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • lib/
  • рдореВрд▓рднреВрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ CPU рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
  • armeabi: ARM рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  • armeabi-v7a: ARMv7 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  • x86: X86 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  • mips: рдХреЗрд╡рд▓ MIPS рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб
  • assets/
  • рдРрдк рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд┐рдз рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓рднреВрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ DEX рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХрднреА-рдХрднреА рдореИрд▓рд╡реЗрдпрд░ рд▓реЗрдЦрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • res/
  • рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ resources.arsc рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

Dalvik & Smali

рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, Java рдпрд╛ Kotlin рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдкреНрд╕ рдХреА рддрд░рд╣ JVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдВрдбреНрд░реЙрдЗрдб рдЗрд╕ рдХреЛрдб рдХреЛ Dalvik Executable (DEX) рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдбрд▓рд╡рд┐рдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЗрд╕ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рддреА рдереА, рд▓реЗрдХрд┐рди рдЕрдм, рдирдП рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рд░рдирдЯрд╛рдЗрдо (ART) рдЗрд╕рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред

рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, Smali рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ DEX рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛ рдорд╛рдирд╡-рдкрдардиреАрдп рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ Smali рдФрд░ baksmali рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдбрд┐рд╕рдЕрд╕реЗрдВрдмрд▓реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

Intents

Intents рдПрдВрдбреНрд░реЙрдЗрдб рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рдЙрдирдХреЗ рдШрдЯрдХреЛрдВ рдпрд╛ рдЕрдиреНрдп рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╕рд╛рдзрди рд╣реИрдВред рдпреЗ рд╕рдВрджреЗрд╢ рд╡рд╕реНрддреБрдПрдВ рдРрдкреНрд╕ рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд▓реЗ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬреИрд╕реЗ HTTP рд╕рдВрдЪрд╛рд░ рдореЗрдВ GET/POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ рдПрдХ Intent рдореВрд▓ рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИред Intents рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдпрд╛ рдРрдкреНрд╕ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП Intent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдРрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЦреЛрд▓рдирд╛
  • рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдРрдкреНрд╕ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ
  • рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн, рд░реЛрдХрдирд╛ рдФрд░ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • ContentProviders рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
  • рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ

рдпрджрд┐ рдХрдордЬреЛрд░ рд╣реИ, рддреЛ Intents рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рдорд▓реЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Intent-Filter

Intent Filters рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХреИрд╕реЗ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐, рд╕реЗрд╡рд╛, рдпрд╛ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд░рд┐рд╕реАрд╡рд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ Intents рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рд╡реЗ рдЗрди рдШрдЯрдХреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдлрд╝рд┐рд▓реНрдЯрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрдерд╛рди AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд░рд┐рд╕реАрд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдХреЛрдбрд┐рдВрдЧ рдХрд░рдирд╛ рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред

Intent Filters рд╢реНрд░реЗрдгрд┐рдпреЛрдВ, рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░реЛрдВ рд╕реЗ рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реЗрдЯрдЕрдк рдШрдЯрдХреЛрдВ рдХреЛ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ Intents рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдШреЛрд╖рд┐рдд рдорд╛рдирджрдВрдбреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

рдПрдВрдбреНрд░реЙрдЗрдб рдШрдЯрдХреЛрдВ (рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ/рд╕реЗрд╡рд╛рдПрдБ/рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛/рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд░рд┐рд╕реАрд╡рд░реНрд╕) рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдЙрдирдХреА рджреГрд╢реНрдпрддрд╛ рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рдПрдХ рдШрдЯрдХ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдиреНрдп рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ exported рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде true рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдПрдХ Intent Filter рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдЬреА рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЕрдиреНрдп рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рди рдХрд░реЗрдВред рдпрд╣ рдЙрдирдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ exported attribute рдХреЛ false рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдЗрди рдШрдЯрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░рдХреЗред permission attribute рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЙрди рдРрдкреНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХреЗ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреБрдорддрд┐ рд╣реИ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рдЗрд╕рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

<activity android:name=".MyActivity" android:exported="false">
<!-- Intent filters go here -->
</activity>

Implicit Intents

Intents рдХреЛ рдПрдХ Intent рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));

The Action of the previously declared intent is ACTION_SEND and the Extra is a mailto Uri (the Extra if the extra information the intent is expecting).

рдпрд╣ рдЗрд░рд╛рджрд╛ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

An intent-filter рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП action, data рдФрд░ category рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

"Intent resolution" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдХреМрди рд╕рд╛ рдРрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ priority attribute рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ intent-filter declaration рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдЪрдпрдирд┐рдд рд╣реЛрдЧрд╛ред рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ -1000 рдФрд░ 1000 рдХреЗ рдмреАрдЪ рд╕реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди SYSTEM_HIGH_PRIORITY рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ conflict рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ "choser" Window рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХреЗред

Explicit Intents

рдПрдХ рд╕реНрдкрд╖реНрдЯ intent рдЙрд╕ рд╡рд░реНрдЧ рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдпрд╣ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ:

Intent downloadIntent = new (this, DownloadService.class):

рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкреВрд░реНрд╡ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЗрд░рд╛рджреЗ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Intent intent = new Intent();
intent.setClassName("com.other.app", "com.other.app.ServiceName");
context.startService(intent);

Pending Intents

рдпреЗ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдУрд░ рд╕реЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рдРрдк рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдПрдХ Pending Intent рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрд░рд╛рджрд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдШреЛрд╖рд┐рдд рдЗрд░рд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЗрд░рд╛рджрд╛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рддреЛ рдПрдХ рджреБрд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШреЛрд╖рд┐рдд рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреАрдбрд╝рд┐рдд рдРрдк рдХреА рдУрд░ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреЛрдИ рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддреЛ рджреБрд╖реНрдЯ рдРрдк рдкреАрдбрд╝рд┐рдд рдХреА рдУрд░ рд╕реЗ рдХреЛрдИ рднреА рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХреЗрдЧрд╛ред

Broadcast Intents

рдкрд┐рдЫрд▓реЗ рдЗрд░рд╛рджреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдРрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдЗрд░рд╛рджреЗ рдХрдИ рдРрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, API рд╕рдВрд╕реНрдХрд░рдг 14 рд╕реЗ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдРрдк рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, Intent.setPackage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред

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

рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдХреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рд╕рд╛рдорд╛рдиреНрдп (рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕) рдФрд░ рдХреНрд░рдордмрджреНрдз (рд╕рд┐рдВрдХреНрд░реЛрдирд╕)ред рдХреНрд░рдо рд░рд┐рд╕реАрд╡рд░ рддрддреНрд╡ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдРрдк рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд, рдкреБрдирдГ рдкреНрд░рд╕рд╛рд░рд┐рдд рдпрд╛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк Context рдХреНрд▓рд╛рд╕ рд╕реЗ sendBroadcast(intent, receiverPermission) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк LocalBroadCastManager рд╕реЗ sendBroadcast рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдРрдк рд╕реЗ рдХрднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд░рд┐рд╕реАрд╡рд░ рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

Sticky Broadcasts

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдЙрдирдХреЗ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рдмрд╛рдж рднреА рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрдирдХрд╛ API рд╕реНрддрд░ 21 рдореЗрдВ рдирд┐рд░рд╛рдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред
рдпреЗ рдХрд┐рд╕реА рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдирд┐рдлрд╝ рдХрд░рдиреЗ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк "sticky" рд╢рдмреНрдж рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ sendStickyBroadcast рдпрд╛ sendStickyBroadcastAsUser рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рднрд╛рд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

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

рд╕реНрдХреАрдо рдХреЛ AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

[...]
<activity android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="examplescheme" />
</intent-filter>
[...]

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпреЛрдЬрдирд╛ examplescheme:// рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢реНрд░реЗрдгреА BROWSABLE рднреА рд╣реИ)

рдлрд┐рд░, рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдЖрдк рд╣реЛрд╕реНрдЯ рдФрд░ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<data android:scheme="examplescheme"
android:host="example"
/>

рд╡реЗрдм рд╕реЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреИрд╕реЗ:

<a href="examplescheme://example/something">click here</a>
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>

In order to find the code that will be executed in the App, go to the activity called by the deeplink and search the function onNewIntent.

Learn how to call deep links without using HTML pages.

AIDL - Android Interface Definition Language

The Android Interface Definition Language (AIDL) is designed for facilitating communication between client and service in Android applications through interprocess communication (IPC). Since accessing another process's memory directly is not permitted on Android, AIDL simplifies the process by marshalling objects into a format understood by the operating system, thereby easing communication across different processes.

Key Concepts

  • Bound Services: рдпреЗ рд╕реЗрд╡рд╛рдПрдБ IPC рдХреЗ рд▓рд┐рдП AIDL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рдпрд╛ рдШрдЯрдХ рдПрдХ рд╕реЗрд╡рд╛ рд╕реЗ рдмрдВрдз рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ onBind рд╡рд┐рдзрд┐ рдмрд╛рддрдЪреАрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕реЗ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

  • Binder: рд╣рд╛рд▓рд╛рдВрдХрд┐ AIDL рдХреЗ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдХрд╛рд░рдг Binder рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрдкрдпреЛрдЧ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ рдХрд┐ Binder рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореЗрдореЛрд░реА рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдХрд░реНрдиреЗрд▓-рд╕реНрддрд░реАрдп рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИред рдЖрдЧреЗ рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рд╣реИ https://www.youtube.com/watch?v=O-UHvFjxwZ8.

Components

These include: Activities, Services, Broadcast Receivers and Providers.

Launcher Activity and other activities

In Android apps, activities are like screens, showing different parts of the app's user interface. An app can have many activities, each one presenting a unique screen to the user.

The launcher activity is the main gateway to an app, launched when you tap the app's icon. It's defined in the app's manifest file with specific MAIN and LAUNCHER intents:

<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

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

рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдРрдкреНрд╕ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ "рдирд┐рд░реНрдпрд╛рддрд┐рдд" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗред рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдЕрдиреНрдп рдРрдкреНрд╕ рдХреЛ рдЗрд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:

<service android:name=".ExampleExportedService" android:exported="true"/>

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рдЕрдиреНрдп рдРрдк рд╕реЗ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЪрд┐рдВрддрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ, рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓реАрдХ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред

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

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрд╡рд░реНрдЧ

Android рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдПрдХ рдРрдк рдХреЗ рдкрд╛рд╕ Application рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдЬрдм рдРрд╕рд╛ рдЙрдкрд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдРрдк рдХреЗ рднреАрддрд░ рдкрд╣рд▓реА рдХрдХреНрд╖рд╛ рдмрди рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ attachBaseContext рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ, рддреЛ рдЗрд╕реЗ onCreate рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрдЕрдк рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╛рд░рдВрдн рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

public class MyApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// Initialization code here
}

@Override
public void onCreate() {
super.onCreate();
// More initialization code
}
}

Services

Services рдкреГрд╖реНрдарднреВрдорд┐ рдСрдкрд░реЗрдЯрд┐рд╡реНрд╕ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рддрдм рднреА рдЪрд▓рддреЗ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реЗрд╡рд╛рдПрдБ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рд╕реЗрд╡рд╛рдПрдБ рдмрд╣реБрдкрд░рдХрд╛рд░реА рд╣реИрдВ; рдЗрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Intents рдЗрдиреНрд╣реЗрдВ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм startService рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХреА onStart рд╡рд┐рдзрд┐ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рддрдм рддрдХ рдЪрд▓рддреА рд░рд╣рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ stopService рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреА рднреВрдорд┐рдХрд╛ рдПрдХ рд╕рдХреНрд░рд┐рдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП bindService рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onBind рд╡рд┐рдзрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реБрдПред

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

<service android:name=".ExampleExportedService" android:exported="true"/>

Broadcast Receivers

Broadcast receivers рдПрдХ рдореИрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕рдорд╛рди рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдРрдк рджреЛ рдкреНрд░рдореБрдЦ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдРрдк рдХреЗ Manifest рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдРрдк рдХреЗ рдХреЛрдб рдореЗрдВ registerReceiver API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реАред Manifest рдореЗрдВ, рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдХреЛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА рдкрдВрдЬреАрдХреГрдд рд░рд┐рд╕реАрд╡рд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рдордп рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреА рдХреНрд▓рд╛рд╕ рдореЗрдВ onReceive рдореЗрдердб рдХреЛ рджреЗрдЦреЗрдВред рдЗрд╕ рдореЗрдердб рдХрд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд Intent рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рд┐рд╕реАрд╡рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Ordered Broadcasts рдореЗрдВ, рдЬреЛ Intent рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

Content Provider

Content Providers рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рдРрдкреНрд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдпрд╛ рд╡реЗрдм рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдорддрд┐рдпрд╛рдБ, рдЬреИрд╕реЗ readPermission рдФрд░ writePermission, рдкрд╣реБрдБрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдРрдк рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ grantUriPermission рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдкрд╣реБрдБрдЪ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП path, pathPrefix, рдФрд░ pathPattern рдЬреИрд╕реЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреИрд╕реЗ SQL рдЗрдВрдЬреЗрдХреНрд╢рдиред Content Providers рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ: insert(), update(), delete(), рдФрд░ query(), рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

FileProvider, рдПрдХ рд╡рд┐рд╢реЗрд╖ Content Provider, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЗрд╕реЗ рдРрдк рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ android:exported рдФрд░ android:resource рджреНрд╡рд╛рд░рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред

FileProvider рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдореИрдирд┐рдлреЗрд╕реНрдЯ рдШреЛрд╖рдгрд╛:

<provider android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>

рдФрд░ filepaths.xml рдореЗрдВ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

<paths>
<files-path path="images/" name="myimages" />
</paths>

For further information check:

WebViews

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

рдПрдВрдбреНрд░реЙрдЗрдб рджреЛ рдореБрдЦреНрдп WebView рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • WebViewClient рдмреБрдирд┐рдпрд╛рджреА HTML рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди JavaScript рдЕрд▓рд░реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рдЬреЛ XSS рд╣рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • WebChromeClient рдкреВрд░реНрдг Chrome рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреБрднрд╡ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ WebView рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреБрдХреАрдЬрд╝ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдореБрдЦреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗред

рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, loadUrl, loadData, рдФрд░ loadDataWithBaseURL рдЬреИрд╕реЗ рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпреЗ URLs рдпрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ WebSettings рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, setJavaScriptEnabled(false) рдХреЗ рд╕рд╛рде JavaScript рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ XSS рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред

JavaScript "Bridge" Java рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ JavaScript рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Android 4.2 рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ @JavascriptInterface рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ (setAllowContentAccess(true)) WebViews рдХреЛ Content Providers рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЬреЛрдЦрд┐рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рд╛рдордЧреНрд░реА URLs рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ред

рдлрд╝рд╛рдЗрд▓ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

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

Other App Components and Mobile Device Management

Digital Signing of Applications

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

App Verification for Enhanced Security

  • Android 4.2 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, Verify Apps рдирд╛рдордХ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдРрдкреНрд╕ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдРрдкреНрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдРрдкреНрд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рд░реЛрдХ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рддреА рд╣реИред

Mobile Device Management (MDM)

  • MDM рд╕рдорд╛рдзрд╛рди рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рд╢рд╛рд╕рди API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрдиреНрд╣реЗрдВ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдиреАрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рд╕реНрдЯреЛрд░реЗрдЬ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░рдирд╛, рдФрд░ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рдорд┐рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╡реНрдпрд╛рдкрдХ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
// Example of enforcing a password policy with MDM
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminComponent = new ComponentName(context, AdminReceiver.class);

if (dpm.isAdminActive(adminComponent)) {
// Set minimum password length
dpm.setPasswordMinimumLength(adminComponent, 8);
}

{% hint style="success" %} рд╕реАрдЦреЗрдВ рдФрд░ AWS рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
рд╕реАрдЦреЗрдВ рдФрд░ GCP рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}