簡體   English   中英

我如何將本機庫放在obj / local上

[英]how do i put my native libraries on 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"

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

因此,很明顯,從牛軋糖或棉花糖到最新的Android api(牛軋糖),谷歌更改了一些安全策略,使得本機庫的使用難以實現。

經過一番研究,我找到了一個答案,說我需要將targetSdkVersion為22(最初為26)。 進行更改后,它已經起作用。 看來這是android api棉花糖及以上版本的錯誤。 我希望他們在即將發布的版本中簡化本機庫的使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM