CMAKE не подчиняется флагам из gradle для сборки NDK на Android - PullRequest
0 голосов
/ 24 января 2019

У меня есть проект Android NDK, который я пытаюсь создать с помощью Gradle + CMake .

build.gradle:

apply plugin: 'com.android.library'

allprojects {
    repositories {
        jcenter()
        google()
    }
}

android {
    compileSdkVersion 27
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DANDROID_ABI=armeabi-v7a",
                          "-DANDROID_PLATFORM=android-16",
                          "-DANDROID_STL=gnustl_static",
                          "-DANDROID_CPP_FEATURES=rtti exceptions",
                          "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=libs"
            }
        }
    }

    buildTypes {
        release {
            ndk {
                abiFilters "armeabi-v7a"
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            ndk {
                abiFilters "armeabi-v7a"
            }
        }
    }
    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

Вывод команды CMAKE:

Executable : /Users/ssk/Library/Android/sdk/cmake/3.6.3155560/bin/cmake
arguments : 
-H/Users/ssk/MyProject
-B/Users/ssk/MyProject/.externalNativeBuild/cmake/debug/armeabi-v7a
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-16
------> -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/ssk/MyProject/build/intermediates/cmake/debug/obj/armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle
-DCMAKE_CXX_FLAGS=-std=c++11
-DCMAKE_TOOLCHAIN_FILE=/Users/ssk/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake
-DCMAKE_MAKE_PROGRAM=/Users/ssk/Library/Android/sdk/cmake/3.6.3155560/bin/ninja
-GAndroid Gradle - Ninja
-DANDROID_STL=gnustl_static
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-16
-DANDROID_CPP_FEATURES=rtti exceptions
------> -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=libs
jvmArgs : 

Я пытаюсь настроитьвыходной каталог, используя DCMAKE_LIBRARY_OUTPUT_DIRECTORY, но он не подчиняется.

Gradle ставит префикс по умолчанию перед моей опцией, как выделено ( ------> в выводе команды cmake ).

Вопрос:

Как настроить выходной каталог?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Ниже приведен фрагмент конфигурации вашего выходного каталога:

Для статического каталога вывода lib, попробуйте ниже:

# copy out the static lib binary 
set_target_properties(${STATIC_LIBRARY_NAME}
                      PROPERTIES
                      ARCHIVE_OUTPUT_DIRECTORY "libs/${ANDROID_ABI}")

Для shared libвыходной каталог, попробуйте ниже:

# copy out the shared lib binary 
set_target_properties(${SHARED_LIBRARY_NAME}
                      PROPERTIES
                      LIBRARY_OUTPUT_DIRECTORY "libs/${ANDROID_ABI}")

Пояснение :

ANDROID_ABI - это переменная, определяющая ABI Android, например, armeabi-v7a

Ссылка на определение переменных CMake:

Переменная пути Android NDK для команды "strip" в цепочке инструментов сборки CMake

0 голосов
/ 24 января 2019

Возможно, вам нужно установить параметр buildStagingDirectory . В следующей ссылке вы найдете, как управлять путями для CMake в Gradle:

CMakeOptions

И как примечание, не связанное с вопросом. В вашем скрипте gradle кажется, что вы все еще используете gnustl_static , который больше не поддерживается и будет удален в следующих версиях NDK. Вы должны переключиться на c ++ _ static или c ++ _ shared . Учтите, что gcc устарело, и вы должны использовать clang . Следующий пример:

externalNativeBuild {
            cmake {
                arguments "-DANDROID_PLATFORM=android-16", "-DANDROID_STL=c++_static", "-DANDROID_TOOLCHAIN=clang"
                abiFilters "armeabi-v7a", "arm64-v8a", "x86"
            }
        }
...