【问题标题】:How to load .so file (native lib) in Android targetSdkVersion 26 in Android Studio如何在 Android Studio 的 Android targetSdkVersion 26 中加载 .so 文件(本机库)
【发布时间】:2023-03-28 17:55:02
【问题描述】:

我正在尝试将so 文件(已编译的本机 C/C++ 代码)加载到我的 Android 应用程序中,但它不起作用(抛出异常并且应用程序停止工作)。

E/AndroidRuntime: 致命异常: Thread-685 进程:com.dsyr.selftoidcardmatcherdemo,PID:11990 java.lang.UnsatisfiedLinkError:

如果我将 targetSdkVersion 更改为 21,那么它运行良好。那么在 targetSdkVersion 26 中无法加载 lib 的原因是什么?在第 26 版中我们应该做哪些额外的事情?

【问题讨论】:

  • " ... but it doesn't work",这是什么意思?
  • @pskink 现在您可以再次查看。这意味着当加载库时,应用程序停止工作。
  • "trowing exception",有什么例外?你的代码是什么?你怎么 loding .so 库?
  • @pskink 你可以再次查看
  • @BahramdunAdil 看看这个behavior changes on Android-26

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


【解决方案1】:

我也遇到了同样的问题,我试试这个 删除所有 64 位库,只保留 32 位库:

在应用程序.mk:

APP_API := armeabi armeabi-v7a x86 mips

应用分级

defaultConfig {
    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
}

gradle.properties

android.useDeprecatedNdk=true

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Native
LOCAL_SRC_FILES := ../cpp/native.cpp // your native c++ file
LOCAL_C_INCLUDES := ../cpp/native-handler.h //if u have header File
LOCAL_LDLIBS := -lz -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)

它将使用 64 位的 32 位库

【讨论】:

  • 谢谢!你能告诉我 Android.mk 和 gradle.properties 文件在哪里吗?而且我的库都是32位的,没有64位的。
猜你喜欢
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2018-07-12
相关资源
最近更新 更多