2015-04-02 82 views
2

我需要做一件简单的事情:在项目中包含.so。这是我现在有:如何在Android Gradle应用程序中包含* .so文件?

# app/build.gradle 
apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "my.app.123" 
     minSdkVersion 14 
     targetSdkVersion 22 

     versionCode 7113 
     versionName "7113" 
    } 


    productFlavors { 
     x86 { 
      ndk { 
       abiFilter "x86", "x86_64" 
      } 
     } 
     arm { 
      ndk { 
       abiFilters "armeabi-v7a", "armeabi" 
      } 
     } 

    } 
} 



dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'io.pristine:libjingle:8871' 
} 

# build.gradle 
all sub-projects/modules. 
buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 

    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.1.0' 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
} 

而且我有这些 “所以” 文件的src/src目录/主/ jniLibs

/arm64-v8a/file1_so.so 
    /armeabi-v7a/file1_so.so 
    /x86/file1_so.so 
    /x86_64/file1_so.so 

然而,当我启动我的应用程序,我得到一个错误这意味着应用程序正在使用之前已经嵌入到其中的“旧”,文件。所以我不确定这些文件中的任何一个都被编译成结果apk

我该怎么做才能将它们包含到输出apk中去呢?

+0

你看到我的答案? – 2015-04-13 21:15:49

+0

@JaredBurrows,是的,但在我看到它之前我已经修复了它,我不记得究竟如何,但更简单。 – 2015-04-13 21:21:34

+0

你能选择一个答案吗? – 2015-04-29 17:26:28

回答

5

这是我如何把我的预建*.so到我的应用程序,只要确保你的*.so都在src/main/libs文件夹:

android { 
    ... 
    sourceSets { 
     //noinspection GroovyAssignabilityCheck 
     main { 
      jni { 
       srcDirs = [] 
      } 

      jniLibs { 
       srcDir 'src/main/libs' 
      } 
     } 
    } 
} 
+0

@AlexanderSupertramp为什么downvote? – 2015-05-12 19:16:43

相关问题