Android studio 를 사용 하여 작은 jni 프로그램 을 만 듭 니 다.

4481 단어 androidstudiojni
1.NDK 와 JNI 를 간단히 소개 한다.
  • NDK:NDK 는 Native Development Kit 의 줄 임 말로 구 글 이 제공 하 는 도구 모음 입 니 다.다른 언어(C,C++또는 어 셈 블 리)로 안 드 로 이 드 의 JNI 를 개발 할 수 있 습 니 다.NDK 는 여러 플랫폼 의 so 를 컴 파일 할 수 있 습 니 다.개발 자 는 mk 파일 설명 에 필요 한 플랫폼 만 간단하게 수정 하고 코드 를 바 꾸 지 않 아 도 됩 니 다.NDK 는 필요 한 so 라 이브 러 리 를 컴 파일 할 수 있 습 니 다.
  • JNI:JNI 는 자바 네 이 티 브 인터페이스 의 줄 임 말로 자바 와 다른 언어의 통신(주로 C&C++)
  • 을 실현 하 는 API 를 제공 합 니 다.
    2.Android Studio 설정 ndk 경로 열기(또는 ndk 다운로드)
    这里写图片描述
    3.클래스 를 만 들 고 다음 그림 과 같은 native 방법 을 정의 합 니 다.
    这里写图片描述
    4.javac 명령 으로HelloWorld.java를 컴 파일 한 다음javah -jni명령 으로 컴 파일 하여 jni 에 필요 한 헤더 파일 가 져 오기
    파일 이 있 는 위치 로 들 어가 javac 를 실행 합 니 다.
    列表内容
    여기 서 주의해 야 할 것 은 다음 그림 디 렉 터 리 와 같은 명령javah -jni,명령javah -jni 패키지 이름 으로 뒤로 물 러 나 야 한 다 는 것 입 니 다.
    这里写图片描述
    헤더 파일 을 가 져 오 는 데 많은 구덩이 가 있 습 니 다.오류 가 발생 하면 'com.zsy.hellojni.HelloWorld' 클래스 파일 을 찾 을 수 없습니다.이 명령javah -classpath . -jni 을 시험 해 볼 수 있 습 니 다.컴 파일 에 성공 하여 구 덩이 를 만 나 지 못 하면・・・\src\main\java디 렉 터 리 아래 에서.h 파일 을 볼 수 있 습 니 다.
    5.다음 항목 에 jni 디 렉 터 리 를 만 들 고 방금 생 성 된.h 파일 을 이 디 렉 터 리 로 잘라 냅 니 다.
    这里写图片描述
    6.이.h 파일 의 내용 을 살 펴 보 겠 습 니 다.이 안 은 자바 의 개념 으로 볼 때 인터페이스 안의 추상 적 인 방법 에 해당 합 니 다.우 리 는.c 파일 을 만들어 서 이 방법 을 실현 하 는 동시에 우리 가 정의 한 native 방법 을 실현 해 야 합 니 다.
    
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_zsy_hellojni_HelloWord */
    #ifndef _Included_com_zsy_hellojni_HelloWord
    #define _Included_com_zsy_hellojni_HelloWord
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:   com_zsy_hellojni_HelloWorld
     * Method:  helloWorld
     * Signature: ()Ljava/lang/String;
     * TODO:          
     */
     //   Interface      
    JNIEXPORT jstring JNICALL Java_com_zsy_hellojni_HelloWorld_helloWorld
     (JNIEnv * env, jclass);
    /*
     * Class:   com_zsy_hellojni_HelloWorld
     * Method:  add
     * Signature: (II)I
     * TODO:         
     */
    JNIEXPORT jint JNICALL Java_com_zsy_hellojni_HelloWorld_add
     (JNIEnv * env,jclass , jint , jint);
    #ifdef __cplusplus
    }
    #endif
    #endif
    7.우 리 는 jni 디 렉 터 리 아래 hello 를 만 듭 니 다.jni.c 파일 로.h 파일 의 추상 적 인 방법 구현
    
    //      c  ,       native  ,   .h      
    //       .h   
    #include <com_zsy_hellojni_HelloWord.h>
    //       
    JNIEXPORT jstring JNICALL Java_com_zsy_hellojni_HelloWorld_helloWorld
     (JNIEnv *env, jclass jobj) {
      return (*env)->NewStringUTF(env,"HelloWorld    jni        ");
    }
    //   a+b   
    JNIEXPORT jint JNICALL Java_com_zsy_hellojni_HelloWorld_add
     (JNIEnv *env, jclass jobj, jint a, jint b){
     return a+b;
    }
    8.다음은 build.gradle 에 ndk 설정 을 추가 합 니 다.
    
    defaultConfig {
          //...
          ndk {
             moduleName "Hello"//     so   
            abiFilters "armeabi", "armeabi-v7a", "x86"//cpu   
          }
        }
    9.프로젝트 rebuild 를 한 후에 우 리 는./build 에서 생 성 된 so 파일 을 볼 수 있 습 니 다.

    10.이제 우 리 는 MainActivity 에서 그 두 개의 native 방법 을 호출 할 수 있다.
    
    static {
        //     build.gradle  moduleName  
        System.loadLibrary("hello");
      }
      TextView textView = (TextView) findViewById(R.id.tv);
      String s = HelloWorld.helloWorld();
      int add = HelloWorld.add(3, 66);
      textView.setText(s+"
    "+" : "+add);
    这里写图片描述
    여기까지.간단 한 jni 프로그램 하나 쓰 면 돼 요.
    총결산
    위 에서 말 한 것 은 안 드 로 이 드 스튜디오 를 이용 하여 작은 jni 프로그램 을 만 드 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기