Добавление собственной инфраструктуры или библиотеки в AOSP

Я пытаюсь добавить свой пользовательский пакет в AOSP в frameworks/opt/mypackage.

Я предоставил Android.mk Makefile со следующим содержимым:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := mypackage
include $(BUILD_JAVA_LIBRARY)

В другой структуре я не использовал этот пакет. Например, в пакете телефонии.

Но, к сожалению, инфраструктура телефонии не может использовать мой пакет. Я добавил свой пакет к переменной LOCAL_JAVA_LIBRARIES в телефонии Android.mk, но когда код выполняется, он дает мне 01-11 16:51:01.835: E/AndroidRuntime(1789): java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

Я что-то пропустил?

EDIT: установка include $(BUILD_STATIC_JAVA_LIBRARY) вместо include $(BUILD_JAVA_LIBRARY) в моем Makefile и добавление моего пакета в LOCAL_STATIC_JAVA_LIBRARIES для фреймворков. Тем не менее: вопрос в том, почему он не работает с нестатической библиотекой.

Ответ 1

Это потому, что вам нужен файл разрешений для локальных библиотек.

Выполните следующие действия:

  • добавьте ваше имя lib "mypackage" в LOCAL_JAVA_LIBRARIES в ваш Android.mk пакета, который вы хотите использовать.

  • добавить файл разрешения xml следующим образом:

com.mypackage.platform_library.xml

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <library name="com.mypackage.platform_library"
        file="/system/framework/com.mypackage.platform_library.jar"/>
</permissions>

Этот файл должен быть помещен в /system/etc/permissions на устройстве. Убедитесь, что ваш файл mypackage.jar находится в указанном месте на устройстве.

  1. В вашем AndroidManifest используйте <uses-library android:name="com.mypackage.platform_library" />

Здесь вы можете найти пример.