我在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
}
}
答案 0 :(得分:1)
如果您更改了应用程序-> appModule,则可以尝试
Studio 3.3.0的a bug影响IDE行为,请使用版本3.3.1或better
对于Gradle的CMake支持,应用程序可以三种方式使用它,从最明确的方式开始到“默认”:
假设香草CMake是从CMake.org本地下载的,配置Gradle为
local.properties
中通知gradle cmake目录所在的位置,例如:cmake.dir=/your/vanilla/cmake/dir/like/linux-3.14.0
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。
到目前为止,SDK附带2个cmake版本:3.6.0-rc2和3.10.2。您的sdk管理员会将其下载到内部已知目录(sdk / cmake)中。项目可以选择一个特定的项目来使用。当然,您可以使用上面的“ Vanilla 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本身的功能内部。
当前gradle插件的默认cmake选择是内部3.6.0-rc2版本。因此,如果您未配置“ cmake.dir”和“版本”,则默认为有效。您当然仍然可以使用“ Vanilla CMake”方式进行配置:cmake路径和版本;它有点令人恐惧,但有一个较小的好处:当Studio / Gradle将cmake默认值更改为3.10.2或其他值时,您的应用不会受到影响。我们鼓励应用程序使用最新版本。作为应用程序开发人员,无论构建工具的版本如何,我都可能希望我的应用程序具有固定的行为。从这种意义上讲,显式方式会有所帮助。