2015-02-10 94 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' 

}