如何使用 JNI 将本机 C++ 代码添加到 AOSP 应用程序?我正在尝试修改 EmbeddedKitchenSinkApp。我正在使用 Android 11

问题描述 投票:0回答:1

我正在尝试将本机 C++ 代码添加到应用程序中,但在执行时出现链接器错误。我猜测我的 Android.mk 文件中存在问题,或者我应该手动移动共享库?我正在分支 android11-release 上使用 AOSP 进行构建。

我将以下内容添加到现有

include $(BUILD_PACKAGE)
周围的厨房水槽应用程序的主 Android.mk 文件中:

LOCAL_JNI_SHARED_LIBRARIES := libjni_mylib

include $(BUILD_PACKAGE)

include $(call all-makefiles-under, $(LOCAL_PATH))

我添加了一个名为 jni 的目录,其中包含我的 C++ 源代码以及以下 Android.mk:

LOCAL_PATH:= $(call my-dir)

# MyLib
include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cpp
LOCAL_SDK_VERSION := 17
LOCAL_MODULE    := libjni_mylib
LOCAL_SRC_FILES := MyJniClient.cpp MyCode.cpp
LOCAL_PRODUCT_MODULE := true

LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops
LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)

当我运行应用程序并执行 JNI 函数时,它崩溃并出现以下错误:

E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libjni_mylib.so" not found

但是,我在目标(模拟器)上看到 /system/priv-app/MyKitchenSinkApp 包含 MyKitchenSinkApp.apk 和 lib/x86_64/libjni_mylib.so。为什么链接器无法找到共享目标文件?我还需要分享更多信息来提供帮助吗?

编辑:我发现 libjni_mylib.so 实际上只是 /system/lib64/libjni_mylib.so 的符号链接,而该链接并不存在。现在我不知道如何解决这个问题。似乎当我这样做时

make
即使到达了 makefile,它实际上也没有构建 .so 文件。

android makefile java-native-interface android-source android-11
1个回答
0
投票

原来我在 makefile 中的文件名有一个拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.