안드로이드 ndk 컴파일링의 두 가지 방식 (ndk-build과 cmake) 설정

5911 단어 androidNDK
지식점 정리
  • 1.ndk-build

  • 1.ndk-build
    동적 로드 JNI 1.java 레이어 코드:
        static {
            System.loadLibrary("MyLibrary"); // libxxx.so    libMyLibrary.so
        }
    

    2. jni C++(1)main 디렉터리에 jni 디렉터리를 새로 만듭니다.cpp가 최종적으로 생성됩니다.so 라이브러리, apk에 불러오기
            
    

    (2) Android를 생성합니다.mk Application.mk 파일 컴파일 스크립트
    Android.mk
        #  Android.mk     LOCAL_PATH  ,      ,            ,  ,   my-dir            。
        LOCAL_PATH := $(call my-dir)
        
        #CLEAR_VARS            GUN MakeFile        LOCAL_XXX  ,LOCAL_PATH     。               ,            GUN Make       ,          LOCAL_XXX     。
        include $(CLEAR_VARS)
        
        #LOCAL_MODULE          ,       。                  。                 ,    “foo”         “libfoo.so”  。
        LOCAL_MODULE := myjni
        
        #            C  C++    
        LOCAL_SRC_FILES := JNI_C++.cpp
        
        #    GUN Makefile  ,       “include$(CLEAR_VARS)”    LOCALL_XXX     ,                 。         hello-jni.a       libhello-jni.so。
        include $(BUILD_SHARED_LIBRARY)
    

    요약: LOCALPATH는 명령을 호출하는 디렉터리입니다. 어느 디렉터리에서 cmd 명령을 사용하면 경로 주소로 되돌아갑니다. LOCALMODULE 당신이 생성한 파일의 이름은 무엇입니까? 출력한 후에 자동으로 이름의 앞뒤에lib과.so LOCAL_SRC_FILES에서 컴파일할 파일
    Application.mk는 없습니다. 주로 so 호출 라이브러리 이름과 컴파일된 so가 대응하는 CPU 플랫폼이 없으면build에 있습니다.gradle에서 설정합니다. ndk-build이 아닌 시스템으로 컴파일합니다.
        APP_MODULES := MyJni
        APP_ABI := all all     
    

    3. 컴파일 방식 선택: app module 디렉터리에 있는build.gradle에서 라이브러리 파일 이름을 설정합니다.gradle 파일의 defaultConfig 를 찾아서 다음과 같은 내용을 추가합니다.
    //     c++     .so  
    defaultConfig { 
        ...... 
        ndk{ 
            moduleName "JniLibName"  //   so  
            ldLibs "log", "z", "m"  //       ,   log    
            abiFilters "armeabi", "armeabi-v7a", "x86" //    cpu      so 。 
        } 
    }
     
    externalNativeBuild {  
              ndkBuild { path file("src/main/java/jni/Android.mk") 
        } 
    }
    sourceSets {
        main {
            jni.srcDirs('src/main/java/jni')
        }
    }
         so   app/build/intermediates/ndkBuild/debug 
    
    
    
    //            .so    apk  
        sourceSets {
            main {
                jniLibs.srcDirs('.\\libs')             .so      apk  ,   main       JniLibs       ,          
            }
        }
    

    좋은 웹페이지 즐겨찾기