2015-02-10 49 views
0

我想在我的Android应用程序中使用共享库libavcodec-56.so,并且找不到方法。我正在使用Gradle 2.2.1和Android Studio 1.0。我到目前为止所做的是:使用Gradle 2.2.1加载共享库

- 我使用NDK工具链从源代码构建libavcodec-56.so。

-I libavcodec-56.so复制到的src/main/jniLibs/armeabi

- 我能够在项目中创建.c文件,并使用private native void nameOfTheNativeMethod()

的Java文件交流 - 我可以加载一些外部库,例如ldLibs "m"

但是,如果我尝试使用#include <libavcodec/avcodec.h>我得到的错误

No such file or directory 
    #include <libavcodec/avcodec.h> 

我的gradle文件看起来像:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
     ndk { 
      moduleName "ffmpeg" 
      cFlags "-std=c99" 
      ldLibs "log", "m" 
     } 
    } 

    sourceSets.main { 
     jni.srcDirs = ["src/main/jni"]; 
     //jniLibs.srcDirs = ['src/main/jniLibs']; 
    } 


    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' 

} 

任何想法?

在此先感谢

回答

1

当前NDK支持与gradle这个Android插件是不完整的,现在已经过时。本地本地库之间不能有本地依赖关系。

与gradle这个唯一的解决办法,现在是直接使用与自己的Makefile NDK,建立生成所有的库,这样的的build.gradle文件:

import org.apache.tools.ant.taskdefs.condition.Os 

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
    } 

    sourceSets.main { 
     jni.srcDirs = [] //disable automatic ndk-build call 
     jniLibs.srcDir 'src/main/libs' //integrate your libs from libs instead of jniLibs 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    // call regular ndk-build(.cmd) script from app directory 
    task ndkBuild(type: Exec) { 
     if (Os.isFamily(Os.FAMILY_WINDOWS)) { 
      commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath 
     } else { 
      commandLine 'ndk-build', '-C', file('src/main').absolutePath 
     } 
    } 

    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn ndkBuild 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:21.0.3' 

}