Android Studio与NDK的集成问题

Android Studio与NDK的集成问题,android,android-studio,android-ndk,android-gradle-plugin,Android,Android Studio,Android Ndk,Android Gradle Plugin,我正在使用AndroidNDK将C/C++代码库构建到一个共享库中。NDK成功地构建了代码并生成了.so文件。然后我想把预构建的共享库(.so文件)放到我的Android Studio项目中。我使用的Android Studio版本是1.0.1。当我按照建议将所有预构建的四个.so文件放在src/main/jniLibs的jniLibs文件夹下,然后在Android Studio中构建整个项目时,构建失败,因为它报告了一些“C++STL头未找到”错误 我认为将NDK与Android Studio

我正在使用AndroidNDK将C/C++代码库构建到一个共享库中。NDK成功地构建了代码并生成了.so文件。然后我想把预构建的共享库(.so文件)放到我的Android Studio项目中。我使用的Android Studio版本是1.0.1。当我按照建议将所有预构建的四个.so文件放在
src/main/jniLibs
的jniLibs文件夹下,然后在Android Studio中构建整个项目时,构建失败,因为它报告了一些“
C++STL头未找到
”错误

我认为将NDK与Android Studio集成就像将.so文件放在jniLibs文件夹下一样简单,但事实并非如此。显然,Android Studio gradle构建系统正在重新编译我的C/C++源代码,尽管我已经使用命令行NDK构建了共享库。由于NDK可以成功构建C/C++代码,Android Studio不应该重新编译代码,而应该使用预先存在的.so文件。这是NDK与Android Studio集成中的已知问题吗?如何让Android Studio使用预构建的.so文件,而不是从自己的文件中重建C/C++代码

以下是$PROJECT/app/build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}
此外,下面是项目根目录$project/build.gradle中的顶级build.gradle文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

}

allprojects {
    repositories {
        jcenter()
    }
}

如何解决这个问题,让AndroidStudio直接使用预构建的共享库,而不是再次重建C/C++源代码?我相信这可能是由于Android Studio中存在NDK的已知问题,或者Android Studio使用gradle脚本中存在一个技巧来避免重新编译本机代码。

Android Studio尚未正式支持NDK,并且在添加预编译的共享.so文件时可能会出现一些小问题。通过在build.gradle文件中添加此项,可以强制Android Studio禁用构建共享库文件

jni.srcDirs = [] //disable automatic ndk-build call

您还可以包括Android.mk和Application.mk文件。下面是一段关于如何在Android Studio上构建NDK应用程序的详细视频

这正是我在Android Studio中使用预构建的.so文件所做的。由于AS目前不支持NDK,因此没有正式的文档记录。因此,使用两个单独的步骤进行构建对我来说是完全合适的,因为Makefile仅用于构建C/C++源文件,Gradle仅用于构建Android应用程序代码。这应该像。。。。对不起,我感觉到了你的痛苦,我正试着做同样的事情。