--target native-lib не является каталогом - PullRequest
0 голосов
/ 15 февраля 2019

Я успешно реализую встроенную поддержку в проекте android, но после изменения пути проекта (просто поместите проект в подкаталог) получаю ошибку при сборке приложения.

"app/.externalNativeBuild/cmake/debug/x86 --target native-lib is not a directory" 

Также не удается очистить иперестроить проект.Проект работает префектом раньше.Также нет места в пути проекта.

Спасибо за вашу поддержку заранее.

Я использую Ubuntu 18.04, CMake 3.10.2, Android studio 3.3

Здесьтакое CMakeLists.txt (путь: appModule / CMakeLists.txt)

cmake_minimum_required(VERSION 3.4.1)

add_library( native-lib
         SHARED
         src/main/cpp/native-lib.cpp )

find_library( log-lib
          log )

target_link_libraries( native-lib
               ${log-lib} )

и приложение build.gradele

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
    mavenCentral()
    google()
}

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId 'application_id'
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 6
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        multiDexEnabled true
        externalNativeBuild {
      cmake {
          cppFlags "-std=c++11"
      }
        }
    }
    buildTypes {
        release {
      shrinkResources true
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
      debuggable true
      shrinkResources true
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
      path "CMakeLists.txt"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы изменили app -> appModule, вы можете попробовать

  • закрыть проект из AS
  • , заново открыть его с AS
  • build>Обновить связанный проект C ++ (это «вынудит» сторону сборки C ++ очистить вещи)

В Studio 3.3.0 ошибка , влияющая на поведение IDE, пожалуйста, используйте версию 3.3.1 или лучше

Для поддержки CMake от Gradle приложение может использовать его тремя способами, начиная с наиболее явного способа «по умолчанию»:

VanillaCMake

Предполагается, что Vanilla CMake загружается локально с CMake.org, конфигурируя Gradle с помощью

  • сообщить Gradle, где находится каталог cmake, в local.properties, например: cmake.dir=/your/vanilla/cmake/dir/like/linux-3.14.0
  • передача версии cmake в gradle в вашем файле app/build.gradle, например
    android {
        externalNativeBuild {
            version "3.14.0-rc2"
            path '....'  // point to your CMakeLists.txt, relative path to
                         // THIS app/build.gradle file.
        }
    }

Недостатком Vanilla CMake может быть то, что модули внутри SDK (например, AndroidNdkModules.cmake) могут отсутствовать впуть вашего модуля: проект не использует SDK / Studio внутренне упакованный CMake.

ExpliСильно забрать CMake SDK

На данный момент SDK выпускает 2 сборки cmake: 3.6.0-rc2 и 3.10.2.Ваш менеджер SDK загрузит их во внутренний известный каталог (SDK / cmake).Проект может подобрать конкретный для использования.Конечно, вы могли бы использовать вышеуказанный способ «Vanilla CMake», т. Е. Приложение настраивает все - указывает cmake.dir на путь cmake вашего $ SDK (вплоть до, но не включая «bin / cmake»).
Вы также можете игнорировать конфигурацию cmake.dir (Studio предоставляет это удобство, так как она находится внутри sdk и загружается менеджером sdk), поэтому вам нужно только настроить версию cmake в 'app / build.gradle'

    android {
        externalNativeBuild {
            version "3.10.2"
            path '....'
        }
    }

Нет разницы между 2 версиями cmake относительно функциональности подключаемого модуля gradle, разница заключается в функциональности самого cmake между двумя версиями.

Использовать по умолчанию: пусть Studio решает версию cmake

В настоящее времяПо умолчанию плагин Gradle - это внутренняя версия 3.6.0-RC2.Поэтому, если вы не настроите 'cmake.dir' И 'version', по умолчанию действует.Вы, конечно, все еще можете настроить его, как в случае с «Vanilla CMake»: путь и версия cmake;это немного страшно, но есть небольшое преимущество: когда Studio / Gradle меняет cmake по умолчанию на 3.10.2 или другие, ваше приложение не затрагивается.Мы рекомендуем приложению использовать последние версии.Как разработчику приложения, мне также может понравиться мое приложение с фиксированным поведением независимо от версий инструментов разработки;в этом смысле помогает явный способ.

Дополнительные примечания

  • CMake версия : вы должны запустить 'cmake --version', чтобы получить правильный номер версии длясконфигурируйте build.grale, это NOT полный номер, встроенный в каталог cmake sdk.
  • ваше местоположение CMakeLists.txt верхнего уровня : безразличие к плагину gradle.Практически вы можете поместить его вместе с кодом C ++, поэтому, когда вы делитесь им с другими платформами, они (сценарий сборки c ++ и исходный код) находятся в одном каталоге.
...