Добавление собственной инфраструктуры или библиотеки в 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 находится в указанном месте на устройстве.
- В вашем AndroidManifest используйте
<uses-library android:name="com.mypackage.platform_library" />
Здесь вы можете найти пример.