我刚刚从 NDK 12.x 更新到 13.x,现在遇到以下崩溃:
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy4" referenced by "/data/app/com.app.myapp-1/lib/arm/libJniBitmapOperationsLibrary.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:372)
at java.lang.System.loadLibrary(System.java:1076)
at com.jni.bitmap_operations.JniBitmapHolder.<clinit>(JniBitmapHolder.java:11)
<...>
我正在使用的库可用here https://github.com/AndroidDeveloperLB/AndroidJniBitmapOperations.
我见过一些类似的问题cannot locate symbol
所有的建议都是围绕设置APP_PLATFORM
in the Application.mk
文件。我的 JNI 库是 SDK 的一部分,所以我没有Application.mk
仅文件Android.mk
。另外我的 target/min sdk 最近没有改变。我的Android.mk
文件是从库中复制的,如下所示:
LOCAL_PATH := $(call my-dir)
#bitmap operations module
include $(CLEAR_VARS)
LOCAL_MODULE := JniBitmapOperationsLibrary
LOCAL_SRC_FILES := JniBitmapOperationsLibrary.cpp
LOCAL_LDLIBS := -llog
LOCAL_LDFLAGS += -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
APP_OPTIM := debug
LOCAL_CFLAGS := -g
好吧,我想我已经在以下的帮助下找到了答案Android Studio 中的 JNI 和 Gradle https://stackoverflow.com/questions/21096819/jni-and-gradle-in-android-studio and Android NDK:获取 java.lang.UnsatisfiedLinkError:dlopen 失败:无法找到“libffmpeg.so”引用的符号“signal” https://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca?rq=1
我的解决方案是执行以下操作:
1) add Application.mk
文件包含以下内容:
APP_CFLAGS += -I$(LOCAL_PATH)
APP_ABI := all
APP_PLATFORM := android-19
2)更新我的build.gradle
指着我的Application.mk
显然 gradle 创建了自己的版本Android.mk
并默认为与您相同的 api 级别compileSdkVersion
not minSdkVersion
.
With com.android.tools.build:gradle:2.2.0
这可以通过添加以下内容来实现(有关更多详细信息,请查看上面提到的 JNI SO 帖子):
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Application.mk'
}
}
另外,您可能不需要步骤一和步骤二,但我已经在这方面花费了太多时间来验证
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)