Android NDK의 CMake를 사용하여 각 ProductFlavor에 대한 로컬 코드 구분

4860 단어 Androidndktech

TL;DR


build.gradle의 제품Flavors로 모든 Flavor에 파라미터를 주고 CMakeLists로 분기합니다.

이른바 안드로이드 NDK


Android NDK는 C/C++(로컬 코드)를 Android 응용 프로그램에 포함할 수 있는 도구입니다.
리셋 처리에 사용되며, 로컬 코드에 은밀한 정보를 기술하고, 컴파일할 때 볼 수 없습니다.

이른바 CMake


이것은 컴파일러에 의존하지 않는 구축 자동화 도구다.이것은android가 말하는gradle이지... (anroid 자체는 컴파일러에 의존하지 않음) 구축 도구라는 점에서 같다)

ProductFlavor 소개


ProductFlavor
원본 파일을 어렵지 않게 변경하려면 환경 종속 코드(API endpoint 또는 다른 환경 변수)를 사용합니다.

일반적인 자바 코드나kotlin 코드를 바꿀 때


포장을 바꾸어 실현할 수 있다.
예를 들어, 다음과 같이 ProductFlavors를 정의합니다.
예제 app/buildgradle
android {
    ...
    defaultConfig {...}
    buildTypes {
        debug{...}
        release{...}
    }
    // ココでProductFlavorの種類を定義する
    flavorDimensions "flavor"
    productFlavors {
        "flavor1" {
        }
        "flavor2" {
        }
    }
}
위에서 설명한 바와 같이src/flavor1/ src/flavor2/아래에서 자바,kotlin 코드를 설정하면build에서 지정한 제품 Flavor로 코드를 자동으로 바꿉니다.

안드로이드 NDK 코드를 교체하면 어떻게 합니까


위에서 말한 대로 원본 파일을 바꿀 수 있을 줄 알았는데 안 될 것 같아요.
Cmake를 사용할 때 app/build을 사용합니다.gradle에서 아래와 같습니다.txt로 가는 경로가 기록되어 있지만 Cmake는 제품 Flavor를 눈치채지 못했기 때문에 상기 방법으로 원본 코드를 바꿀 수 없습니다. (방법이 있을 수 있습니다.)
android {
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
}
그럼 Cmake를 할 때 매개 변수, CmakeLists를 줍니다.txt 내에서 나누세요!됐어.
각 ProductFlavor에서 Cmake를 정의하는 부분에 인수를 추가합니다.
android {
    ...
    flavorDimensions "flavor"
    productFlavors {
        "flavor1" {
            externalNativeBuild {
                cmake {
                    // ココ!
                    arguments += "-DFLAVOR=FLAVOR1"
                }
            }
        }
        "flavor2" {
            externalNativeBuild {
                cmake {
                    // ココ!
                    arguments += "-DFLAVOR=FLAVOR2"
                }
            }
        }
    }
}
에 매개 변수-DFLAVOR를 추가합니다.
그리고 CmakeLists.txt에서 읽은 cpp 파일을 바꾸는 지점을 만듭니다.
if (${FLAVOR} STREQUAL "FLAVOR1")
    message("adding the source code for Flavor1...")
    add_library( # Sets the name of the library.
            hello-lib

            SHARED

            // 差し込んでるcppファイルが違う!       
            ${CMAKE_CURRENT_SOURCE_DIR}/flavor1/hello-lib.cpp)
elseif (${FLAVOR} STREQUAL "FLAVOR2")
    message("adding the source code for Flavor2...")
    add_library( # Sets the name of the library.
            hello-lib

            SHARED

            // 差し込んでるcppファイルが違う!
            ${CMAKE_CURRENT_SOURCE_DIR}/flavor2/hello-lib.cpp)
endif ()
이렇게 하면 ndk에서 사용하는 cpp 파일을 모든ProductFlavor로 바꿀 수 있습니다!
샘플 항목은 GiitHub에 놓을 테니 참고하세요.
NdkFlavor

좋은 웹페이지 즐겨찾기