表示Android.mk所在目录

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :=hello #因为链接第三方库,此时源文件为so #LOCAL_SRC_FILES:=prebuild/arm64-v8a/libSKFInterface.so LOCAL_SRC_FILES:=prebuild/arm64-v8a/libhello.so #链接时为预编译 include $(PREBUILT_SHARED_LIBRARY)

#设置库文件的输入目录 #输出目录 ../jniLibs/ #源目录 $(TARGET_ARCH_ABI) NDK_APP_DST_DIR=../jniLibs/$(TARGET_ARCH_ABI) #CLEAR_VARS变量指向特殊 GNU Makefile,用于清除部分LOCAL_变量 include $(CLEAR_VARS)

#需要的系统库 #LOCAL_LDLIBS := -lz -lstdc++ -llog -lm #模块名称 LOCAL_MODULE := ndkbuild #构建系统用于生成模块的源文件列表 LOCAL_SRC_FILES := com_example_hello_HelloWorld.cpp #LOCAL_SRC_FILES += safecardapi.cpp #链接的第三方库 LOCAL_SHARED_LIBRARIES:= hello #BUILD_SHARED_LIBRARY 表示.so动态库 #BUILD_STATIC_LIBRARY 表示.a静态库 include $(BUILD_SHARED_LIBRARY)

这段代码是一个 Android NDK 的 makefile 文件,用于编译生成一个动态库 (.so 文件)。

首先,使用 LOCAL_PATH := $(call my-dir) 指定了当前目录为 Android.mk 所在目录。

然后,通过 include $(CLEAR_VARS)include $(PREBUILT_SHARED_LIBRARY),清除变量并包含预构建的共享库。

接着,设置了库文件的输入目录为 ../jniLibs/$(TARGET_ARCH_ABI),其中 $(TARGET_ARCH_ABI) 是一个 NDK 的环境变量,表示目标架构。

然后,使用 include $(CLEAR_VARS) 清除变量,并设置了模块名称为 ndkbuild,以及构建系统用于生成模块的源文件列表为 com_example_hello_HelloWorld.cpp

最后,使用 include $(BUILD_SHARED_LIBRARY) 进行动态库的构建,指定了链接的第三方库为 hello

你提到的报错 java.lang.UnsatisfiedLinkError: dlopen failed: library "D:/share/syyWorks/safecard/ProTest/app/src/main/obj/local/arm64-v8a/libhello.so" not found,可能是因为你导出的 .so 文件没有被正确地放置到 Android 工程的 libs/arm64-v8a 目录下。请确认你的文件路径和名称是否正确,并确保将 .so 文件正确放置到对应的目录中。

此外,还需要注意以下几点:

  1. 确保在 Android 工程的 build.gradle 文件中添加 ndk 配置,例如:
android {
  ... 
  externalNativeBuild {
    cmake {
      path "CMakeLists.txt"
    }
    ndk {
      moduleName "your-module-name"
      abiFilters "arm64-v8a" // 这里需要根据你的目标架构进行调整
    }
  }
}
  1. 确保在 Android Studio 的 Project Structure 中设置了 Native Dependencies,将你的 .so 文件添加进去。

  2. 确保你的 Android 工程的 libs/arm64-v8a 目录存在,并且将 .so 文件放置到该目录下。

  3. 如果你在编译时遇到了其他错误,例如 undefined reference,可能是链接库的顺序问题,可以通过修改 LOCAL_SHARED_LIBRARIES 的顺序进行解决。

希望以上解析和解决方法能够帮助你解决问题。

Android NDK Makefile 代码解析及常见错误:'java.lang.UnsatisfiedLinkError' 解决方案

原文地址: http://www.cveoy.top/t/topic/LJp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录