{"id":77455,"date":"2024-09-21T06:09:57","date_gmt":"2024-09-21T02:39:57","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/"},"modified":"2024-09-21T06:09:57","modified_gmt":"2024-09-21T02:39:57","slug":"adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/","title":{"rendered":"\u0627\u0641\u0632\u0648\u062f\u0646 NDK \u0628\u0647 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0648\u062c\u0648\u062f \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 C++ \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang <\/p>\n<p>  \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<p>\u0647\u062f\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af\u061f<br \/>\nNDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<br \/>\n  Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\nJNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<br \/>\n\u06a9\u062f ++C<br \/>\nJNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<br \/>\n\u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f<\/p>\n<p>  \u0645\u0646\u0627\u0628\u0639<\/p>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u062f\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 Google Play<\/p>\n<p>  \u06a9\u062f GitHub \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646<\/p>\n<p>  \u0647\u062f\u0641 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af <\/p>\n<p>\u0647\u062f\u0641 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0627\u0632 \u06a9\u062f ++C \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u062f\u0631 Logcat Android Studio \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>  NDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f <\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a<br \/>\n\u0627\u0648\u0644\u06cc\u0646 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 Android Native Development Kit (NDK) \u0648 CMake (\u0627\u0628\u0632\u0627\u0631 \u0633\u0627\u062e\u062a \u062e\u0627\u0631\u062c\u06cc \u06a9\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 Gradle \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f) \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645.<br \/>\n\u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0633\u062e\u0647 \u062f\u0642\u06cc\u0642\u200c\u062a\u0631\u06cc \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0628\u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u0627\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u0631\u0648\u06cc\u0645\u060c<br \/>\n Tools &gt; SDK Manager &gt; SDK Tools tab &gt; Select the NDK (Side by side) and CMake checkboxes &gt; select ok<\/p>\n<p>  Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f <\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a<br \/>\n\u062d\u0627\u0644 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u06a9\u062f ++C \u062e\u0648\u062f \u0628\u0627 Gradle \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0628\u0647 Gradle \u0628\u06af\u0648\u06cc\u06cc\u0645 \u06a9\u0647 \u0641\u0627\u06cc\u0644 \u0633\u0627\u062e\u062a CMake \u0645\u0627 \u06a9\u062c\u0627\u0633\u062a. \u0633\u067e\u0633 Gradle \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f \u0648 \u06a9\u062f ++C \u0645\u0627 \u0631\u0627 \u0628\u0633\u0627\u0632\u062f<br \/>\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 Gradle \u062f\u0631 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 build.gradle \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639 \u062f\u0647\u06cc\u0645:<\/p>\n<p>android {<br \/>\n  &#8230;<br \/>\n  defaultConfig {&#8230;}<br \/>\n  buildTypes {&#8230;}<\/p>\n<p>  \/\/ Encapsulates your external native build configurations.<br \/>\n  externalNativeBuild {<\/p>\n<p>    \/\/ Encapsulates your CMake build configurations.<br \/>\n    cmake {<\/p>\n<p>      \/\/ Provides a relative path to your CMake build script.<br \/>\n      path &#8216;src\/main\/cpp\/CMakeLists.txt&#8217;<br \/>\n    }<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0631\u0627 externalNativeBuild \u0628\u062e\u0634 \u0628\u062e\u0634 \u0645\u0647\u0645\u06cc \u0627\u0633\u062a \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u06cc\u0644\u062f Gradle \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u062e\u0637\u0627\u06cc \u0645\u0628\u0646\u06cc \u0628\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0627\u06cc\u0644: src\/main\/cpp\/CMakeLists.txt \u067e\u06cc\u062f\u0627 \u0646\u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u062e\u0637\u0627\u06cc \u062e\u0648\u0628\u06cc \u0627\u0633\u062a\u060c \u0645\u0627 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u062f\u0631\u0633\u062a\u06cc \u0647\u0633\u062a\u06cc\u0645<\/p>\n<p>  \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <\/p>\n<p># Sets the minimum version of CMake required to build your native library.<br \/>\n# This ensures that a certain set of CMake features is available to<br \/>\n# your build.<\/p>\n<p>cmake_minimum_required(VERSION 3.4.1)<\/p>\n<p># Specifies a library name, specifies whether the library is STATIC or<br \/>\n# SHARED, and provides relative paths to the source code. You can<br \/>\n# define multiple libraries by adding multiple add_library() commands,<br \/>\n# and CMake builds them for you. When you build your app, Gradle<br \/>\n# automatically packages shared libraries with your APK.<\/p>\n<p>#Add a library to the project using the specified source files.<br \/>\nadd_library(gl_code SHARED<br \/>\n        gl_code.cpp)<\/p>\n<p># add lib dependencies<br \/>\ntarget_link_libraries(gl_code<br \/>\n        android<br \/>\n        log<br \/>\n        EGL<br \/>\n        GLESv2)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u062e\u0634 \u0645\u0647\u0645 \u0627\u06cc\u0646 \u06a9\u062f \u0639\u0628\u0627\u0631\u062a \u0627\u0633\u062a \u0627\u0632 add_library(gl_code SHARED gl_code.cpp). \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u0645:<br \/>\nadd_library(): \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: Adding a library to the project using the specified source files. \u06a9\u0647 \u0627\u0633\u0627\u0633\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u0645\u06a9\u0627\u0646\u06cc \u0628\u0631\u0627\u06cc \u06a9\u062f ++C \u062e\u0648\u062f \u0647\u0633\u062a\u06cc\u0645<br \/>\ngl_code: \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u062c\u0647\u0627\u0646\u06cc \u0628\u0627\u0634\u062f \u0648 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0628\u0647 \u06a9\u062f ++C \u062e\u0648\u062f \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0631\u0627\u062c\u0639\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0646\u0627\u0645 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0633\u0627\u0632\u06cc\u062f \u062a\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0627\u0631 \u06a9\u0646\u062f<br \/>\nSHARED: \u0641\u0642\u0637 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u067e\u0648\u06cc\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062a\u0648\u0633\u0637 \u0633\u0627\u06cc\u0631 \u0627\u0647\u062f\u0627\u0641 \u0645\u0631\u062a\u0628\u0637 \u0634\u0648\u062f \u0648 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u0648\u062f.<br \/>\ngl_code.cpp: \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0645\u0646\u0628\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f (\u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u06a9\u062f C++ \u0645\u0627 \u0631\u0627 \u062f\u0631 \u062e\u0648\u062f \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f). <\/p>\n<p>  JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.) <\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a<br \/>\n\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: It defines a way for the bytecode that Android compiles from managed code (written in the Java or Kotlin programming languages) to interact with native code (written in C\/C++). JNI is vendor-neutral, has support for loading code from dynamic shared libraries, and while cumbersome at times is reasonably efficient.<\/p>\n<p>\u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0635\u062d\u0628\u062a \u0647\u0627\u06cc \u0646\u0627\u062f\u0631 \u0627\u0633\u062a: \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 Kotlin\/Java \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0645\u0630\u06a9\u0648\u0631 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u062f\u0647\u0627\u06cc ++C \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<br \/>\n\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645:<\/p>\n<p>class NativeLoading {<\/p>\n<p>    init {<br \/>\n        System.loadLibrary(&#8220;gl_code&#8221;);<br \/>\n    }<\/p>\n<p>    external fun init()<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0631\u0627 System.loadLibrary(&#8220;gl_code&#8221;) \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0622\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f gl_code.cpp \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u062f\u06cc\u0645 \u0648 \u0634\u0646\u0627\u0633\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645: gl_code <\/p>\n<p>  \u06a9\u062f C++ \u0648\u0627\u0642\u0639\u06cc <\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0686\u0646\u062f \u06a9\u062f C++ \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627 \u062b\u0628\u062a \u06a9\u0646\u062f:<\/p>\n<p>#include <\/p>\n<p>#include <\/p>\n<p>#define LOGI(&#8230;) ((void)__android_log_print(ANDROID_LOG_INFO, &#8220;native-lib&#8221;, __VA_ARGS__))<\/p>\n<p>extern &#8220;C&#8221;<br \/>\nJNIEXPORT void JNICALL<br \/>\nJava_com_example_clicker_nativeLibraryClasses_NativeLoading_init(JNIEnv *env, jobject thiz) {<\/p>\n<p>    LOGI(&#8220;int %s,&#8221;,  &#8220;&#8212;&#8212;&#8212;&#8212;&#8211;THIS IS A LOG FROM THE NATIVE SIDE &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;);<\/p>\n<p>}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u0646 \u0639\u0630\u0631\u062e\u0648\u0627\u0647\u06cc \u0645\u06cc \u06a9\u0646\u0645<\/p>\n<p>\u0648\u0642\u062a \u0645\u0646 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a (\u0645\u0646 \u06cc\u06a9 \u0633\u0627\u0639\u062a \u0632\u0645\u0627\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0631\u062f\u0645) \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0647 \u0628\u0639\u062f\u060c Chat GPT \u06a9\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<p>  1. \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0647\u062f\u0631<\/p>\n<p>#include<br \/>\n#include<br \/>\n#include : <\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u0641\u0627\u06cc\u0644 \u0647\u062f\u0631 JNI \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 \u0648 \u0627\u0646\u0648\u0627\u0639 \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 Java\/Kotlin \u0648 C++ \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. JNI \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06a9\u062f \u0628\u0648\u0645\u06cc (C\/C++) \u0628\u0627 \u0627\u0634\u06cc\u0627\u0621 \u0648 \u0645\u062a\u062f\u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0645\u0627\u0634\u06cc\u0646 \u0645\u062c\u0627\u0632\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u062f. #include : \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u0627\u0628\u0632\u0627\u0631 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 Android \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0686\u0627\u067e \u067e\u06cc\u0627\u0645 \u0647\u0627 \u062f\u0631 \u06af\u0632\u0627\u0631\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0647\u062f\u0631 android\/log.h \u062a\u0648\u0627\u0628\u0639\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u062f\u0631 \u06a9\u062f \u0628\u0648\u0645\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f (\u0645\u0634\u0627\u0628\u0647 Log.d() \u062f\u0631 Java\/Kotlin).<\/p>\n<p>  2. \u062b\u0628\u062a \u062a\u0639\u0631\u06cc\u0641 \u0645\u0627\u06a9\u0631\u0648<\/p>\n<p>#define LOGI(&#8230;) ((void)__android_log_print(ANDROID_LOG_INFO, &#8220;native-lib&#8221;, __VA_ARGS__))<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>LOGI: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0627\u06a9\u0631\u0648\u0647\u0627 \u062f\u0631 C\/C++ \u0645\u0627\u0646\u0646\u062f \u06a9\u062f\u0647\u0627\u06cc \u0645\u062e\u062a\u0635\u0631 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u06cc\u0627\u0628\u0646\u062f.android_log_print(): \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u0633\u0637\u062d \u0627\u0648\u0644\u0648\u06cc\u062a (ANDROID_LOG_INFO \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc)\u060c \u06cc\u06a9 \u0628\u0631\u0686\u0633\u0628 (&#8220;native-lib&#8221; \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f\u060c \u06a9\u0647 \u0628\u0647 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u0646\u0628\u0639 \u06af\u0632\u0627\u0631\u0634 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f) \u0648 \u067e\u06cc\u0627\u0645 (VA_ARGS__ \u0628\u0647 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u0645\u062a\u063a\u06cc\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f).\u0645\u0627\u06a9\u0631\u0648 \u062b\u0628\u062a \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0646 \u062a\u0627\u0628\u0639 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0647\u0631 \u0628\u0627\u0631\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 LOGI (&#8230;) \u0622\u0633\u0627\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>  3. C++ \u062e\u0627\u0631\u062c\u06cc &#8220;C&#8221; \u0627\u0639\u0644\u0627\u0645\u06cc\u0647<\/p>\n<p>extern &#8220;C&#8221;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062e\u0627\u0631\u062c\u06cc &#8220;C&#8221; \u0628\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u0645\u06cc \u06af\u0648\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u067e\u06cc\u0648\u0646\u062f C \u0628\u0631\u0627\u06cc \u06a9\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f. \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 JNI \u0628\u0627\u06cc\u062f \u0628\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0647\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u062c\u0627\u0648\u0627 (\u06a9\u0647 \u0627\u0632 \u067e\u06cc\u0648\u0646\u062f C \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f) \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627\u0634\u0646\u062f\u060c \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0646\u0627\u0645 \u062a\u0627\u0628\u0639 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 C++ \u0645\u062e\u062f\u0648\u0634 \u0646\u0634\u0648\u062f.<\/p>\n<p>  4. JNIEXPORT \u0648 JNICALL<\/p>\n<p>JNIEXPORT void JNICALL<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>JNIEXPORT: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0631\u0627\u0628\u0637 JNI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u0632 \u062c\u0627\u0648\u0627\/\u06a9\u0648\u062a\u0644\u06cc\u0646 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>JNICALL: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u06a9\u0647 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627\u0628\u0639 \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0635\u062d\u06cc\u062d \u0628\u0631\u0627\u06cc JNI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u062c\u0627\u0648\u0627 \u0648 C++ \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f).<\/p>\n<p>  5. \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f JNI<\/p>\n<p>Java_com_example_clicker_nativeLibraryClasses_NativeLoading_init(JNIEnv *env, jobject thiz)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0628\u0648\u0645\u06cc \u0645\u062a\u062f ()init \u0627\u0633\u062a \u06a9\u0647 \u0634\u0645\u0627 \u062f\u0631 Kotlin \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 init () \u0633\u0631\u06af\u0631\u0645 \u06a9\u0646\u0646\u062f\u0647 \u062e\u0627\u0631\u062c\u06cc \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u06cc\u062f.\u0646\u0627\u0645 \u062a\u0627\u0628\u0639 \u0627\u0632 \u06cc\u06a9 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0633\u062e\u062a\u06af\u06cc\u0631\u0627\u0646\u0647 JNI \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f: Java_packageName_className_methodName. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f:Java_com_example_clicker_nativeLibraryClasses_NativeLoading_init \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u0627\u0628\u0639 init() \u062f\u0631 \u06a9\u0644\u0627\u0633 NativeLoading \u0648\u0627\u0642\u0639 \u062f\u0631 \u0628\u0633\u062a\u0647 com.example.clicker.nativeLibraryClasses \u0627\u0633\u062a.\u062a\u0627\u0628\u0639 \u062f\u0627\u0631\u0627\u06cc \u062f\u0648 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u0633\u062a:JNIEnv *env: \u0627\u0634\u0627\u0631\u0647 \u06af\u0631 \u0628\u0647 \u0645\u062d\u06cc\u0637 JNI \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 JNI \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u0627\u0634\u06cc\u0627\u0621 \u062c\u0627\u0648\u0627\u060c \u0631\u0648\u0634 \u0647\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0648 \u063a\u06cc\u0631\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc \u062f\u0647\u062f.jobject thiz: \u0627\u0634\u0627\u0631\u0647 \u0627\u06cc \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u06cc \u062c\u0627\u0648\u0627\/\u06a9\u0648\u062a\u0644\u06cc\u0646 (\u0627\u06cc\u0646).<\/p>\n<p>  6. \u062b\u0628\u062a \u06cc\u06a9 \u067e\u06cc\u0627\u0645<\/p>\n<p>LOGI(&#8220;int %s,&#8221;,  &#8220;&#8212;&#8212;&#8212;&#8212;&#8211;THIS IS A LOG FROM THE NATIVE SIDE &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u062e\u0637 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0627 \u0627\u0632 \u06a9\u062f \u0627\u0635\u0644\u06cc \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u0632 \u0645\u0627\u06a9\u0631\u0648 LOGI \u06a9\u0647 \u200b\u200b\u0642\u0628\u0644\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0628\u0648\u062f \u0628\u0631\u0627\u06cc \u0686\u0627\u067e \u067e\u06cc\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f:&#8221;int %s,&#8221;: \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. %s \u06cc\u06a9 \u0645\u06a9\u0627\u0646 \u0646\u06af\u0647\u062f\u0627\u0631 \u0628\u0631\u0627\u06cc \u0645\u0642\u062f\u0627\u0631 \u0631\u0634\u062a\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062f\u0648\u0645 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc \u0634\u0648\u062f.&#8221;&#8212;&#8212;&#8212;&#8212;&#8211; \u0627\u06cc\u0646 \u0633\u06cc\u0627\u0647\u0647 \u06af\u0632\u0627\u0631\u0634 \u0627\u0632 \u0633\u0645\u062a \u0628\u0648\u0645\u06cc \u0627\u0633\u062a &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- \u062f\u0631 \u062c\u0627\u06cc\u06af\u06cc\u0631 \u062f\u0631\u062c \u0634\u0648\u062f.\u062e\u0644\u0627\u0635\u0647\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 C++ \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062a\u0627\u0628\u0639 init() \u0627\u0632 Kotlin \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f\u060c \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f.\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc JNI \u067e\u0627\u06cc\u0628\u0646\u062f \u0627\u0633\u062a \u0648 \u0628\u0647 \u0622\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u0628\u0627 Kotlin\/Java \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.\u0645\u0627\u06a9\u0631\u0648 LOGI() \u0648\u0631\u0648\u062f \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0628\u0627 \u062a\u06af \u00abnative-lib\u00bb \u0628\u0647 \u0644\u0627\u06af \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0632 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0641\u06cc\u062f \u0627\u0633\u062a. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 NativeLoading.init() \u0631\u0627 \u0627\u0632 Kotlin \u0641\u0631\u0627 \u0645\u06cc \u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u06a9\u062f C++ \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u06af\u0632\u0627\u0631\u0634 \u062f\u0631 \u0644\u0627\u06af \u0627\u0646\u062f\u0631\u0648\u06cc\u062f (logcat) \u0628\u0627 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0638\u0627\u0647\u0631 \u0645\u06cc \u0634\u0648\u062f: &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;THIS \u0633\u06cc\u0627\u0647\u0647 \u0627\u06cc \u0627\u0633\u062a \u0627\u0632 \u0633\u0645\u062a \u0628\u0648\u0645\u06cc &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;.<\/p>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f: <\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f\u060c \u0622\u0646 \u0631\u0627 \u0645\u0627\u0646\u0646\u062f \u0647\u0631 \u0646\u0648\u0639 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u062a\u0644\u06cc\u0646 \u0633\u0627\u062f\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<p>  val nativeCode= NativeLoading()<br \/>\n        nativeCode.init()<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u0644\u0627\u06af \u0645\u0627\u0646\u0646\u062f \u0647\u0631 \u0644\u0627\u06af \u062f\u06cc\u06af\u0631 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f<\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/p>\n<p>\u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0648\u0642\u062a \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0645\u0646 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u06cc\u062f \u0645\u062a\u0634\u06a9\u0631\u0645. \u0627\u06af\u0631 \u0633\u0648\u0627\u0644 \u06cc\u0627 \u0627\u0628\u0647\u0627\u0645\u06cc \u062f\u0627\u0631\u06cc\u062f \u0644\u0637\u0641\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u06a9\u0627\u0645\u0646\u062a \u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u06cc\u0627 \u0628\u0627 \u0645\u0646 \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u062f \u062a\u0648\u06cc\u06cc\u062a\u0631. <\/p>\n<div data-article-id=\"2008640\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D9%81%D9%87%D8%B1%D8%B3%D8%AA_%D9%85%D8%B7%D8%A7%D9%84%D8%A8\" >\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D9%85%D9%86%D8%A7%D8%A8%D8%B9\" >\u0645\u0646\u0627\u0628\u0639<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D9%86_%D8%AF%D8%B1_%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87_Google_Play\" >\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u062f\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 Google Play<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%DA%A9%D8%AF_GitHub_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D9%86\" >\u06a9\u062f GitHub \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D9%87%D8%AF%D9%81_%D8%A7%DB%8C%D9%86_%D9%BE%D8%B3%D8%AA_%D9%88%D8%A8%D9%84%D8%A7%DA%AF\" >\u0647\u062f\u0641 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#NDK_%D9%88_CMake_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DA%A9%D9%86%DB%8C%D8%AF\" >NDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#Gradle_%D8%B1%D8%A7_%D8%A8%D9%87_%DA%A9%D8%AF_%D8%A8%D9%88%D9%85%DB%8C_%D8%AE%D9%88%D8%AF_%D9%BE%DB%8C%D9%88%D9%86%D8%AF_%D8%AF%D9%87%DB%8C%D8%AF\" >Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%DB%8C%DA%A9_%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA_%D8%B3%D8%A7%D8%AE%D8%AA_CMake_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#JNI_%D8%B1%D8%A7%D8%A8%D8%B7_%D8%A8%D9%88%D9%85%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7\" >JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%DA%A9%D8%AF_C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C\" >\u06a9\u062f C++ \u0648\u0627\u0642\u0639\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D9%85%D9%86_%D8%B9%D8%B0%D8%B1%D8%AE%D9%88%D8%A7%D9%87%DB%8C_%D9%85%DB%8C_%DA%A9%D9%86%D9%85\" >\u0645\u0646 \u0639\u0630\u0631\u062e\u0648\u0627\u0647\u06cc \u0645\u06cc \u06a9\u0646\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#1_%D9%81%D8%A7%DB%8C%D9%84_%D9%87%D8%A7%DB%8C_%D9%87%D8%AF%D8%B1\" >1. \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0647\u062f\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#2_%D8%AB%D8%A8%D8%AA_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%A7%DA%A9%D8%B1%D9%88\" >2. \u062b\u0628\u062a \u062a\u0639\u0631\u06cc\u0641 \u0645\u0627\u06a9\u0631\u0648<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#3_C_%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C_%E2%80%9CC%E2%80%9D_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C%D9%87\" >3. C++ \u062e\u0627\u0631\u062c\u06cc &#8220;C&#8221; \u0627\u0639\u0644\u0627\u0645\u06cc\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#4_JNIEXPORT_%D9%88_JNICALL\" >4. JNIEXPORT \u0648 JNICALL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#5_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C%D9%87_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_JNI\" >5. \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f JNI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#6_%D8%AB%D8%A8%D8%AA_%DB%8C%DA%A9_%D9%BE%DB%8C%D8%A7%D9%85\" >6. \u062b\u0628\u062a \u06cc\u06a9 \u067e\u06cc\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%DA%A9%D8%AF\" >\u0627\u062c\u0631\u0627\u06cc \u06a9\u062f:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/adding-ndk-to-an-existing-android-app-and-using-c-to-log-525d\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%81%D9%87%D8%B1%D8%B3%D8%AA_%D9%85%D8%B7%D8%A7%D9%84%D8%A8\"><\/span>\n<p>  \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\u0647\u062f\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af\u061f<\/li>\n<li>NDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f <\/li>\n<li>  Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f <\/li>\n<li>\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<\/li>\n<li>\u06a9\u062f ++C<\/li>\n<li>JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<\/li>\n<li>\u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%86%D8%A7%D8%A8%D8%B9\"><\/span>\n<p>  \u0645\u0646\u0627\u0628\u0639<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D9%86_%D8%AF%D8%B1_%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87_Google_Play\"><\/span>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u062f\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 Google Play<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_GitHub_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D9%86\"><\/span>\n<p>  \u06a9\u062f GitHub \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"%D9%87%D8%AF%D9%81_%D8%A7%DB%8C%D9%86_%D9%BE%D8%B3%D8%AA_%D9%88%D8%A8%D9%84%D8%A7%DA%AF\"><\/span>\n<p>  \u0647\u062f\u0641 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0647\u062f\u0641 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0627\u0632 \u06a9\u062f ++C \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u062f\u0631 Logcat Android Studio \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"NDK_%D9%88_CMake_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n  <a name=\"install-ndk-and-cmake\" href=\"#install-ndk-and-cmake\"><\/p>\n<p>  NDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/developer.android.com\/studio\/projects\/install-ndk#default-version\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/li>\n<li>\u0627\u0648\u0644\u06cc\u0646 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 Android Native Development Kit (NDK) \u0648 CMake (\u0627\u0628\u0632\u0627\u0631 \u0633\u0627\u062e\u062a \u062e\u0627\u0631\u062c\u06cc \u06a9\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 Gradle \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f) \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645.<\/li>\n<li>\u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0633\u062e\u0647 \u062f\u0642\u06cc\u0642\u200c\u062a\u0631\u06cc \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0628\u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u0627\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u0631\u0648\u06cc\u0645\u060c<\/li>\n<li> <code>Tools &gt; SDK Manager &gt; SDK Tools tab &gt; Select the NDK (Side by side) and CMake checkboxes &gt; select ok<\/code>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Gradle_%D8%B1%D8%A7_%D8%A8%D9%87_%DA%A9%D8%AF_%D8%A8%D9%88%D9%85%DB%8C_%D8%AE%D9%88%D8%AF_%D9%BE%DB%8C%D9%88%D9%86%D8%AF_%D8%AF%D9%87%DB%8C%D8%AF\"><\/span>\n<p>  Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/developer.android.com\/studio\/projects\/gradle-external-native-builds#configure-gradle\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/li>\n<li>\u062d\u0627\u0644 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u06a9\u062f ++C \u062e\u0648\u062f \u0628\u0627 Gradle \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0628\u0647 Gradle \u0628\u06af\u0648\u06cc\u06cc\u0645 \u06a9\u0647 \u0641\u0627\u06cc\u0644 \u0633\u0627\u062e\u062a CMake \u0645\u0627 \u06a9\u062c\u0627\u0633\u062a. \u0633\u067e\u0633 Gradle \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f \u0648 \u06a9\u062f ++C \u0645\u0627 \u0631\u0627 \u0628\u0633\u0627\u0632\u062f<\/li>\n<li>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 Gradle \u062f\u0631 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 build.gradle \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639 \u062f\u0647\u06cc\u0645:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight groovy\"><code><span class=\"n\">android<\/span> <span class=\"o\">{<\/span>\n  <span class=\"o\">...<\/span>\n  <span class=\"n\">defaultConfig<\/span> <span class=\"o\">{...}<\/span>\n  <span class=\"n\">buildTypes<\/span> <span class=\"o\">{...}<\/span>\n\n  <span class=\"c1\">\/\/ Encapsulates your external native build configurations.<\/span>\n  <span class=\"n\">externalNativeBuild<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"c1\">\/\/ Encapsulates your CMake build configurations.<\/span>\n    <span class=\"n\">cmake<\/span> <span class=\"o\">{<\/span>\n\n      <span class=\"c1\">\/\/ Provides a relative path to your CMake build script.<\/span>\n      <span class=\"n\">path<\/span> <span class=\"s1\">'src\/main\/cpp\/CMakeLists.txt'<\/span>\n    <span class=\"o\">}<\/span>\n  <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li>\u0631\u0627 <code>externalNativeBuild<\/code> \u0628\u062e\u0634 \u0628\u062e\u0634 \u0645\u0647\u0645\u06cc \u0627\u0633\u062a \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u06cc\u0644\u062f Gradle \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u062e\u0637\u0627\u06cc \u0645\u0628\u0646\u06cc \u0628\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0627\u06cc\u0644: <code>src\/main\/cpp\/CMakeLists.txt<\/code> \u067e\u06cc\u062f\u0627 \u0646\u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u062e\u0637\u0627\u06cc \u062e\u0648\u0628\u06cc \u0627\u0633\u062a\u060c \u0645\u0627 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u062f\u0631\u0633\u062a\u06cc \u0647\u0633\u062a\u06cc\u0645<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%DB%8C%DA%A9_%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA_%D8%B3%D8%A7%D8%AE%D8%AA_CMake_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code># Sets the minimum version of CMake required to build your native library.\n# This ensures that a certain set of CMake features is available to\n# your build.\n\ncmake_minimum_required(VERSION 3.4.1)\n\n\n\n# Specifies a library name, specifies whether the library is STATIC or\n# SHARED, and provides relative paths to the source code. You can\n# define multiple libraries by adding multiple add_library() commands,\n# and CMake builds them for you. When you build your app, Gradle\n# automatically packages shared libraries with your APK.\n\n\n#Add a library to the project using the specified source files.\nadd_library(gl_code SHARED\n        gl_code.cpp)\n\n# add lib dependencies\ntarget_link_libraries(gl_code\n        android\n        log\n        EGL\n        GLESv2)\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li>\n<p>\u0628\u062e\u0634 \u0645\u0647\u0645 \u0627\u06cc\u0646 \u06a9\u062f \u0639\u0628\u0627\u0631\u062a \u0627\u0633\u062a \u0627\u0632 <code>add_library(gl_code SHARED gl_code.cpp)<\/code>. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u0645:<\/p>\n<\/li>\n<li>\n<p><code>add_library()<\/code>: \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 <a href=\"https:\/\/cmake.org\/cmake\/help\/latest\/command\/add_library.html\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: <code>Adding a library to the project using the specified source files.<\/code> \u06a9\u0647 \u0627\u0633\u0627\u0633\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u0645\u06a9\u0627\u0646\u06cc \u0628\u0631\u0627\u06cc \u06a9\u062f ++C \u062e\u0648\u062f \u0647\u0633\u062a\u06cc\u0645<\/p>\n<\/li>\n<li>\n<p><code>gl_code<\/code>: \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u062c\u0647\u0627\u0646\u06cc \u0628\u0627\u0634\u062f \u0648 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0628\u0647 \u06a9\u062f ++C \u062e\u0648\u062f \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0631\u0627\u062c\u0639\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0646\u0627\u0645 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0633\u0627\u0632\u06cc\u062f \u062a\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0627\u0631 \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><code>SHARED<\/code>: \u0641\u0642\u0637 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u067e\u0648\u06cc\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062a\u0648\u0633\u0637 \u0633\u0627\u06cc\u0631 \u0627\u0647\u062f\u0627\u0641 \u0645\u0631\u062a\u0628\u0637 \u0634\u0648\u062f \u0648 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p><code>gl_code.cpp<\/code>: \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0645\u0646\u0628\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f (\u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u06a9\u062f C++ \u0645\u0627 \u0631\u0627 \u062f\u0631 \u062e\u0648\u062f \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f). <\/p>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"JNI_%D8%B1%D8%A7%D8%A8%D8%B7_%D8%A8%D9%88%D9%85%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7\"><\/span>\n<p>  JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/developer.android.com\/training\/articles\/perf-jni\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/li>\n<li>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: <code>It defines a way for the bytecode that Android compiles from managed code (written in the Java or Kotlin programming languages) to interact with native code (written in C\/C++). JNI is vendor-neutral, has support for loading code from dynamic shared libraries, and while cumbersome at times is reasonably efficient.<\/code>\n<\/li>\n<li>\u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0635\u062d\u0628\u062a \u0647\u0627\u06cc \u0646\u0627\u062f\u0631 \u0627\u0633\u062a: \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 Kotlin\/Java \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0645\u0630\u06a9\u0648\u0631 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u062f\u0647\u0627\u06cc ++C \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/li>\n<li>\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">NativeLoading<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"nf\">init<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nc\">System<\/span><span class=\"p\">.<\/span><span class=\"nf\">loadLibrary<\/span><span class=\"p\">(<\/span><span class=\"s\">\"gl_code\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">external<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">init<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li>\u0631\u0627 <code>System.loadLibrary(\"gl_code\")<\/code> \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0622\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f <code>gl_code.cpp<\/code> \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u062f\u06cc\u0645 \u0648 \u0634\u0646\u0627\u0633\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645: <code>gl_code<\/code> <\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C\"><\/span>\n<p>  \u06a9\u062f C++ \u0648\u0627\u0642\u0639\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0686\u0646\u062f \u06a9\u062f C++ \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627 \u062b\u0628\u062a \u06a9\u0646\u062f:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>#include <jni.h>\n\n#include <android>\n\n#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, \"native-lib\", __VA_ARGS__))\n\n\nextern \"C\"\nJNIEXPORT void JNICALL\nJava_com_example_clicker_nativeLibraryClasses_NativeLoading_init(JNIEnv *env, jobject thiz) {\n\n    LOGI(\"int %s,\",  \"--------------THIS IS A LOG FROM THE NATIVE SIDE ----------------------\");\n\n}\n\n<\/android><\/jni.h><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%86_%D8%B9%D8%B0%D8%B1%D8%AE%D9%88%D8%A7%D9%87%DB%8C_%D9%85%DB%8C_%DA%A9%D9%86%D9%85\"><\/span>\n  <a name=\"i-apologise\" href=\"#i-apologise\"><\/p>\n<p>  \u0645\u0646 \u0639\u0630\u0631\u062e\u0648\u0627\u0647\u06cc \u0645\u06cc \u06a9\u0646\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0648\u0642\u062a \u0645\u0646 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a (\u0645\u0646 \u06cc\u06a9 \u0633\u0627\u0639\u062a \u0632\u0645\u0627\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0631\u062f\u0645) \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0647 \u0628\u0639\u062f\u060c Chat GPT \u06a9\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc \u062f\u0647\u062f:<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"1_%D9%81%D8%A7%DB%8C%D9%84_%D9%87%D8%A7%DB%8C_%D9%87%D8%AF%D8%B1\"><\/span>\n<p>  1. \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0647\u062f\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>#include <jni.h>\n#include <android>\n#include <jni.h>: \n<\/jni.h><\/android><\/jni.h><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li>\u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u0641\u0627\u06cc\u0644 \u0647\u062f\u0631 JNI \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 \u0648 \u0627\u0646\u0648\u0627\u0639 \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 Java\/Kotlin \u0648 C++ \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. JNI \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06a9\u062f \u0628\u0648\u0645\u06cc (C\/C++) \u0628\u0627 \u0627\u0634\u06cc\u0627\u0621 \u0648 \u0645\u062a\u062f\u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0645\u0627\u0634\u06cc\u0646 \u0645\u062c\u0627\u0632\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u062f. #include : \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u0627\u0628\u0632\u0627\u0631 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 Android \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0686\u0627\u067e \u067e\u06cc\u0627\u0645 \u0647\u0627 \u062f\u0631 \u06af\u0632\u0627\u0631\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0647\u062f\u0631 android\/log.h \u062a\u0648\u0627\u0628\u0639\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u062f\u0631 \u06a9\u062f \u0628\u0648\u0645\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f (\u0645\u0634\u0627\u0628\u0647 Log.d() \u062f\u0631 Java\/Kotlin).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"2_%D8%AB%D8%A8%D8%AA_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%A7%DA%A9%D8%B1%D9%88\"><\/span>\n<p>  2. \u062b\u0628\u062a \u062a\u0639\u0631\u06cc\u0641 \u0645\u0627\u06a9\u0631\u0648<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, \"native-lib\", __VA_ARGS__))\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>LOGI: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0627\u06a9\u0631\u0648\u0647\u0627 \u062f\u0631 C\/C++ \u0645\u0627\u0646\u0646\u062f \u06a9\u062f\u0647\u0627\u06cc \u0645\u062e\u062a\u0635\u0631 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u06cc\u0627\u0628\u0646\u062f.<br \/><strong>android_log_print(): \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u0633\u0637\u062d \u0627\u0648\u0644\u0648\u06cc\u062a (ANDROID_LOG_INFO \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc)\u060c \u06cc\u06a9 \u0628\u0631\u0686\u0633\u0628 (&#8220;native-lib&#8221; \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f\u060c \u06a9\u0647 \u0628\u0647 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u0646\u0628\u0639 \u06af\u0632\u0627\u0631\u0634 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f) \u0648 \u067e\u06cc\u0627\u0645 (<\/strong>VA_ARGS__ \u0628\u0647 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u0645\u062a\u063a\u06cc\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f).<br \/>\u0645\u0627\u06a9\u0631\u0648 \u062b\u0628\u062a \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0646 \u062a\u0627\u0628\u0639 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0647\u0631 \u0628\u0627\u0631\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 LOGI (&#8230;) \u0622\u0633\u0627\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3_C_%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C_%E2%80%9CC%E2%80%9D_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C%D9%87\"><\/span>\n<p>  3. C++ \u062e\u0627\u0631\u062c\u06cc &#8220;C&#8221; \u0627\u0639\u0644\u0627\u0645\u06cc\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>extern \"C\"\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062e\u0627\u0631\u062c\u06cc &#8220;C&#8221; \u0628\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u0645\u06cc \u06af\u0648\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u067e\u06cc\u0648\u0646\u062f C \u0628\u0631\u0627\u06cc \u06a9\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f. \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 JNI \u0628\u0627\u06cc\u062f \u0628\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0647\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u062c\u0627\u0648\u0627 (\u06a9\u0647 \u0627\u0632 \u067e\u06cc\u0648\u0646\u062f C \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f) \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627\u0634\u0646\u062f\u060c \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0646\u0627\u0645 \u062a\u0627\u0628\u0639 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 C++ \u0645\u062e\u062f\u0648\u0634 \u0646\u0634\u0648\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4_JNIEXPORT_%D9%88_JNICALL\"><\/span>\n<p>  4. JNIEXPORT \u0648 JNICALL<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>JNIEXPORT void JNICALL\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>JNIEXPORT: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0631\u0627\u0628\u0637 JNI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u0632 \u062c\u0627\u0648\u0627\/\u06a9\u0648\u062a\u0644\u06cc\u0646 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>JNICALL: \u06cc\u06a9 \u0645\u0627\u06a9\u0631\u0648 \u06a9\u0647 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627\u0628\u0639 \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0635\u062d\u06cc\u062d \u0628\u0631\u0627\u06cc JNI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u062c\u0627\u0648\u0627 \u0648 C++ \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C%D9%87_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_JNI\"><\/span>\n<p>  5. \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f JNI<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Java_com_example_clicker_nativeLibraryClasses_NativeLoading_init(JNIEnv *env, jobject thiz)\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0628\u0648\u0645\u06cc \u0645\u062a\u062f ()init \u0627\u0633\u062a \u06a9\u0647 \u0634\u0645\u0627 \u062f\u0631 Kotlin \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 init () \u0633\u0631\u06af\u0631\u0645 \u06a9\u0646\u0646\u062f\u0647 \u062e\u0627\u0631\u062c\u06cc \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u06cc\u062f.<br \/>\u0646\u0627\u0645 \u062a\u0627\u0628\u0639 \u0627\u0632 \u06cc\u06a9 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0633\u062e\u062a\u06af\u06cc\u0631\u0627\u0646\u0647 JNI \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f: Java_packageName_className_methodName. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f:<br \/>Java_com_example_clicker_nativeLibraryClasses_NativeLoading_init \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u0627\u0628\u0639 init() \u062f\u0631 \u06a9\u0644\u0627\u0633 NativeLoading \u0648\u0627\u0642\u0639 \u062f\u0631 \u0628\u0633\u062a\u0647 com.example.clicker.nativeLibraryClasses \u0627\u0633\u062a.<br \/>\u062a\u0627\u0628\u0639 \u062f\u0627\u0631\u0627\u06cc \u062f\u0648 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u0633\u062a:<br \/>JNIEnv *env: \u0627\u0634\u0627\u0631\u0647 \u06af\u0631 \u0628\u0647 \u0645\u062d\u06cc\u0637 JNI \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 JNI \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u0627\u0634\u06cc\u0627\u0621 \u062c\u0627\u0648\u0627\u060c \u0631\u0648\u0634 \u0647\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0648 \u063a\u06cc\u0631\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc \u062f\u0647\u062f.<br \/>jobject thiz: \u0627\u0634\u0627\u0631\u0647 \u0627\u06cc \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u06cc \u062c\u0627\u0648\u0627\/\u06a9\u0648\u062a\u0644\u06cc\u0646 (\u0627\u06cc\u0646).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"6_%D8%AB%D8%A8%D8%AA_%DB%8C%DA%A9_%D9%BE%DB%8C%D8%A7%D9%85\"><\/span>\n<p>  6. \u062b\u0628\u062a \u06cc\u06a9 \u067e\u06cc\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>LOGI(\"int %s,\",  \"--------------THIS IS A LOG FROM THE NATIVE SIDE ----------------------\");\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062e\u0637 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0627 \u0627\u0632 \u06a9\u062f \u0627\u0635\u0644\u06cc \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u0632 \u0645\u0627\u06a9\u0631\u0648 LOGI \u06a9\u0647 \u200b\u200b\u0642\u0628\u0644\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0628\u0648\u062f \u0628\u0631\u0627\u06cc \u0686\u0627\u067e \u067e\u06cc\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f:<br \/>&#8220;int %s,&#8221;: \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. %s \u06cc\u06a9 \u0645\u06a9\u0627\u0646 \u0646\u06af\u0647\u062f\u0627\u0631 \u0628\u0631\u0627\u06cc \u0645\u0642\u062f\u0627\u0631 \u0631\u0634\u062a\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062f\u0648\u0645 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc \u0634\u0648\u062f.<br \/>&#8220;&#8212;&#8212;&#8212;&#8212;&#8211; \u0627\u06cc\u0646 \u0633\u06cc\u0627\u0647\u0647 \u06af\u0632\u0627\u0631\u0634 \u0627\u0632 \u0633\u0645\u062a \u0628\u0648\u0645\u06cc \u0627\u0633\u062a &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- \u062f\u0631 \u062c\u0627\u06cc\u06af\u06cc\u0631 \u062f\u0631\u062c \u0634\u0648\u062f.<br \/>\u062e\u0644\u0627\u0635\u0647<br \/>\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 C++ \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062a\u0627\u0628\u0639 init() \u0627\u0632 Kotlin \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f\u060c \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc JNI \u067e\u0627\u06cc\u0628\u0646\u062f \u0627\u0633\u062a \u0648 \u0628\u0647 \u0622\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u0628\u0627 Kotlin\/Java \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<br \/>\u0645\u0627\u06a9\u0631\u0648 LOGI() \u0648\u0631\u0648\u062f \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0628\u0627 \u062a\u06af \u00abnative-lib\u00bb \u0628\u0647 \u0644\u0627\u06af \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.<br \/>\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0632 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0641\u06cc\u062f \u0627\u0633\u062a. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 NativeLoading.init() \u0631\u0627 \u0627\u0632 Kotlin \u0641\u0631\u0627 \u0645\u06cc \u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u06a9\u062f C++ \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u06af\u0632\u0627\u0631\u0634 \u062f\u0631 \u0644\u0627\u06af \u0627\u0646\u062f\u0631\u0648\u06cc\u062f (logcat) \u0628\u0627 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0638\u0627\u0647\u0631 \u0645\u06cc \u0634\u0648\u062f: &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;THIS \u0633\u06cc\u0627\u0647\u0647 \u0627\u06cc \u0627\u0633\u062a \u0627\u0632 \u0633\u0645\u062a \u0628\u0648\u0645\u06cc &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%DA%A9%D8%AF\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f\u060c \u0622\u0646 \u0631\u0627 \u0645\u0627\u0646\u0646\u062f \u0647\u0631 \u0646\u0648\u0639 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u062a\u0644\u06cc\u0646 \u0633\u0627\u062f\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code>  <span class=\"kd\">val<\/span> <span class=\"py\">nativeCode<\/span><span class=\"p\">=<\/span> <span class=\"nc\">NativeLoading<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">nativeCode<\/span><span class=\"p\">.<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06cc\u06a9 \u0644\u0627\u06af \u0645\u0627\u0646\u0646\u062f \u0647\u0631 \u0644\u0627\u06af \u062f\u06cc\u06af\u0631 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\"><\/span>\n  <a name=\"conclusion\" href=\"#conclusion\"><\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0648\u0642\u062a \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0645\u0646 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u06cc\u062f \u0645\u062a\u0634\u06a9\u0631\u0645. \u0627\u06af\u0631 \u0633\u0648\u0627\u0644 \u06cc\u0627 \u0627\u0628\u0647\u0627\u0645\u06cc \u062f\u0627\u0631\u06cc\u062f \u0644\u0637\u0641\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u06a9\u0627\u0645\u0646\u062a \u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u06cc\u0627 \u0628\u0627 \u0645\u0646 \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u062f <a href=\"https:\/\/twitter.com\/AndroidTristan\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\u062a\u0648\u06cc\u06cc\u062a\u0631<\/a>. <\/li>\n<\/ul><\/div>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628 \u0647\u062f\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af\u061f NDK \u0648 CMake \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f Gradle \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0628\u0648\u0645\u06cc \u062e\u0648\u062f \u067e\u06cc\u0648\u0646\u062f \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a CMake \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.) \u06a9\u062f ++C JNI (\u0631\u0627\u0628\u0637 \u0628\u0648\u0645\u06cc \u062c\u0627\u0648\u0627.) \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u0645\u0646\u0627\u0628\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u062f\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":77456,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-77455","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/77455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=77455"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/77455\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/77456"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=77455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=77455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=77455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}