如何在Android-gradle应用程序中包含*.so文件?

3
我需要做一件简单的事情:将.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/main/jniLibs 目录下有这些 ".so" 文件:

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

然而,当我启动我的应用程序时,出现了一个错误,这意味着应用程序正在使用已经嵌入其中的“旧”的so文件。因此,我不确定任何这些文件是否都被编译到最终的apk中。
我该怎么做才能确保将它们包含在输出的apk中?

你看到我的回答了吗? - Jared Burrows
@JaredBurrows,是的,但在我看到它之前我已经修复了它,我不记得具体怎么做了,但更简单一些。 - Incerteza
你能选择一个答案吗? - Jared Burrows
@JaredBurrows 是的,我可以选择一个答案。 - Incerteza
1个回答

7

以下是我如何将预构建的*.so库引入我的应用程序中,只需确保您的*.so文件位于src/main/libs文件夹中:

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

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

@AlexanderSupertramp 为什么要点踩? - Jared Burrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接