– 靶标本地lib不是目录

 2023-01-21    301  

问题描述

我成功地在Android项目中实现了本机支持,但是在更改项目路径(只需将项目放入子目录中)之后,就会在构建应用程序时获得错误.

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

也无法清洁和重建项目.项目以前正在工作.项目路径中也没有空间.

– 靶标本地lib不是目录

感谢您提前的支持.

我正在使用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
    }
}

推荐答案

如果您更改了应用程序 – > AppModule,则可以尝试

  • 从AS
  • 关闭项目

  • 重新打开它

  • 构建>刷新链接的C ++项目(这将”强制” C ++构建以清洁事物)

Studio 3.3.0具有一个错误影响IDE行为,请使用版本android/studio/ide-zips/3.3.1.0/android-studio-ide-182.5264788-linux.zip.zip” 或更好

对于Gradle的Cmake支持,应用程序可以以3种方式使用它,从最明确的方式开始,以”默认”:

香草cmake

假设Vanilla cmake是从cmake.org的本地下载的,

  • 告知gradle cmake目录在local.properties中,例如:cmake.dir=/your/vanilla/cmake/dir/like/linux-3.14.0
  • 将cmake版本传递给app/build.gradle文件中的gradle,例如
android {
        externalNativeBuild {
            version "3.14.0-rc2"
            path '....'  // point to your CMakeLists.txt, relative path to
                         // THIS app/build.gradle file.
        }
    }

带有香草cmake的下侧可能是SDK内部的模块(例如Androidndkmodules.cmake)可能不在您的模块路径中:该项目不使用SDK/Studio内部包装的CMAKE.

明确拿起SDK的CMAKE

截至目前,SDK船2 cmake构建:3.6.0-rc2和3.10.2.您的SDK Manager将将它们下载到内部已知目录(SDK/CMAKE)中.项目可以选择一个特定的使用.当然,您可以使用上述”香草cmake”方式,即应用程序配置所有内容 – 点CMake.dir到您的$ SDK的cmake path(一直到一直到,但不包括,’bin/cmake’).
您也可以忽略cmake.dir配置(Studio在SDK内部提供了此便利性,并由SDK Manager下载),因此您只需要在’app/build.gradle’

中配置CMAKE版本

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

关于Gradle插件功能的2个CMAKE版本之间没有区别,区别在Cmake本身之间的功能之间是2个版本之间的功能.

使用默认值:让工作室决定CMAKE版本

当前Gradle插件的默认CMAKE选择是内部3.6.0-RC2版本.因此,如果您不配置” cmake.dir”和”版本”,则默认值正在操作中.当然,您仍然可以像”香草cmake”方式一样对其进行配置:cmake path and version;它令人恐惧,但是有一个小好处:当工作室/gradle更改cmake默认值为3.10.2或其他时,您的应用不会受到影响.我们确实鼓励应用使用最新版本.作为应用程序开发人员,无论构建工具的版本如何,我也可能喜欢我的应用程序具有固定的行为.从这个意义上说,明确的方式有帮助.

其他注释

  • cmake版本:您将运行’cmake -version’以获取正确的版本编号以配置build.grale,它是 not 嵌入了整个数字SDK的CMAKE目录.
  • 您的顶级cmakelists.txt Location :对Gradle插件的冷漠.实际上,您可以将其与C ++代码一起放在一起,因此,当您与其他平台共享时,它们(C ++构建脚本和源代码)在一个目录内.

以上所述是小编给大家介绍的– 靶标本地lib不是目录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26322.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。