Android NDK рдХрд╛ рдкрд░рд┐рдЪрдп

рдПрдВрдбреНрд░реЙрдЗрдб рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Google рджреЛ рд╡рд┐рдХрд╛рд╕ рдкреИрдХреЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдПрд╕рдбреАрдХреЗ рдФрд░ рдПрдирдбреАрдХреЗред рдПрд╕рдбреАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХрдИ рд▓реЗрдЦ, рдХрд┐рддрд╛рдмреЗрдВ, рд╕рд╛рде рд╣реА Google рдХреЗ рдЕрдЪреНрдЫреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Google рдЦреБрдж рднреА NDK рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЦрдбрд╝реА рдХрд┐рддрд╛рдмреЛрдВ рд╕реЗ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ, Cinar O. - Pro Android C ++ рдХреЛ NDK - 2012 рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓ рдХрд░реВрдБрдЧрд╛ред

рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИ рдЬреЛ Android NDK рдХреЗ рд╕рд╛рде рдЕрднреА рддрдХ рдкрд░рд┐рдЪрд┐рдд (рдпрд╛ рдХрдо рдкрд░рд┐рдЪрд┐рдд) рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдордЬрдмреВрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореИрдВ рдЬреЗрдПрдирдЖрдИ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрдд рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЬрд┐рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рда рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╡реАрдбрд┐рдпреЛ рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

Android NDK рдХреНрдпрд╛ рд╣реИ?


Android NDK (рдиреЗрдЯрд┐рд╡ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ) рдЯреВрд▓реНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ C / C ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

NDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


Google рдХреЗрд╡рд▓ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ NDK рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдпреЗ рдорд╛рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ:


рдЬреЗрдПрдирдЖрдИ рдХреНрдпрд╛ рд╣реИ


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

рдЬреЗрдПрдирдЖрдИ рдХреЗ рдлрд╛рдпрджреЗ


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

рдмрд╛рдЗрдирд░реА рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдпрд╛ рдмрд╛рдЗрдирд░реА рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЙрд╕рдХреА рдПрдХреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдЬреЗрдПрдирдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



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

jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (JNIEnv *env, jobject obj, jint i, jstring s) { const char *str = (*env)->GetStringUTFChars(env, s, 0); (*env)->ReleaseStringUTFChars(env, s, str); return 10; } 


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

рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдВрдХ


рдЬреЗрдПрдирдЖрдИ рд▓рд┐рдВрдХ рдХреЛ рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ: рд╕реНрдерд╛рдиреАрдп, рд╡реИрд╢реНрд╡рд┐рдХ рдФрд░ рдХрдордЬреЛрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдВрдХред рд╡рд┐рдзрд┐ рдкреВрд░реА рд╣реЛрдиреЗ рддрдХ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧ рдорд╛рдиреНрдп рд╣реЛрддреЗ рд╣реИрдВред JNI рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдиреАрдп рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реАрдПрдо рд╕реНрд╡рдпрдВ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рд▓рд┐рдВрдХ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ рдЙрд╕реА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдмрдирд╛рдП рдЧрдП рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ DeleteLocalRef рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ JNI рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд░рдВрдд рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 jclass clazz; clazz = (*env)->FindClass(env, "java/lang/String"); //  (*env)->DeleteLocalRef(env, clazz); 

рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдВрдХ рддрдм рддрдХ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдВрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреНрдпреВрдЧреНрд▓реЛрдмрд▓ рд░реАрдл рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдВрдХ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ DeleteGlobalRef рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 jclass localClazz; jclass globalClazz; localClazz = (*env)->FindClass(env, "java/lang/String"); globalClazz = (*env)->NewGlobalRef(env, localClazz); //  (*env)->DeleteLocalRef(env, localClazz); 

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


JNI NullPointerException, IllegalArgumentException рдЬреИрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░рдг:


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

 jthrowable ExceptionOccurred(JNIEnv *env); 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ JNI рд╕рд░рдгреА рдПрдХреНрд╕реЗрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди ArrayIndexOutOfBoundsException рдпрд╛ ArrayStoreException рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрджрд┐рдо рдЬреЗрдПрдирдЖрдИ рдкреНрд░рдХрд╛рд░


рдЬреЗрдПрдирдЖрдИ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрджрд┐рдо рдФрд░ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред
рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░рджреЗрд╢реА рдкреНрд░рдХрд╛рд░рд╡рд┐рд╡рд░рдг
рдмреВрд▓рд┐рдпрдиjbooleanрдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 8 рдмрд┐рдЯреНрд╕
рдмрд╛рдЗрдЯjbyte8 рдмрд┐рдЯреНрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП
рдЪрд╛рд░jcharрдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 16 рдмрд┐рдЯреНрд╕
рдХрдоjshort16 рдмрд┐рдЯреНрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП
рдкреВрд░реНрдгрд╛рдВрдХjint32 рдмрд┐рдЯреНрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП
рд▓рдВрдмреЗ рд╕рдордп рддрдХjlong64 рдмрд┐рдЯреНрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП
рдирд╛рд╡jfloat32 рдмрд┐рдЯреНрд╕
рджреЛрд╣рд░рд╛jdouble64 рдмрд┐рдЯреНрд╕
рд╢реВрдиреНрдпрд╢реВрдиреНрдпрдПрди / рдП

рдЬреЗрдПрдирдЖрдИ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░




рд╕рдВрд╢реЛрдзрд┐рдд UTF-8


JNI рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛, рдмрджрд▓реЗ рдореЗрдВ, рдпреВрдЯреАрдПрдл -16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред UTF-8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ C рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 0x0 рдкрд░ рд╕рд╛рдорд╛рдиреНрдп 0x00 рдХреЗ рдмрдЬрд╛рдп 'u0000' рдХреЛ рдПрдирдХреЛрдб рдХрд░рддрд╛ рд╣реИред рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЧреИрд░-рд╢реВрдиреНрдп ASCII рд╡рд░реНрдгреЛрдВ рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЬреЗрдПрдирдЖрдИ рдХреЗ рдХрд╛рд░реНрдп


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

JNI рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЙрджрд╛рд╣рд░рдг


рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реАрдЦреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:
 #include <jni.h> //... JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption* options = new JavaVMOption[1]; options[0].optionString = "-Djava.class.path=/usr/lib/java"; vm_args.version = JNI_VERSION_1_6; vm_args.nOptions = 1; vm_args.options = options; vm_args.ignoreUnrecognized = false; JNI_CreateJavaVM(&jvm, &env, &vm_args); delete options; jclass cls = env->FindClass("Main"); jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V"); env->CallStaticVoidMethod(cls, mid, 100); jvm->DestroyJavaVM(); 

рдЪрд▓реЛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:

JNI_CreateJavaVM () рд╡рд┐рдзрд┐ JavaVM рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддреА рд╣реИред JNI_DestroyJavaVM () рдкрджреНрдзрддрд┐ рдирд┐рд░реНрдорд┐рдд JavaVM рдХреЛ рдЙрддрд╛рд░рддреА рд╣реИред

рдзрд╛рд░рд╛рдУрдВ


рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреЛ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ JavaVM рдлрд╝рдВрдХреНрд╢рдВрд╕ AttachCurrentThread рдФрд░ AttachCurrentThreadAsDaemon рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдзрд╛рд░рд╛ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ JNIEnv рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдПрдВрдбреНрд░реЙрдЗрдб рдереНрд░реЗрдбреНрд╕ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЬреЗрдПрдирдЖрдИ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдереЗ, рднрд▓реЗ рд╣реА рдЬреАрд╕реА рдЖрдЧ рд╣реЛ ред рд▓реЗрдХрд┐рди рдзрд╛рдЧрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, JavaVM рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ DetachCurrentThread рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкрд╣рд▓рд╛ рдХрджрдо


рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд┐рддреНрд░ 3 рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╕рднреА рдореВрд▓ рдХреЛрдб рдЬреЗрдиреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП libs рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЪрд╛рд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рдореВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЭреВрда рд╣реЛрдЧреА (рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрдпрдирд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ)ред

рдореВрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд Android рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

Android.mk


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рджреЗрд╢реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред Android.mk рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддрд░рд╣ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓рд┐рдмрд╛рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ), рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА), рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╝рд╛рдЗрд▓ред

рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрджрд╛рд╣рд░рдг:
 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := NDKBegining LOCAL_SRC_FILES := ndkBegining.c include $(BUILD_SHARED_LIBRARY) 

рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдЖрдк Android.mk рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: LOCAL_, PRIVATE_, NDK_, APP_, my-dirред Google рдЖрдкрдХреЗ рдЪрд░ рдЬреИрд╕реЗ MY_ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 MY_SOURCE := NDKBegining.c     : $(MY_SOURCE) ,    , : LOCAL_SRC_FILES += $(MY_SOURCE) 

Application.mk


рдпрд╣ рдореЗрдХрдлрд╛рдЗрд▓ рдХрдИ рдЪрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ:

NDK-рдмрдирд╛рддрд╛


рдПрдирдбреАрдХреЗ-рдмрд┐рд▓реНрдб рдЬреАрдПрдирдпреВ рдореЗрдХ рд░реИрдкрд░ рд╣реИред 4 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, ndk-build рдХреЗ рдЭрдВрдбреЗ рдкреЗрд╢ рдХрд┐рдП рдЧрдП:

NDK рдХреЗ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ NDK_DEBUG рдЬреИрд╕реЗ рдЭрдВрдбреЗ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдпрд╣ 1 рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдПрдХ рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЭрдВрдбрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп = "рд╕рддреНрдп" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪреЗрдХ рджреНрд╡рд╛рд░рд╛ ndk-build AndroidManifest.xml рдореЗрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрд╕реНрдХрд░рдг 8 рд╕реЗ рдКрдкрд░ ndk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Google Android рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: AndroidManifest.xml рдореЗрдВ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдЪреАрдВрдЯреА рдбреАрдмрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ ADT рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ KK_DEBUG = 1) ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ 64-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ NDK_HOST_32BIT = 1 рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдХреЗ 32 рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, Google рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 64-рдмрд┐рдЯ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред

рдХреИрд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?


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

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

рдЬрд╛рд╡рд╛ рдХреЛрдб рд╕реЗ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛


рдЬрд╛рд╡рд╛ рд╕реЗ рдореВрд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдореЗрдВ рдореВрд▓ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 native String nativeGetStringFromFile(String path) throws IOException; native void nativeWriteByteArrayToFile(String path, byte[] b) throws IOException; 

рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрдж "рдореВрд▓" рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣, рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрдирдЖрдИ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИред рд╣рдореЗрдВ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ C / C ++ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Google рдиреЗ рдореВрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд╛рдо рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреА рд╣реЛрдЧреАред рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рд╡рд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ jdk рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рдирдХ рдЧреНрд░рд╣рдг рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдЖрдк рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рди / рдХрдХреНрд╖рд╛рдУрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрдкрдХреА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреАред

рдЕрдЧрд▓рд╛, рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдореВрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА jni рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдЯреВрд▓реНрд╕ - рдРрдб рдиреЗрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдпрд╣ рд╣рдореЗрдВ jni.h рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдлрд┐рд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХрднреА-рдХрднреА рдПрдХреНрд▓рд┐рдкреНрд╕ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ) рдФрд░ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╢рд░реАрд░реЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред

рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛, рддрд╛рдХрд┐ рдЗрд╕реЗ рди рдЦреАрдВрдЪреВрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕реЗ рдЖрдк github рд╕реЗ рджреЗрдЦ / рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles