如何在 Android 9 上集成系统应用程序

How do I integrate a system app on Android 9

我一直在使用 Android 9.
的调试板上创建系统应用程序 使用 ServiceManager 的应用程序和依赖的 JAR 看起来构建成功。

但是,在写入 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 (编译 & link 成功)

# 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>

预先感谢您的合作。

好的, 要构建类似系统的应用程序,您应该: 定义 mk 文件。应该是这样的:

 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

该文件仅与权限有关。您可以在此处定义您的应用程序可能需要的任何权限。您可以为您的应用程序定义自己的清单,但不要忘记将其包含在构建中。

崩溃呢。这是一种非常奇怪的行为。你能分享 dmesg 和 logcat 吗?

我必须做两件事。

  1. 禁用预优化
    我不知道为什么会导致崩溃。

    LOCAL_DEX_PREOPT := 假

  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