android - 使用 Android studio 进行 Jni 构建错误 : Library '/system/lib/libhoudini.so' not found

标签 android c android-studio java-native-interface

由于某种原因,我必须从 C 生成一些文本。因此,我为此目的编写了一些 C 方法。我使用 Android studio 构建 Jni,它似乎与我的 5.1.0 Genymotion 模拟器配合得很好。 但是当我在 4.1.1 模拟器上运行构建时,我遇到了这个问题:

Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: load_library[1098]: Library '/system/lib/libhoudini.so' not found
at java.lang.Runtime.loadLibrary(Runtime.java:370)
at java.lang.System.loadLibrary(System.java:535)

经过研究。也许问题是来自构建 jni 问题,我还没有为 x86 构建 *.so 文件。但是当我反编译apk时,似乎*.so文件已经在“x86”文件夹中。

enter image description here

这是我从应用程序的构建文件夹中获取的 android.mk 文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := ofx
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_SRC_FILES := \
    xxx.../app/src/main/jni/key/Base64Util.c \
    xxx.../app/src/main/jni/key/hidingutil.c \

LOCAL_C_INCLUDES += xxx.../app/src/main/jni
LOCAL_C_INCLUDES += xxx.../app/src/Beneficiary/jni
LOCAL_C_INCLUDES += xxx.../app/src/debug/jni
LOCAL_C_INCLUDES += xxx.../app/src/BeneficiaryDebug/jni

include $(BUILD_SHARED_LIBRARY)

请帮助我确保构建适用于所有设备,我们将非常感激。我没有太多设备可供测试。 谢谢。

最佳答案

在您的 Android.mk 文件中,我没有看到您将任何预构建的库设置为资源。这可能有助于纳入。

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := module_name 
LOCAL_SRC_FILES := $(LOCAL_PATH)/prebuilt_lib_name.so
include $(PREBUILT_SHARED_LIBRARY)

这里有一个 Bash 脚本,可以帮助您在 APP_ABI 区域中添加 ABI 平台并根据需要更改文件路径。无需完全重新编译整个过程,但这将自动化您的 native *.so 构建,您可以使用 gradle 来完成其余的工作:

ndk-build APP_ABI=armeabi-v7a NDK_LOG=true

if [ $? = 0 ]; then
    rm -rf build/native-libs/

    cd libs
    for i in *

    #rm -v */libofx.so

    for arch in *
    do
        builddir=../build/native-libs/$arch
        mkdir -p $builddir
        cp -v $arch/*.so  $builddir
    done
fi

关于android - 使用 Android studio 进行 Jni 构建错误 : Library '/system/lib/libhoudini.so' not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34939400/

相关文章:

c - 这些类型的变量初始化有一些性能差异吗?

android - Finishactivity 没有完成 Activity ?

android - 在android中使用外部字体

java - 从 Activity 调用服务但在 logcat 中未获取任何内容?

c++ - 使用 Microsoft Visual Studio 2010 IDE 进行精确的库链接顺序控制

c - C语言删除文件中的一行

android - Lint 字段从未分配给 Butterknife

java - 从类(xml解析类)检索String到当前类

java - 没有虚方法 getLayoutInflater

java - 如何在 firebase 数据库中获取嵌套键