我正试图把我的.so库包括在另一个目录中。编译我的项目很好。但当我运行它时
java.lang.Unsatisfiedlinkerror:dalvik.system.pathclassloader[dexpathlist[[zip file]/data/app/com.company.gimikapp-2/base.apk“],nativelibrarydirectories=[/data/app/com.company.gimikapp-2/lib/arm,/vendor/lib,/system/lib]]]找不到“libtheprefitlib.so”
常见的解决方案如下:

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

尝试二者
jniLibs.srcDirs = ['C:\\svn\\sys_libs']


jniLibs.srcDirs = ['C:/svn/sys_libs']

如何将它指向android项目之外的另一个目录?
这是我的cmakelist.txt:
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
            SHARED
            src/main/cpp/source/native-lib.cpp )
add_library(theprebuiltlib SHARED IMPORTED)
set_target_properties(theprebuiltlib PROPERTIES IMPORTED_LOCATION
            C:/svn/sys_libs/libtheprebuiltlib.so)
target_include_directories(
            native-lib PRIVATE
            src/main/cpp/source/
            C:/svn/sys_includes/)
find_library( log-lib
            log)
target_link_libraries( native-lib
            theprebuiltlib
            ${log-lib})

这是我的JNI的毕业设置:
android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
            }
            ndk {
                abiFilters 'armeabi'
            }
        }
        ...
    }
    ...
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['C:/svn/sys_libs']
        }
    }
}

最佳答案

显然,你已经安装了ndk r17和android插件v.3.1.0或更高版本(我们在build.gradle的发布片段中没有看到这一点)。
但您将abifilters设置为armeabi,它已被删除。您应该将其设置为armeabi-v7a,并确保libtheprebuiltlib.so也是为此abi构建的,或者您可以download an older version of NDK和in build.gradle dependencies set

classpath 'com.android.tools.build:gradle:3.0.1'

如果显式设置最新的插件句柄,则可以强制它:
android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi'
        }
    }
}

(在您的脚本中,它位于android.defaultconfig.externalnativebuild.ndk下,因此不起作用)。
你的建筑有一个错误,格雷德,应该是
android {
  sourceSets {
     main {
       jniLibs.srcDir 'C:/svn/sys_libs'
     }
   }
}

当你有文件armeabi时。但这并不能解释为什么cmake不能像预期的那样工作。

07-24 09:46
查看更多