Android JNI 개발 진입 및 실제 전투

소개 :
일부 알고리즘이나 기본 드라이버의 경우 개발을 위해 jni를 사용해야하는 경우가 많습니다. 이제 공식적으로 CMake 도구를 사용하여 jni를 개발하는 것이 좋습니다.
CMake를 사용하여 Jni를 개발하는 것은 실제로 매우 간단합니다. 요구 사항이 높지 않은 경우 간단히 구성하면됩니다.


구성 환경
Jni 개발을 위해 CMake를 사용하려면 CMake 플러그인, LLDB 플러그인 및 NDK 플러그인을 사용해야하며, 모두 Android Studio를 통해 빠르게 설치할 수 있습니다.
SDK 관리자를 열고 Android SDK-> SDK 도구 옵션을 찾은 다음 CMake, LLDB, NDK 플러그인을 설치합니다.


C ++ 코드를 지원하는 프로젝트 만들기

기본값은 다음입니다. 마침은 프로젝트 생성을 완료합니다.

app build.gradle에서 구성을 확인하십시오.

cpp 아래의 CMakeLists.txt는 매우 중요한 구성 파일입니다. 내부 구성을 살펴보십시오.

native-lib.cpp의 코드를 살펴보면 다음은 C를 호출하는 JAVA의 주요 메소드에 대한 특정 구현이며 Java 코드에 선언 된 원시 메소드는 C / C ++에서 기능 알고리즘을 구현하는 데 사용됩니다.

네이티브 라이브러리 라이브러리 및 메서드 호출로드는 MainActivity에서 구현됩니다.

 

이것으로 JNI의 기본 개발이 완료되었습니다!

 

특정 구현에서 Java 기본 메소드 선언에서 C 구현으로 변환하는 방법은 다음과 같습니다.

 1. Java 클래스 Demo.java 만들기  

공개 클래스 데모 { 
    공개 네이티브 int addTwo (int a, int b); 
    public native int addMore (int [] nums, int target); 
}

2. Windows의 cmd 명령을 열고 (물론 Android Studio와 함께 제공되는 터미널 콘솔을 사용할 수도 있습니다) 네이티브 메서드 인터페이스 클래스 Demo.java의 경로로 전환합니다. 그런 다음을 사용 javac Demo.java하여 클래스를 .class 파일로 변환합니다. 참고 : Demo.java에 중국어 주석을 포함하지 마십시오.

3. 그런 다음 프로젝트의 java 디렉토리로 다시 전환하고 javah -classpath . -jni + 包名 + 文件名생성 된 .h 파일을 사용 합니다 (명령에서 -jni 앞의 점이 필요함). cd ... 명령을 사용하여 Windows의 상위 레벨 디렉토리를 전환하십시오.

4. 실행이 완료되면 java 디렉토리에 패키지 이름 + 파일 이름이 포함 된 .h 파일을 볼 수 있으며 여기에 Demo.java에 해당하는 jni 함수 이름 코드가 작성되어 있습니다.

/ * DO NOT EDIT 본 파일 - 그것은 기계 생성 * / 
사용법 #include <jni.h> 
/ * 헤더 클래스 com_wasu_myjni_jni_Demo * /에 대한 

#ifndef _Included_com_wasu_myjni_jni_Demo 
#DEFINE _Included_com_wasu_myjni_jni_Demo 
#ifdef와 __cplusplus 
통근 "C"{ 
#endif 다음 
/ * 
 * 등급 : com_wasu_myjni_jni_Demo 
 * 메서드 : sum 
 * 서명 : (II) I 
 * / 
JNIEXPORT jint JNICALL Java_com_wasu_myjni_jni_Demo_addTwo 
  (JNIEnv *, jobject, jint, jint); 

/ * 
 * 클래스 : com_wasu_myjni_jni_Demo 
 * 메서드 : twoSum 
 * 서명 : ([II) I 
 * / 
JNIEXPORT jint JNICALL Java_com_wasu_myjni_jni_Demo_addMore
  (JNIEnv *, jobject, jitArray, jit); 

#ifdef __cplusplus
} 
#endif 
#endif

보시다시피 Demo.java의 메소드에 해당하는 jni 함수 이름이 파일에 작성되었습니다.

이때 생성 된 .h 파일의 내용을 이전에 생성 한 native-lib.cpp 파일에 복사하여 붙여 넣으면 jni 코드의 네이밍 부분이 완성됩니다. 그런 다음 native-lib.cpp에서 해당 메서드를 구현합니다.

참고 : Android Sudio는 이제 바로 가기 구현을 제공합니다. Demo.java 클래스에서 빨간색으로 표시된 메소드를 클릭하면 addTwo에 대한 JNI 생성 함수가 팝업됩니다. 특정 기능을 달성하려면 native-lib.cpp에서 해당 C ++ 메소드를 생성하려면 클릭하십시오. .


jni 함수 이름을 작성하면 Demo.java의 코드가 더 이상 빨간색이 아니므로 Demo.java의 메서드가 jni 함수를 올바르게 호출 할 수 있음을 나타냅니다. MainActivity에서 native-lib를로드하고 특정 위치의 Demo에서 메서드를 호출합니다.

// 애플리케이션 시작시 'native-lib'라이브러리를로드하는 데 사용됩니다. 
static { 
    System.loadLibrary ( "native-lib"); 
}
@Override 
protected void onCreate (Bundle savedInstanceState) { 
    super.onCreate (savedInstanceState); 
    setContentView (R.layout.activity_main); 

    // 네이티브 메서드 호출 예 
    TextView tv = findViewById (R.id.sample_text); 
    tv.setText ( "a + b ="+ new Demo (). addTwo (2, 3)); // 调用 处
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

추천

출처blog.csdn.net/MYBOYER/article/details/106115830