#android #android-source
#Android #android-исходный код
Вопрос:
Я создал пользовательский образ системы и поместил дополнительный APK в систему / приложение. Это вроде как работает, я могу запустить приложение, однако собственные библиотеки не загружаются (сбой LoadLibrary()). Когда я вызываю pm install
APK, все работает нормально, и загружается встроенная библиотека.
Я пришел к выводу, что APK не устанавливается должным образом. Я был бы признателен за любую информацию о поведении, которое я наблюдаю. Так ли это должно быть или я что-то упускаю? В какое время менеджер пакетов установит APK-файлы в app (или priv-app). Есть ли какая-то настройка устройства, которая запускается в какой-то момент?
Комментарии:
1. Что означает «поместить»? Он предварительно собран или собран как часть сборки AOSP? Если вы предоставите свой сценарий сборки (
Android.bp
илиAndroid.mk
), он расскажет нам больше.2. Это готовый APK
Ответ №1:
Предустановленные приложения на AOSP не столько устанавливаются, сколько «копируются».
Для того, чтобы готовые библиотеки также были «скопированы», вы должны указать их в своем Android.mk .
Вы делаете это, указывая LOCAL_PREBUILT_JNI_LIBS
на своем Android.mk .
Вот пример:
LOCAL_PATH := $(call my-dir)
my_archs := arm x86 arm64
my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))
include $(CLEAR_VARS)
LOCAL_MODULE := TestApp
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := TestApp.apk
LOCAL_PREBUILT_JNI_LIBS :=
@lib/arm64-v8a/libnoise.so
LOCAL_MODULE_TARGET_ARCH := $(my_src_arch)
include $(BUILD_PREBUILT)
Существует полезный инструмент, genandroidmk
который может генерировать это Android.mk для вас автоматически:
https://github.com/northbright/genandroidmk
Ответ №2:
Выполните следующие действия
-
Проверьте библиотеки готовых APK. Установите приложение на устройство (pm install), а затем откройте android studio (устройство с установленным apk, подключенное к ПК), нажмите View-> Tools windows-> Device file explorer. Он откроет проводник устройства в правой части, там перейдите в папку с данными и проверьте библиотеки в имени пакета вашего приложения.
-
скопируйте библиотеки и создайте папку в aosp_source / external / yourlibfolder и вставьте туда свои библиотеки.
-
Перейдите в build / target / product и запишите этот код в соответствующий файл make.
external/yourlibfolder/yourlibname.so:system/lib/yourlibname.so
external/yourlibfolder/yourlibname.so:system/lib64/yourlibname.so
- В AOSP будут добавлены библиотеки, зависящие от приложений. Теперь, когда вы добавляете свой готовый apk-файл в AOSP, он будет работать