Как добавить собственный код C++ в приложение AOSP с помощью JNI? Я пытаюсь изменить EmbeddedKitchenSinkApp. Я работаю с Android 11

Я пытаюсь добавить в приложение собственный код C++, но при выполнении получаю ошибку компоновщика. Я предполагаю, что где-то в моих файлах Android.mk есть проблема, или, может быть, мне следует просто вручную переместить общую библиотеку? Я создаю AOSP на ветке android11-release.

Я добавил следующее в основной файл Android.mk для приложения кухонной мойки вокруг существующего include $(BUILD_PACKAGE):

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, файл .so на самом деле не создается, даже если файл makefile достигнут.

Вы встраиваете раздел продуктов? здесь для LOCAL_PRODUCT_MODULE установлено значение true

Ashok Mutyala 17.04.2024 05:59
0
1
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, у меня была опечатка в имени файла в make-файле.

Другие вопросы по теме