当CMAKE_BUILD_TYPE设置为除调试以外的任何设置时,无法加载libnative-activity.so

时间:2019-01-23 09:11:39

标签: android cmake android-ndk

将NDK更新到版本19后,我的应用程序抛出UnsatisfiedLinkError,并显示以下消息:“无法在开始时加载本机库"/data/app/com.company.appname-SkXFrxADQ610MNjJr7Ak3A==/lib/arm64/libnative-activity.so": null",然后终止。

任何人都知道导致此错误的原因以及如何解决该错误?

注释:

1)将CMAKE_BUILD_TYPE设置为Debug时,无论优化级别(-O)或DEBUG_MODE设置如何,一切正常。

2)这不是在NDK 19之前发生的

3)即使调用已被弃用且不必要,我也会调用app_dummy()

4)该应用程序使用android_native_app_glue.h / .c,即完全没有Java。

5)异常libname是“ native-activity”,而funcname是“ ANativeActivity_onCreate”

更新:

NDK r19 revision history谷歌说ndk-depends has been removed. We believe that ReLinker is a better solution to native library loading issues on old Android versions.中,我认为这是相关的,猜测ndk-depends保留了本机活动,但是由于本机胶水应用程序不包含任何Java代码,我该如何应用< em> ReLinker 来自代码?

1 个答案:

答案 0 :(得分:1)

fread_unlocked直到Android P才可用。您不能在minSdkVersion低于28的应用程序中使用该功能。

除非您给CMake输入了不正确的ANDROID_PLATFORM,否则不应编译该符号,因为该符号将不可链接。如果要使用gradle和externalNativeBuild构建应用程序,则gradle将根据minSdkVersion为您配置此应用。如果不是这样,您可能应该切换到使用它,因为它提供了这些保护措施。