将自己的框架或库添加到AOSP

fir*_*exx 3 android android-source

我正在尝试将自定义包添加到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)
Run Code Online (Sandbox Code Playgroud)

在另一个框架中,我出去使用这个包.例如,在电话包中.

但不幸的是,电话框架无法使用我的软件包.我将我的软件包添加到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

我错过了什么?

编辑:设置include $(BUILD_STATIC_JAVA_LIBRARY)而不是include $(BUILD_JAVA_LIBRARY)在我的Makefile中,并将我的包添加到LOCAL_STATIC_JAVA_LIBRARIES框架中运行良好.然而:问题是为什么它不适用于非静态库.

nil*_*ilo 5

这是因为您需要本地库的权限文件.

跟着这些步骤:

  1. 将您的lib名称"mypackage"添加到LOCAL_JAVA_LIBRARIES您要使用它的软件包的Android.mk中.

  2. 像这样添加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>
Run Code Online (Sandbox Code Playgroud)

此文件必须放在设备的/ system/etc/permissions中.确保mypackage.jar位于设备上的指定位置.

  1. 在你的AndroidManifest中使用 <uses-library android:name="com.mypackage.platform_library" />

在这里你可以找到一个例子.

  • 该路径(/system/etc/permissions)用于构建ROM;我应该将该 XML 文件粘贴到 AOSP 中的何处(在编译之前)? (2认同)