안드로이드 NDK에서 ccache 활성화

9020 단어 Android

개시하다


NDK 구축 시 ccache를 도입하여 구축 시간을 단축합니다.
ccache는 캐시 컴파일을 할 때 생성되는 대상의 소프트웨어입니다.자세한 설명은 본가와 위키백과를 참조하세요.
  • ccache
  • http://ccache.samba.org/
  • wikipedia
  • http://ja.wikipedia.org/wiki/Ccache
  • 설정


    ccache 설치


    Ubuntu

    
    % sudo apt-get install ccache
    

    MacOS(homebrew)

    
    % brew install ccache
    

    ccache의 캐시 크기 최대값 지정하기


    크기가 큰 것이 좋으므로 총 캐시 용량을 20GB로 지정합니다.
    % ccache -M 20G
    

    환경 변수 설정


    사용 중인 셸의 점 파일~/.bashrc 또는 ~/.zshrc에 환경 변수를 설정하십시오.
    # ccache
    export USE_CCACHE=1
    export NDK_CCACHE=/usr/local/bin/ccache # Ubuntu なら /usr/bin/ccache
    export CCACHE_CPP2=yes
    export CCACHE_COMPILERCHECK=content
    
    설정을 반영합니다.
    % source ~/.bashrc (or ~/.zshrc)
    

    절차.


    환경 변수USE_CCACHENDK_CCACHE를 설정하면 ndk-build는ccache를 사용합니다.
    평소와 같이 ndk-build 명령을 실행할 때 캐시됩니다.
    
    % cd /path/to/android_project/jni
    % ndk-build
    

    사용 안 함

    USE_CCACHENDK_CCACHEunset이면ccache가 무효화될 수 있습니다.
    % unset USE_CCACHE
    % unset NDK_CCACHE
    % ndk-build
    
    다시 활성화하려면 source 명령을 사용하여 점 파일을 다시 읽거나 USE-를 사용합니다.CCACHE, NDK_CCACHE 환경 변수를 다시 설정하십시오.

    캐시 지우기


    구축에 실패하거나 캐시 보안이 잘못되면ccache 캐시를 지우십시오.
    ccache -cC
    

    유효한 Android NDK CMak 방법


    최근 몇 년 동안 구축 시스템은 ant에서 gradle로, IDE는 Eclipse에서 안드로이드 스튜디오로, NDK 구축도 ndk-build에서 CMake로 옮겨졌다.
    CMake 구조에서 NDK_CCACHE 환경 변수 설정만 사용하면ccache를 사용할 수 없습니다.
    파일럿 오류가 발생한 후 NDK CMake 빌드에서 ccache가 활성화되어 설정 방법에 대해 설명합니다.
    (보다 효율적인 설정 방법이 있으면 알려주세요

    CMake


    NDKCMakeList.txt에 ccache 설정을 삽입합니다.
    CMakeLists.txt
    
    option(ENABLE_CCACHE "Enable ccache?" OFF)
    
    # ccache
    if (NOT $ENV{NDK_CCACHE} EQUAL "")
      set(CCACHE_EXE $ENV{NDK_CCACHE})
      if(ENABLE_CCACHE)
        if(CMAKE_C_COMPILER_LAUNCHER)
          set(CMAKE_C_COMPILER_LAUNCHER "${CMAKE_C_COMPILER_LAUNCHER}" "${CCACHE_EXE}")
        else()
          set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_EXE}")
        endif()
        if(CMAKE_CXX_COMPILER_LAUNCHER)
          set(CMAKE_CXX_COMPILER_LAUNCHER "${CMAKE_CXX_COMPILER_LAUNCHER}" "${CCACHE_EXE}")
        else()
          set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_EXE}")
        endif()
      endif()
    endif()
    
    NDK_CCACHE 환경 변수의 정의CMAKE_C_COMPILER_LAUNCHERCMAKE_CXX_COMPILER_LAUNCHER 설정NDK_CCACHE의 값(ccache의 전체 경로)이 있으면ndk-build와ccache의 설정이 공존합니다.그렇지 않으면 find_program(CCACHE_EXE ccache)에 ccache 명령이 있을 때 더 일반적인 설정을 할 수 있습니다)NDK_CCACHE 환경 변수 성명에 영향을 주지 않고ccache의 유효 무효를 전환할 수 있는 옵션을 추가합니다ENABLE_CCACHE.

    app/build.gradle


    app/build.gradle
    def ndkCcache = System.getenv("NDK_CCACHE")
    if (ndkCcache == null) {
        Properties properties = new Properties()
        properties.load(project.rootProject.file('local.properties').newDataInputStream())
        ndkCcache = properties.getProperty('ccache.path')
        environment("NDK_CCACHE", ndkCcache)
    }
    
    android {
        ...
        buildTypes {
            release {
                ...
            }
    
            debug {
                ...
                externalNativeBuild {
                    cmake {
                        arguments '-DENABLE_CCACHE=ON'
                    }
                }
            }
        }
    }
    
    첫 번째 처리는 NDK_CCACHE 환경 변수가 정의되지 않았을 때local.propertiesccache.path 값, 정의NDK_CCACHE 환경 변수의 처리이다.(안드로이드 스튜디오에서gradle을 실행하면 ~/.bashrc와 ~/.zshrc의 환경 변수를 얻을 수 없기 때문에 이러한 처리를 실시했다.)local.properties의 샘플은 다음과 같다.
    local.properties
    ...
    ccache.path=/usr/local/bin/ccache
    
    Debug를 구축할 때만ccache를 유효하게 하기 위해서 android.buildTypes.debug.externalNativeBuild.cmake.arguments 에서 -DENABLE_CCACHE=ON 설정했습니다.Release 빌딩에서ccache를 사용할 때 android.buildTypes.release.externalNativeBuild.cmake.arguments-DENABLE_CCACHE=ON로 설정하십시오.

    build


    그럼 여기서 끝내도록 하겠습니다.즉시 구축해서 ccache가 유효한지 확인하십시오.
    ./gradlew clean assembleDebug
    ./gradlew clean assembleDebug # キャッシュ有効かの確認
    ccache -s
    
    두 번째./gradlew가 빠르거나ccache -s 고속 캐시hit의 통계가 나오면ccache가 유효합니다.
    축하합니다.

    좋은 웹페이지 즐겨찾기