импорт пользовательского файла SO в AOSP

Я создал системную службу AOSP, следуя этому руководству: http://www.androidenea.com/2009/12/adding-system-server-to-android.html

Теперь я хочу использовать предварительно скомпилированный файл .so и не могу понять, куда его поместить, чтобы мой код мог получить к нему доступ.

Итак, я создал папку в framewaork/base/libs/my_folder/ и поместил туда два файла: my_lib.so android.mk

содержание android.mk:

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

LOCAL_MODULE:= my_lib
LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

make запустился без ошибок, но когда код попытался загрузить библиотеку через: System.loadLibrary("my_lib");

я получил эту ошибку:

06-27 13:58:55.581: E/AndroidRuntime(806): причина: java.lang.UnsatisfiedLinkError: библиотека my_lib не найдена; попробовал [/vendor/lib/my_lib.so, /system/lib/my_lib.so]

поэтому я добавил файл so в out/target/product/generic/system/lib, но получил ту же ошибку.

так где я должен разместить файл my_lib.so? и нужен ли для этого android.mk? может быть, я должен зарегистрировать его где-нибудь в системе?

Заранее спасибо!


person Arkady    schedule 27.06.2013    source источник


Ответы (2)


Итак, ответ был довольно прост. Мне действительно нужно скопировать мою библиотеку в образ системы, в папку system/lib, потому что команда make не копирует ее из out/target/product/generic/system/lib в system.img

хитрость заключается в том, чтобы добавить эту строку

  PRODUCT_COPY_FILES += $(LOCAL_PATH)/my_lib.so:system/lib/my_lib.so

в файл full.mk. его местоположение: android-source/build/target/product также поместите my_lib.so рядом с ним (как видно по пути)

если вы планируете запускать образ на реальном устройстве, добавьте эту строку после определения имени устройства. напр. если вы работаете на Nexus 4, поместите его в android-source/device/lge/mako/full_mako.mk

person Arkady    schedule 04.07.2013
comment
Или добавьте свою библиотеку в PRODUCT_PACKAGES +=\my_lib.so в файле device.mk - person Veaceslav Gaidarji; 11.07.2013
comment
@Аркадий, подскажите, пожалуйста, куда именно нужно добавить PRODUCT_COPY_FILES? Потому что я тоже столкнулся с той же проблемой. stackoverflow.com/questions/60947912/ - person Shadow; 01.04.2020

Вы можете добавить готовую библиотеку в исходный код Android AOSP, и она станет частью образа системы AOSP. Я описываю пошаговую процедуру для этого.

Шаг 1 Создайте папку (скажем, myLibs) внутри внешней папки исходного кода AOSP.

внешняя папка исходного кода AOSP относится к внешним библиотекам с открытым исходным кодом. Это означает библиотеки, от которых зависит платформа Android, но которые в первую очередь не разрабатываются и не поддерживаются проектом с открытым исходным кодом Android.

примерами являются webkit для браузера, FreeType для шрифтов, SqlLite для баз данных и так далее. По мере того, как в Android добавляется больше функций, все больше этих библиотек включается во внешние файлы.

Шаг 2 Создайте файл Android.mk

Создайте файл Android.mk в своей папке (скажем, myLibs) и скопируйте в него файл .so.
Вы можете использовать следующий контент для файла android.mk.

# Prebuilt Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libMyabc # your lib name
LOCAL_SRC_FILES := libMyabc.so
# your lib .so file name
include $(BUILD_SHARED_LIBRARY)

Шаг 3 Добавьте свою библиотеку в Framework

На последнем этапе вам нужно добавить свою библиотеку в make-файл платформы Android AOSP, чтобы она распознавалась и собиралась как часть образа системы.
Вы найдете файл Framework Android.mk в следующем месте
/android_aosp_sourcecode_download_folder/framenter code hereeworks/base /ядро/Джни/

Откройте файл Android.mk и добавьте свою библиотеку в следующий раздел
LOCAL_SHARED_LIBRARIES := \
Вы можете указать имя своей библиотеки в этом разделе пример libMyabc \

Вот и все... теперь сделайте это (сделайте -j4), и вы найдете добавленный файл so в следующей папке
/android_aosp_sourcecode_download_folder/out/target/product/generic/obj/lib
с именем файла, например: - libMyabc .so и libMyabc.so.toc
и вы также нашли его в папке system/lib
/android_aosp_sourcecode_download_folder/out/target/product/system/lib

person Budhdi Sharma    schedule 06.12.2019