Включите .so в системное приложение android.mk

У меня есть APK, содержащий код Java и несколько файлов .so. Я создал APK в Android Studio, и теперь этот APK должен быть частью папки /system/app/ в моем пользовательском ПЗУ.

Код Java + .so = APK

Чтобы включить его в system/app/, у меня есть приведенный ниже скрипт сборки в файле Android.mk, и я вызываю его из файла device.mk.

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := utility
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := utility.apk
include $(BUILD_PREBUILT)

После создания образа я обнаруживаю, что мой APK дает сбой, а в журнале написано «Невозможно связать исполняемый файл», и все файлы .so отсутствуют. Однако APK работает, если я использую утилиту установки adb.apk.

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

P.S.: Я искал в папках /data/data/com.org.utility/, /system/lib/, но не нашел файлов .so. Но если я использую установку adb, файлы .so находятся внутри папки /data/data/com.org.utility/lib/x86/.


person user3022690    schedule 21.08.2018    source источник


Ответы (1)


Не помню в L или M, там баг в системе сборки.

Таким образом, apk, встроенный в system/app или system/priv-app, не может быть выпущен в систему. Но стороннее приложение может выпускать там библиотеки с помощью PackageManagerService.

Одно из решений: 1. Выпуск файла so в apk вручную. 2. Добавьте так, относящееся к Android.mk, например:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := test
    LOCAL_SRC_FILES := libtest.so
    include $(PREBUILT_SHARED_LIBRARY)
  1. Добавьте это имя модуля в PRODUC_PACKAGES micro.

Они так в вашем приложении будут встроены в вашу систему/lib или lib64.

Удачи.

person lemac    schedule 21.08.2018
comment
Этот подход работает, если у нас есть доступ к кодовой базе. Для включения сторонних APK в систему/приложение это решение неприменимо. - person user3022690; 21.08.2018
comment
@ user3022690 Вы можете самостоятельно извлечь все файлы .so из стороннего APK. В конце концов, это всего лишь подписанный ZIP-файл. Я считаю, что вам даже не нужно переупаковывать этот APK, устаревшие файлы .so не повредят. - person Alex Cohn; 21.08.2018
comment
Ну и 1. если можно сделать apk на Android.mk, то можно и так сделать. 2. Если вы не можете получить доступ к исходному коду, и вам нужно поместить свой apk в system/app, у вас есть root-права, в этой ситуации вы можете выпустить так и поместить их также в system/lib. 3. Если у вас нет рута, вы должны установить apk через adb или каким-либо другим способом, PMS выпустит ваши либы, и этой проблемы не произойдет. - person lemac; 21.08.2018