我如何将本机库放在obj / local上

时间:2018-10-08 07:33:27

标签: android android-ndk

因此,我已经制作了一个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"

2 个答案:

答案 0 :(得分:1)

您需要告诉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/'
        }
    }
}

答案 1 :(得分:-1)

因此,很明显,从牛轧糖或棉花糖到最新的Android api(牛轧糖),谷歌更改了一些安全策略,使得本机库的使用难以实现。

经过一番研究,我找到了一个答案,说我需要将targetSdkVersion设置为22(最初为26)。进行更改后,它已经起作用。看来这是android api棉花糖及以上版本的错误。我希望他们可以在即将发布的版本中简化本机库的使用。