Как интегрировать системное приложение на Android 9 - PullRequest
0 голосов
/ 14 июля 2020

Я создавал системное приложение на используемой отладочной плате Android 9. Приложение и JAR-файл dpendenced, использующий ServiceManager, выглядели успешно.

Но после записи system.img и перезапуска устройство автоматически выключается и переходит к Android экрану восстановления.

Что мне нужно сделать для правильной сборки системных приложений на Android 9?

У меня такое приложение.

/system/priv-app/SampServiceApp/SampServiceApp.apk, /oat
/system/framework/com.android.sampservice.jar, /oat
/system/etc/permissions/com.android.sampservice.xml

почти то же, что и в этом примере. (Я не хочу использовать system_server, если это возможно) https://devarea.com/aosp-creating-a-system-service/

но разница только в ... добавлено "LOCAL_PRIVATE_PLATFORM_APIS" вместо "LOCAL_SDK_VERSION" в Android .mk для SampServiceApp.apk (для успешной компиляции и компоновки)

# LOCAL_SDK_VERSION := current    
LOCAL_PRIVATE_PLATFORM_APIS := true

А также я попытался обновить этот xml. (https://source.android.google.cn/devices/tech/config/perms-whitelist)

/etc/permissions/privapp-permissions-platform.xml

но этот python скрипт не выводит никаких записей.

$ development/tools/privapp_permissions/privapp_permissions.py

↓↓ the result
<?xml version="1.0" encoding="utf-8"?>
<permissions>
</permissions>

Заранее благодарим вас за сотрудничество.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Oka, Для сборки вашего приложения как системного вам необходимо: Определить mk file. Должно получиться что-то вроде этого:

 include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java) $(call all-Iaidl-files-under, app/src/main/aidl)
LOCAL_AIDL_INCLUDES := \
    $(LOCAL_PATH)/app/src/main/aidl \
    $(CAR_BROADCASTRADIO_SUPPORTLIB_PATH)/src

LOCAL_PACKAGE_NAME := YOUR_MODULE_NAME
LOCAL_OVERRIDES_PACKAGES := IF YOU OVERRIDE AOSP PACKAGE
LOCAL_PRIVATE_PLATFORM_APIS := true

LOCAL_CERTIFICATE := platform
LOCAL_MANIFEST_FILE := /app/src/main/AndroidManifest.xml

LOCAL_PROGUARD_ENABLED := disabled

LOCAL_DEX_PREOPT := false

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

Конечно, вы можете использовать bp-файл вместо mk.

  1. Включить LOCAL_PACKAGE_NAME в device / path_to_your_lunch_target.

/ etc / permissions / privapp-permissions-platform. xml

Файл касается только разрешений. Здесь вы можете определить любое разрешение, которое может потребоваться для вашего приложения. Вы можете определить свой собственный манифест для своего приложения, но не забудьте включить его в сборку.

А как насчет cra sh. Это очень странное поведение. Не могли бы вы поделиться dmesg и logcat?

0 голосов
/ 17 июля 2020

Мне пришлось сделать две вещи.

  1. Отключение предварительной оптимизации Я не знаю, почему это вызывает ошибку sh.

    LOCAL_DEX_PREOPT: = false

  2. Настройка sepolicy Добавление правила в "public / servicemanager.te" у меня не сработало. Мое решение следующее.

устройство / производитель / имя-устройства / sepolicy / system_app.te

allow system_app my_service:service_manager add;

Другая политика такая же, как в этом примере. https://devarea.com/aosp-creating-a-system-service/# .XxEndSj7SUk

...