рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЧрдИ рдереАред рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдЕрдореЗрд░рд┐рдХреА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореБрдЦреНрдп рддрдХрдиреАрдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдХрд╛рд░рдХ рдЬрд┐рд╕рдиреЗ рдЕрд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореЗрд░реА рднрд╛рдЧреАрджрд╛рд░реА рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╡рд╣ C ++ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдирдпрд╛ рдЕрдиреБрднрд╡ рдФрд░ рдПрдХ рдирдпрд╛ рдкреЗрд╢реЗрд╡рд░ рдкрд░реАрдХреНрд╖рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди FIDO UAF рдФрд░ U2F рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╛рдпреЛрдореЗрдЯреНрд░рд┐рдХ рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рдлреЗрд╕ рдЖрдИрдбреА рдФрд░ рдЯрдЪ рдЖрдИрдбреА рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдерд╛ред рдпрд╣ C ++ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдереА рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдкрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕реЗ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛?
C ++ рдХреЛ Facebook рдХреЗ React Native рдРрдк рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ
рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЬрд┐рдиреА рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдЬреЛ рдЖрдкрдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╕рд░рд▓ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЛрдмрд╛рдЗрд▓ рдРрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬрд┐рдиреА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрдиреЗрдХреНрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рджреЛ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░
рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд┐рдиреАрдиреА рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдЧреЗ рдХреЗ рдХрджрдо
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ C ++ рдФрд░ React Native рдХреЛрдб рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Djinni рдореЗрдВ, .id рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА-рд╕рдорд░реНрдерди / рдЖрдИрдбреАрдПрд▓ / рдореБрдЦреНрдп.рдбрд┐рдЬрд╛рдЗрди рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред
рд╣рдорд╛рд░реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрд░рд┐рдпрд░, рдореИрдк, рдкреНрд░реЙрдорд┐рд╕ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
DemoModule = interface +r { const EVENT_NAME: string = "DEMO_MODULE_EVENT"; const STRING_CONSTANT: string = "STRING"; const INT_CONSTANT: i32 = 13; const DOUBLE_CONSTANT: f64 = 13.123; const BOOL_CONSTANT: bool = false; testPromise(promise: JavascriptPromise); testCallback(callback: JavascriptCallback); testMap(map: JavascriptMap, promise: JavascriptPromise); testArray(array: JavascriptArray, callback: JavascriptCallback); testBool(value: bool, promise: JavascriptPromise); testPrimitives(i: i32, d: f64, callback: JavascriptCallback); testString(value: string, promise: JavascriptPromise); testEventWithArray(value: JavascriptArray); testEventWithMap(value: JavascriptMap); }
рдЗрдВрдЯрд░рдлреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ / рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА / рд╕реА ++ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА-рд╕рдорд░реНрдерди / рдЖрдИрдбреАрдПрд▓ / рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ
рдЬреЗрдирд░реЗрдЯ_рд╡реИрдкрд░реНрд╕.рд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдорд╛рд░реА рдЖрдИрдбреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рднреА рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдПрдЧреА, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рд╕реА ++ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрд┐ рджреЗрддреА рд╣реИрдВред рдкрд╣рд▓реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рд╕рд░рд▓ C ++ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рд╕реАрдкреАрдкреА / рдбреЗрдореЛрдПрдореЛрдбреНрдпреВрд▓рдЗрдореНрдкреНрд▓.рдПрдЪрдкреА
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рд╕реАрдкреАрдкреА / рдбреЗрдореЛрдореЙрдбреНрдпреВрд▓рдЗрдореНрдкреНрд▓.рдХреИрдкрдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
void DemoModuleImpl::testString(const std::string &value, const std::shared_ptr<::JavascriptPromise> &promise) { promise->resolveObject(JavascriptObject::fromString("Success!")); }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо
рдХреАрд╡рд░реНрдб рд╡рд╛рдкрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдкреНрд░реЛрдорд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬреИрд╕рд╛ рдХрд┐
рдЖрдЗрдбрд┐рдпрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ C ++ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдРрдк рдореЗрдВ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░реЗрдВ? рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП,
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА / index.js рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдЬрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
import { NativeAppEventEmitter, NativeModules... } from 'react-native'; const DemoModule = NativeModules.DemoModule; .... async promiseTest() { this.appendLine("testPromise: " + await DemoModule.testPromise()); this.appendLine("testMap: " + JSON.stringify(await DemoModule.testMap({a: DemoModule.INT_CONSTANT, b: 2}))); this.appendLine("testBool: " + await DemoModule.testBool(DemoModule.BOOL_CONSTANT));
рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди C ++ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдХрд┐ Android рдФрд░ iOS рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ C ++ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдПрдВрдбреНрд░реЙрдпрдб рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдФрд░ рд╕реА ++
Android рдФрд░ C ++ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ NDK рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢
рдбреЗрд╡рд▓рдкрд░. android.com/ndk/guides рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ
рдлрд┐рд░,
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рдПрдВрдбреНрд░реЙрдЗрдб / рдРрдк / рдмрд┐рд▓реНрдб.рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░, рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
android { ... defaultConfig { ... ndk { abiFilters "armeabi-v7a", "x86" } externalNativeBuild { cmake { cppFlags "-std=c++14 -frtti -fexceptions" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static" } } } externalNativeBuild { cmake { path "CMakeLists.txt" } } sourceSets { main { java.srcDirs 'src/main/java', '../../../react-native-cpp-support/support-lib/java' } } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false
рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕реАрдореЗрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмрд┐рд▓реНрдб рдлреНрд▓реИрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ,
CMAkeLists рдлрд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрд┐рдиреА рд╕реЗ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
Android рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг
CMakeLists.txt рдХрд╛ рд╡рд░реНрдгрди
рдХрд░рдирд╛ рд╣реИ ред рд╕рдорд╛рдкреНрдд рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдкрде
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА / рдПрдВрдбреНрд░реЙрдЗрдб / рдРрдк / CMakeLists.txt рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
cmake_minimum_required(VERSION 3.4.1) set( PROJECT_ROOT "${CMAKE_SOURCE_DIR}/../.." ) set( SUPPORT_LIB_ROOT "${PROJECT_ROOT}/../react-native-cpp-support/support-lib" ) file( GLOB JNI_CODE "src/main/cpp/*.cpp" "src/main/cpp/gen/*.cpp" ) file( GLOB PROJECT_CODE "${PROJECT_ROOT}/cpp/*.cpp" "${PROJECT_ROOT}/cpp/gen/*.cpp" ) file( GLOB PROJECT_HEADERS "${PROJECT_ROOT}/cpp/*.hpp" "${PROJECT_ROOT}/cpp/gen/*.hpp" ) file( GLOB DJINNI_CODE "${SUPPORT_LIB_ROOT}/cpp/*.cpp" "${SUPPORT_LIB_ROOT}/jni/*.cpp" ) file( GLOB DJINNI_HEADERS "${SUPPORT_LIB_ROOT}/cpp/*.hpp" "${SUPPORT_LIB_ROOT}/jni/*.hpp" ) include_directories( "${SUPPORT_LIB_ROOT}/cpp" "${SUPPORT_LIB_ROOT}/jni" "${PROJECT_ROOT}/cpp" "${PROJECT_ROOT}/cpp/gen" ) add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED ${JNI_CODE} ${DJINNI_CODE} ${DJINNI_HEADERS} ${PROJECT_CODE} ${PROJECT_HEADERS} )
рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕рдорд░реНрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рдЖрд╡рд╢реНрдпрдХ C ++ рдФрд░ JNI рдХреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ред
рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ
DjinniModulesPackage рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рдПрдВрдбреНрд░реЙрдЗрдб / рдРрдк / src / main / java / com / rncpp / jni / DjinniModulesPackage.java рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
... import com.rncpp.jni.DjinniModulesPackage; ... public class MainApplication extends Application implements ReactApplication { ... @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new DjinniModulesPackage() ); } ... }
рдЕрдВрддрд┐рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг
DjinniModulesPackage рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдордиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣
рдкрде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рдПрдВрдбреНрд░реЙрдЗрдб / рдРрдк / src / main / java / com / rncpp / jni / DjinniModulesPackage.java рдкрд░ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
package com.rncpp.jni; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class DjinniModulesPackage implements ReactPackage { static { System.loadLibrary("native-lib"); } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new DemoModule(reactContext)); return modules; } }
рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдЧ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд░реБрдЪрд┐ рд▓рд╛рдЗрди
System.loadLibrary ("рджреЗрд╢реА-рд▓рд┐рдмрд╛рд╕") рд╣реИ; рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдкрдиреЗ рдореВрд▓ рдХреЛрдб рдФрд░ рдЬрд┐рдиреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ
рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ jni рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jni рдЖрд╡рд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ idl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдирддреАрдЬрддрди, рдЕрдЧрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рджреЛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
npm рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm рд░рди Androidрд╣реБрд░реНрд░реЗ! рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!
рдФрд░ рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдПрдореБрд▓реЗрдЯрд░ (рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдХреА рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ C ++ рдХреЗ рд╕рд╛рде iOS рдФрд░ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
IOS рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдФрд░ C ++
Xcode рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдорд░реНрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рд╕реА ++ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА-рд╕рдорд░реНрдерди / рд╕рдорд░реНрдерди-рджреЗрдпрддрд╛ / objc / рдФрд░
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА-рд╕рдорд░реНрдерди / рд╕рдорд░реНрдерди- lib / рд╕реАрдкреАрдкреА / рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ
Xcode рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рд╕рдорд░реНрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдЯреНрд░реА (рдЪрд┐рддреНрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ) рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:


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

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

(рддрд╕реНрд╡реАрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ)
рдЕрдВрддрд┐рдо рдХрджрдо AppDelegate.m рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЬрд┐рдиреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
... #import "RCDjinniModulesInitializer.h" ... @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... id<RCTBridgeDelegate> moduleInitialiser = [[RCDjinniModulesInitializer alloc] initWithURL:jsCodeLocation]; RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:moduleInitialiser launchOptions:nil]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"rncpp" initialProperties: nil]; ... }
рдЕрдм iOS рдкрд░ рд╣рдорд╛рд░рд╛ рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред (рддрд╕реНрд╡реАрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ)

рдЖрд╡реЗрджрди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!
рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝рдирд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓реЛрдХрдкреНрд░рд┐рдп рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗред
рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВред
CMSSLists.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ OpenSSL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
.... SET(OPENSSL_ROOT_DIR /Users/andreysaleba/projects/OpenSSL-for-Android-Prebuilt/openssl-1.0.2) SET(OPENSSL_LIBRARIES_DIR "${OPENSSL_ROOT_DIR}/${ANDROID_ABI}/lib") SET(OPENSSL_INCLUDE_DIR ${OPENSSL_ROOT_DIR}/include) SET(OPENSSL_LIBRARIES "ssl" "crypto") ... LINK_DIRECTORIES(${OPENSSL_LIBRARIES_DIR} ${ZLIB_LIBRARIES_DIR}) include_directories( "${SUPPORT_LIB_ROOT}/cpp" "${SUPPORT_LIB_ROOT}/jni" "${PROJECT_ROOT}/cpp" "${PROJECT_ROOT}/cpp/gen" "${OPENSSL_INCLUDE_DIR}" ) add_library(libssl STATIC IMPORTED) add_library(libcrypto STATIC IMPORTED) ... set_target_properties( libssl PROPERTIES IMPORTED_LOCATION ${OPENSSL_LIBRARIES_DIR}/libssl.a ) set_target_properties( libcrypto PROPERTIES IMPORTED_LOCATION ${OPENSSL_LIBRARIES_DIR}/libcrypto.a ) target_link_libraries(native-lib PRIVATE libssl libcrypto)
рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рд╕реА ++ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА / рд╕реАрдкреАрдкреА / рдбреЗрдореЛрдореЙрдбреБрд▓реЗрдЗрдореНрдкреНрд▓.рд╣рдкреНрдк рдЬреЛрдбрд╝реЗрдВ:
void getOpenSSLVersion(const std::shared_ptr<::JavascriptPromise> & promise) override;
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╕реАрдкреАрдкреА / рд╕реАрдкреАрдкреА / рдбреЗрдореЛрдореЙрдбреНрдпреВрд▓рдЗрдореНрдкреНрд▓.рдХреИрдк рдЬреЛрдбрд╝реЗрдВ:
#include <openssl/crypto.h> ... void DemoModuleImpl::getOpenSSLVersion(const std::shared_ptr<::JavascriptPromise> &promise) { promise->resolveString(SSLeay_version(1)); }
рдпрд╣ idl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ
`рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рд╕реАрдкреАрдкреА-рд╕рдорд░реНрдерди / рдЖрдИрдбреАрдПрд▓ / main.djinha` :
getOpenSSLVersion(promise: JavascriptPromise);
рд╣рдо
рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ
'`generate_wrappers.sh` рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдХреЛ` рд░рд┐рдПрдХреНрдЯ-рджреЗрд╢реА-рд╕реАрдкреАрдкреА-рд╕рдкреЛрд░реНрдЯ / рдЖрдИрдбреАрдПрд▓ / `рдХрд╣рддреЗ рд╣реИрдВ ред
рдлрд┐рд░, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдирдП рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
async promiseTest() { ... this.appendLine("openSSL version: " + await DemoModule.getOpenSSLVersion()); }
рд╕рдм рдХреБрдЫ Android рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдЖрдИрдУрдПрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд╣рдо iOS рдХреЗ рд▓рд┐рдП рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЗрдХрдЯреНрдареЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВред
Xcode рдореЗрдВ iOS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрд┐рд▓реНрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм рдореЗрдВ рдЕрдиреНрдп C Flags рдлрд╝реАрд▓реНрдб рдореЗрдВ Opensl рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкрде рдЬреЛрдбрд╝реЗрдВ (рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкрде рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рд╣реИ):
-рдореИрдВ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / andreysaleba / рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ / prebuilt- рдЦреБрд▓рддрд╛ рд╣реИ / рдЬрд┐рд▓рд╛ / рдЦреБрд▓рддрд╛ рд╣реИ-1.0.2d-ios / рд╢рд╛рдорд┐рд▓рдЕрдиреНрдп рд▓рд┐рдВрдХрд░ рдлреНрд▓реИрдЧреНрд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
-L/Users/andreysaleba/projects/prebuilt-openssl/dist/openssl-1.0.2d-ios/lib -lcrypto -lssl
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред OpenSSL рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!