Gradle 在设备上找不到但存在于 apk 中的本机库
Gradle native libraries not found on device but present in apk
我的应用程序使用 Here SDK and Twilio SDK。两者都使用本机库(这里的 SDK 具有从 /libs 和 /jniLibs 文件夹本地插入的本机库,Twilio SDK 从 jCenter 插入)。但是在 Android 5.1 Here SDK 抛出异常 "MISSING LIBRARIES: libMAPSJNI.so" 尽管这个库出现在结果 APK 中。我打开了我的程序安装在设备上的文件夹,并在两种情况下比较了内容:有或没有 Twilio SDK。不同之处在于当连接 Twilio API 文件夹 /lib 是一个文件,并且由于显而易见的原因,加载程序无法看到它里面的本地库需要初始化 Here SDK。如果删除 Twilio gradle 依赖项,程序集将正常进行。可能是什么原因以及如何解决?如果需要,我可以用这些库附加测试项目
您需要像这样修改您的build.gradle:
android {
(...)
splits {
abi {
enable true
reset()
include 'armeabi-v7a'
universalApk false
}
}
(...)
}
可能是因为Twilio SDK支持x86,而HERE SDK目前不支持。
通过定义一个 splits
块你可以告诉 Gradle 创建 APKs for each listed ABI:
include "armeabi", "armeabi-v7a", "x86", "mips"
或者,您可以通过添加以下过滤器将所有需要的 ABI 包含到 one APK 中:
android {
(...)
defaultConfig {
(...)
ndk {
// allow only 32bit *.so libs
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
这两种方法都将排除可能与 32 位 HERE SDK 冲突的 64 位功能,但后者将通过单个 APK 支持更多设备。
一些库,例如新的 Android Room Persistence 库,添加了 32 位版本以及两个 64 位 ABI 版本 arm64-v8a 和 x86_64。由于 HERE SDK 目前仅提供 32 位库,因此排除 64 位库变体应该是安全的。另一方面,预计 64 位设备可以优雅地处理 32 位库。
我的应用程序使用 Here SDK and Twilio SDK。两者都使用本机库(这里的 SDK 具有从 /libs 和 /jniLibs 文件夹本地插入的本机库,Twilio SDK 从 jCenter 插入)。但是在 Android 5.1 Here SDK 抛出异常 "MISSING LIBRARIES: libMAPSJNI.so" 尽管这个库出现在结果 APK 中。我打开了我的程序安装在设备上的文件夹,并在两种情况下比较了内容:有或没有 Twilio SDK。不同之处在于当连接 Twilio API 文件夹 /lib 是一个文件,并且由于显而易见的原因,加载程序无法看到它里面的本地库需要初始化 Here SDK。如果删除 Twilio gradle 依赖项,程序集将正常进行。可能是什么原因以及如何解决?如果需要,我可以用这些库附加测试项目
您需要像这样修改您的build.gradle:
android {
(...)
splits {
abi {
enable true
reset()
include 'armeabi-v7a'
universalApk false
}
}
(...)
}
可能是因为Twilio SDK支持x86,而HERE SDK目前不支持。
通过定义一个 splits
块你可以告诉 Gradle 创建 APKs for each listed ABI:
include "armeabi", "armeabi-v7a", "x86", "mips"
或者,您可以通过添加以下过滤器将所有需要的 ABI 包含到 one APK 中:
android {
(...)
defaultConfig {
(...)
ndk {
// allow only 32bit *.so libs
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
这两种方法都将排除可能与 32 位 HERE SDK 冲突的 64 位功能,但后者将通过单个 APK 支持更多设备。
一些库,例如新的 Android Room Persistence 库,添加了 32 位版本以及两个 64 位 ABI 版本 arm64-v8a 和 x86_64。由于 HERE SDK 目前仅提供 32 位库,因此排除 64 位库变体应该是安全的。另一方面,预计 64 位设备可以优雅地处理 32 位库。