рд╕реА рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рд╛рде рдЬрд╝рдорд╛рд░рд┐рди рдХрд╛ рдХрд╛рдо

рдирд╣реАрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдореИрдВ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП Xamarin рдлрд╛рд░реНрдо рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА:

  • рдПрдВрдбреНрд░реЙрдпрдб
  • рдЖрдИрдУрдПрд╕
  • UWP
  • MacOS

рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдереА, рдЬреЛ рд╣рдорд╛рд░реЗ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХреЗ: Xamarin.Forms, рдЬрд╛рд╡рд╛, рдХреЙрд░реНрдбреЛрд╡рд╛ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб, рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреАред

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

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

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

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

рдореВрд▓ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди


  • Android - * .so рдлрд╝рд╛рдЗрд▓;
  • рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (UWP) - * .dll рдлрд╝рд╛рдЗрд▓;
  • iOS - * .a рдлрд╝рд╛рдЗрд▓ (рдПрдХ рд╕реНрдерд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореЛрдЯреА рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧреА);
  • MacOS - * .dylib рдлрд╝рд╛рдЗрд▓ (рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓)

рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рдВрднрд╡ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


рдПрдВрдбреНрд░реЙрдпрдб

  • рд╣рд╛рде
  • arm64
  • 86
  • 64

UWP

  • 86
  • 64

рдЖрдИрдУрдПрд╕

  • ARMv7
  • armv7s
  • i386
  • x86_64
  • arm64

MacOS
  • x86_64

рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

рджреЗрд╢реА рдПрд╕рдбреАрдХреЗ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ рдФрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВ


рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (UWP)


рд╣рдо рджреЛ x86 рдФрд░ x64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ * .dll рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИред

рдПрдВрдбреНрд░реЙрдпрдб


рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдореЗрдВ Xamarin C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдЭрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рд╣рд╛рде, рдЖрд░реНрдо 64, x86, x64) рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП * .so рдлрд╛рдЗрд▓реЗрдВ рджреЗрдЧрд╛ред

рдЖрдИрдУрдПрд╕


рдПрдХ iOS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА Xamarin C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдордиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ MacOS рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ macOS рдкрд░ vcremote рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдЪ рд╣реИ, рдирд╡реАрдирддрдо рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдЕрдм рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ Microsoft рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗ рдФрд░ рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗ, рд▓реЗрдХрд┐рди рдЕрдм рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╣рдореЗрдВ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред Xcode рдореЗрдВ, рд╣рдореЗрдВ iOS рдХреЗ рд▓рд┐рдП рдХреЛрдХреЛрд╕ рдЯрдЪ рд╕реНрдЯреЗрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╣рдо рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реА рдПрд╕рдбреАрдХреЗ рд╕реЗ рдЕрдкрдиреА рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЛ рдмрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИ:

  • iPhone рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП
  • iPhone рдХреЗ рд▓рд┐рдП

рддрдм рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ MacOS рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреМрди рд╕реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - "рд▓рд╛рдЗрдкреЛ"ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

lipo -info /path_to_your_a_file/lib.a 

рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 Architectures in the fat file: /path_to_your_a_file/lib.a are : armv7 armv7s i386 x86_64 arm6 

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

 lipo -create lib_iphone.a lib_iphone_simulator.a -output lib.a 

MacOS


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

 clang -fpic -shared -Wl, -all_load lib.a -o lib.dylib 

рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред рд╣рдореЗрдВ * .dylib рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ


рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЬрд╝рдорд░реАрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реА рдПрд╕рдбреАрдХреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред C # рдореЗрдВ, C рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ DllImport рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рд╣рдореЗрдВ рдореВрд▓ C рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрде рдХреЗ рд▓рд┐рдП const рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рднреА рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдереЛрдбрд╝рд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдкрдбрд╝реЗред

рддреЛ, рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдЬреЛ рд╕реА рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

 public abstract class BaseLibraryClass { public abstract int Init (IntPtr value); } 

рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдордВрдЪ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдВрдбреНрд░реЙрдпрдб


 internal class BaseLibraryClassDroid : BaseLibraryClass { private const string Path = "lib"; [DllImport (Path, EntryPoint = "Init", CallingConvention = CallingConvention.Cdecl)] private static extern int InitExtern (IntPtr value); public override int Init (IntPtr value) => InitExtern (value); } 

рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (UWP)


 internal class BaseLibraryClassx64 : BaseLibraryClass { private const string Path = "lib/x64/lib"; [DllImport (Path, EntryPoint = "Init", CallingConvention = CallingConvention.Cdecl)] private static extern int InitExtern (IntPtr value); public override int Init (IntPtr value) => InitExtern (value); } 

 internal class BaseLibraryClassx86 : BaseLibraryClass { private const string Path = "lib/x86/lib"; [DllImport (Path, EntryPoint = "Init", CallingConvention = CallingConvention.Cdecl)] private static extern int InitExtern (IntPtr value); public override int Init (IntPtr value) => InitExtern (value); } 

рдЖрдИрдУрдПрд╕


 internal class BaseLibraryClassIOS : BaseLibraryClass { private const string Path = "__Internal"; [DllImport (Path, EntryPoint = "Init", CallingConvention = CallingConvention.Cdecl)] private static extern int InitExtern (IntPtr value); public override int Init (IntPtr value) => InitExtern (value); } 

MacOS


 public class BaseLibraryClassMac : BaseLibraryClass { private const string Path = "lib"; [DllImport (Path, EntryPoint = "Init", CallingConvention = CallingConvention.Cdecl)] private static extern int InitExtern (IntPtr value); public override int Init (IntPtr value) => InitExtern (value); } 

рдЕрдм рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо / рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 public enum PlatformArchitecture { Undefined, X86, X64, Droid, Ios, Mac } 

рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛:

 public class SdkCoreFactory { public static BaseLibraryClass GetCoreSdkImp () { switch (Init.PlatformArchitecture) { case PlatformArchitecture.Undefined: throw new BaseLibraryClassInitializationException (); case PlatformArchitecture.X86: return new BaseLibraryClassx86 (); case PlatformArchitecture.X64: return new BaseLibraryClassx64 (); case PlatformArchitecture.Droid: return new BaseLibraryClassDroid (); case PlatformArchitecture.Ios: return new BaseLibraryClassIOS (); case PlatformArchitecture.Mac: return new BaseLibraryClassMac (); default: throw new BaseLibraryClassInitializationException (); } } } 

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

 public static class Init { public static PlatformArchitecture PlatformArchitecture { get; set; } } 

рдЙрддреНрдкрдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛


рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (UWP)


рд╣рдо рдЙрддреНрдкрдиреНрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ:

  • lib / x86 / lib.dll
  • lib / x64 / lib.dll

рдФрд░ рдЬрдм рд╣рдо рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЕрдкрдирд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 Wrapper.Init.PlatformArchitecture = Wrapper.Enums.PlatformArchitecture.X64; 

рдПрдВрдбреНрд░реЙрдпрдб


рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ * .csproj рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ * .so рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рд╣рдо рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо * .csproj рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╛рдЗрд▓ рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЗрдВ рднреА рдпрд╛рдж рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП:

  • armeabi - рдмрд╛рдВрд╣ * .so рдлрд╝рд╛рдЗрд▓
  • armeabi-v7a - рднреБрдЬрд╛ * .so рдлрд╝рд╛рдЗрд▓
  • arm64-v8a - arm64 * .so рдлрд╝рд╛рдЗрд▓
  • x86 - x86 * .so рдлрд╝рд╛рдЗрд▓
  • x64 - x64 * .so рдлрд╝рд╛рдЗрд▓

* .Csproj рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди:

 <ItemGroup> <AndroidNativeLibrary Include="lib\armeabi\lib.so"> <Abi>armeabi</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> <AndroidNativeLibrary Include="lib\armeabi-v7a\lib.so"> <Abi>armeabi-v7a</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> <AndroidNativeLibrary Include="lib\arm64-v8a\lib.so"> <Abi>arm64-v8a</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> <AndroidNativeLibrary Include="lib\x86\lib.so"> <Abi>x86</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> <AndroidNativeLibrary Include="lib\x86_64\lib.so"> <Abi>x86_64</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> </ItemGroup> 

рдФрд░ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 Wrapper.Init.PlatformArchitecture = Wrapper.Enums.PlatformArchitecture.Droid; 

рдЖрдИрдУрдПрд╕


рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЙрддреНрдкрдиреНрди * .A рд╡рд╕рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (iOS рдЧреБрдг => iOS рдмрд┐рд▓реНрдб => рдЕрддрд┐рд░рд┐рдХреНрдд mtouch рддрд░реНрдХ)ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 -gcc_flags "-L${ProjectDir} -llib -force_load ${ProjectDir}/lib.a" 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд┐рд▓реНрдб рдПрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдХреНрдпреЛрдВрдХрд┐ * .a рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдХреЛрдИ рднреА рдирд╣реАрдВред

рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 Wrapper.Init.PlatformArchitecture = Wrapper.Enums.PlatformArchitecture.Ios; 

MacOS


рдореВрд▓ рд╕рдВрджрд░реНрдн рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА * .dylib рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд▓рд┐рдЦреЗрдВ:

 Wrapper.Init.PlatformArchitecture = Wrapper.Enums.PlatformArchitecture.Mac; 

рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдиреЗ рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдореВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдард╛рдпрд╛ рдФрд░ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ KFOR рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

Source: https://habr.com/ru/post/hi435210/


All Articles