Когда устанавливаются APK-файлы в системе / приложении?

#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, он будет работать