2015-01-14 71 views
2

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

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

这里是$ PROJECT /应用程序/文件的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() 
    } 
} 

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

+0

它应该和....一样容易hhahahah LMAO对不起,我感觉到你的痛苦,我正在尝试做同样的事情。 – Josh

回答

3

Android Studio尚未正式支持NDK,并且在添加预编译的共享.so文件时可能会出现一些故障。您可以通过添加此上的build.gradle文件

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

您还可以包括你的Android.mk和Application.mk文件迫使Android Studio中禁用构建共享库文件。这是一个关于如何在Android Studio上构建NDK应用程序的详细视频https://www.youtube.com/watch?v=0fEtrekNcOo

+0

这正是我在Android Studio中使用预编译的.so文件所做的。由于AS现在不支持NDK,因此这没有正式记录在任何地方。因此,使用两个单独的步骤来构建构建对我来说是完全正确的,因为Makefile仅用于构建C/C++源文件,Gradle仅用于构建Android应用程序代码。 – tonga