当尝试与 PDFTron(即 PDFNet Android SDK)集成时,我遇到了一个奇怪的错误:
UnsatisfiedLinkError:无法加载 PDFNetC:findLibrary 返回 null。预期为armv7a,发现cpu_info:abi:armeabi-v7a
我已经检查过了link https://stackoverflow.com/questions/14396898/how-to-use-existing-so-file-in-android-application/14578718.
PDFNet Android SDK 提供的本机库很可能未正确包含在我的项目中。
在我下载的包的 lib 文件夹中,有本机库和 java 库,两者都需要包含到我的项目中。
在主文件夹中创建一个名为 jniLibs 的文件夹,并将所有 .so (具有相应的文件夹结构)放入 jniLibs 文件夹中,即:
这将允许 Android Studio 自动识别本机库路径。
我还指定了产品风味来过滤要使用的 .so,例如:
productFlavors {
armv7a {
ndk {
abiFilters "armeabi-v7a"
}
}
arm {
ndk {
abiFilters "armeabi"
}
}
x86 {
ndk {
abiFilters "x86"
}
}
armv8 {
ndk {
abiFilters "arm64-v8a"
}
}
x86_64 {
ndk {
abiFilters "x86_64"
}
}
fat {
ndk {
abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64"
}
}
}
然后我在项目的 build.gradle 文件中指定了 jniLibs 目录,即:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
svg.srcDir 'src/main/svg'
}
}