android - .so 模块中定义的文件不会成为最终 APK 的一部分

标签 android gradle android-gradle-plugin dependency-management

我已通过转到 File->New->Import Module 添加库.模块自带多个.so文件,并且不知何故它们不是最终 apk 文件的一部分,并且应用程序崩溃并显示以下错误消息。

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file

"/data/app/com.==/base.apk"],nativeLibraryDirectories=[/data/app/com.==/lib/arm, /data/app/com.==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]] couldn't find "libAAA.so"


.so文件在库模块的以下结构中定义。
src ->main ->jniLibs ->arm64-v8a/armeabi/x86/ -> libAA.so/libBB.so
库构建.gradle
dependencies {
    compile 'com.android.support:support-v4:27.1.1'
    compile fileTree(dir: 'libs', include: '*.jar')
    compile fileTree(dir: "$buildDir/native", include: 'native.jar')
}

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs (*.so files)') {
    destinationDir file("$buildDir/native")
    baseName 'native'
    extension 'jar'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}

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

设置
include ':app', ':myLibrary'

应用级别:build.gradle
android {
    compileSdkVersion 27
    defaultConfig {

    ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }
    }

    productFlavors {
    }

    aaptOptions {
        cruncherEnabled = false
    }

  dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
        preDexLibraries false
    }

    lintOptions {
        abortOnError false
    }

}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':myLibrary')
}

repositories {

    flatDir {
        dirs 'libs'
    }
}

我也安装了Native Libs Monitor ,并且不显示 .so库模块中定义的文件。

最佳答案

这是文件夹结构:

src ->main ->jniLibs ->arm64-v8a/armeabi/x86/ -> libAA.so/libBB.so

这是 NDK 部分:
    ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }

-v8a 和 -v7a 是不同的。

关于android - .so 模块中定义的文件不会成为最终 APK 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53044959/

相关文章:

android - 从字符串数组中获取属性名称

gradle - 如何超越 gradle wsimport 任务 JDK 8 访问限制?

java - 安卓工作室错误 : "Invoke-customs are only supported starting with Android O"

android - 如何在 Github 上创建库并通过 Android Studio 中的 gradle 依赖项使用它

android - glsurfaceview 忽略 admob 高度

java - Java中模块的Gradle根目录

android - Android N 预览中的 Java 8

Android 单元测试只有放在 androidTest 文件夹中才能编译

android - Android Gradle-库使用调味包名称调用 Activity

gradle - 使用Gradle完成多级目录项目