Android Studio与NDK的集成问题
我正在使用AndroidNDK将C/C++代码库构建到一个共享库中。NDK成功地构建了代码并生成了.so文件。然后我想把预构建的共享库(.so文件)放到我的Android Studio项目中。我使用的Android Studio版本是1.0.1。当我按照建议将所有预构建的四个.so文件放在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
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应用程序代码。这应该像。。。。对不起,我感觉到了你的痛苦,我正试着做同样的事情。