首页 > 解决方案 > 我如何将我的本机库放在 obj/local 上

问题描述

所以,我已经制作了一个 Android.mk 文件,并且我认为它已经完成了它的工作。我正在使用 .so 文件,但我没有它们的源文件。

这是我的 Android.mk 文件。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := wfdsinkemu
LOCAL_SRC_FILES := lib/armeabi-v7a/libwfdsinkemu.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := gstreamer_android
LOCAL_SRC_FILES := lib/armeabi-v7a/libgstreamer_android.so
include $(PREBUILT_SHARED_LIBRARY)

这是我的 Application.mk 文件。

APP_ABI := all
APP_OPTIM := release
APP_PLATFORM := android-8
APP_STL := c++_shared
APP_BUILD_SCRIPT := jni/Android.mk
APP_MODULES := libgstreamer_android libwfdsinkemu

但我认为本机库仍未复制到 obj/local 文件夹中,因为该应用程序仍会因 UnsatisfiedLinkError 而崩溃。

我已经在使用 ReLinker 它仍然显示此错误。

Fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library "./obj/local/armeabi-v7a/libgstreamer_android.so" not found

顺便说一句,我正在尝试在运行牛轧糖的 android 盒子上进行这项工作。

在将我的 targetSdkVersion 从 26 降级到 22 后,它与我认为使用 AlertDialog 显示的错误一起工作。错误是

Detected problems with app native libraries
(please consult log for detail):
libwfdsinkemu.so: invalid DT_NEEDED entry "./obj/local/armeabi-v7a/libgstreamer_android.so"

标签: androidandroid-ndk

解决方案


你需要告诉 gradle 你已经预建了 NDK 库。

https://developer.android.com/studio/projects/gradle-external-native-builds#jniLibs

android {
    ...
    sourceSets {
        main {
            jniLibs.srcDirs 'imported-lib/src/', 'more-imported-libs/src/'
        }
    }
}

推荐阅读