Android --目标本机库不是目录

Android --目标本机库不是目录,android,c++,cmake,android-ndk,java-native-interface,Android,C++,Cmake,Android Ndk,Java Native Interface,我成功地在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

我成功地在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)

以及应用程序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
    }
}
如果更改了app-->appModule,则可能会尝试

  • 从AS关闭项目
  • 用AS重新打开它
  • 构建链接C++项目(这将强制C++构建方清理事物)
Studio 3.3.0已影响IDE行为,请使用版本或

对于Gradle的CMake支持,应用程序可以以3种方式使用它,首先是最明确的方式“默认”:

香草蛋糕 假设Vanilla CMake是从CMake.org本地下载的,请使用

  • local.properties
    中通知gradle cmake目录的位置,例如:
    cmake.dir=/your/vanilla/cmake/dir/like/linux-3.14.0
  • app/build.gradle
    文件中将cmake版本传递给gradle,如
Vanilla CMake的缺点可能是SDK中的模块(如AndroidNdkModules.CMake)可能不在您的模块路径中:项目没有使用SDK/Studio内部打包的CMake

显式获取SDK的CMake 截至目前,SDK发布了2个cmake版本:3.6.0-rc2和3.10.2。您的sdk管理器会将它们下载到内部已知目录(sdk/cmake)中。项目可以选择一个特定的项目来使用。当然,您可以使用上述“普通的CMake”方式,即应用程序配置所有内容——将CMake.dir指向$SDK的CMake路径(一直指向,但不包括“bin/CMake”)。
您也可以忽略cmake.dir配置(Studio提供了这种便利,因为它位于sdk内部,由sdk管理器下载),因此您只需要在“app/build.gradle”中配置cmake版本

    android {
        externalNativeBuild {
            version "3.10.2"
            path '....'
        }
    }
关于gradle插件功能,两个cmake版本之间没有区别,区别在于两个版本之间cmake本身的功能

使用默认值:让工作室决定cmake版本 目前gradle插件的默认cmake选择是内部3.6.0-rc2版本。因此,如果您没有配置“cmake.dir”和“version”,则默认设置将生效。当然,您仍然可以将其配置为使用“香草CMake”方式:CMake路径和版本;这有点可怕,但有一个小小的好处:当Studio/Gradle将cmake default更改为3.10.2或其他版本时,您的应用程序不会受到影响。我们鼓励应用程序使用最新版本。作为一名应用程序开发人员,我可能也希望我的应用程序具有固定的行为,而不管构建工具的版本如何;从这个意义上说,明确的方式是有帮助的

附加说明
  • CMake version:您可以运行“CMake--version”来获取配置build.grale的正确版本号,它不是嵌入sdk的CMake目录中的完整版本号
  • 您的顶级CMakeLists.txt位置:对gradle插件漠不关心。实际上,你可以把它和C++代码一起放在一起,所以当你和其他平台共享时,它们(C++的构建脚本和源代码)在一个目录内。
如果更改了app-->appModule,您可以尝试

  • 从AS关闭项目
  • 用AS重新打开它
  • 构建链接C++项目(这将强制C++构建方清理事物)
Studio 3.3.0已影响IDE行为,请使用版本或

对于Gradle的CMake支持,应用程序可以以3种方式使用它,首先是最明确的方式“默认”:

香草蛋糕 假设Vanilla CMake是从CMake.org本地下载的,请使用

  • local.properties
    中通知gradle cmake目录的位置,例如:
    cmake.dir=/your/vanilla/cmake/dir/like/linux-3.14.0
  • app/build.gradle
    文件中将cmake版本传递给gradle,如
Vanilla CMake的缺点可能是SDK中的模块(如AndroidNdkModules.CMake)可能不在您的模块路径中:项目没有使用SDK/Studio内部打包的CMake

显式获取SDK的CMake 截至目前,SDK发布了2个cmake版本:3.6.0-rc2和3.10.2。您的sdk管理器会将它们下载到内部已知目录(sdk/cmake)中。项目可以选择一个特定的项目来使用。当然,您可以使用上述“普通的CMake”方式,即应用程序配置所有内容——将CMake.dir指向$SDK的CMake路径(一直指向,但不包括“bin/CMake”)。
您也可以忽略cmake.dir配置(Studio提供了这种便利,因为它位于sdk内部,由sdk管理器下载),因此您只需要在“app/build.gradle”中配置cmake版本

    android {
        externalNativeBuild {
            version "3.10.2"
            path '....'
        }
    }
关于gradle插件功能,两个cmake版本之间没有区别,区别在于两个版本之间cmake本身的功能

使用默认值:让工作室决定cmake版本 目前gradle插件的默认cmake选择是内部3.6.0-rc2版本。因此,如果您没有配置“cmake.dir”和“version”,则默认设置将生效。当然,您仍然可以将其配置为使用“香草CMake”方式:CMake路径和版本;这有点可怕,但有一个小小的好处:当Studio/Gradle将cmake default更改为3.10.2或其他版本时,您的应用程序不会受到影响。我们鼓励应用程序使用最新版本。作为一名应用程序开发人员,我可能也希望我的应用程序具有固定的行为,而不管构建工具的版本如何;从这个意义上说,明确的方式是有帮助的

附加说明
  • android { externalNativeBuild { version "3.10.2" path '....' } }