将自定义SO文件导入AOSP

时间:2013-06-27 14:11:33

标签: android native android-source

我按照本教程构建了一个AOSP系统服务: http://www.androidenea.com/2009/12/adding-system-server-to-android.html

现在我想使用预编译的.so文件,无法确定放置它的位置,以便我的代码能够访问它。

所以,我在framewaork / base / libs / my_folder /创建了一个文件夹 并把两个文件: my_lib.so android.mk

android.mk的内容是:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE:= my_lib
LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

make运行没有错误,但是当代码尝试通过以下方式加载库时:     的System.loadLibrary( “my_lib”);

我收到了这个错误:

06-27 13:58:55.581:E / AndroidRuntime(806):引起:java.lang.UnsatisfiedLinkError:未找到my_lib库;试过[/vendor/lib/my_lib.so,/system/lib/my_lib.so]

所以我将so文件添加到out / target / product / generic / system / lib 但得到了同样的错误。

那么我应该在哪里放置my_lib.so文件?它是一个android.mk需要它吗? 也许我应该在系统的某个地方注册?

提前致谢!

2 个答案:

答案 0 :(得分:10)

所以答案很简单。 我真的需要将我的lib复制到系统映像到system / lib文件夹,因为make命令不会将它从out / target / product / generic / system / lib复制到system.img

诀窍是添加这一行

  PRODUCT_COPY_FILES += $(LOCAL_PATH)/my_lib.so:system/lib/my_lib.so

到full.mk文件。它的位置是: 机器人 - 源极/建立/目标/产物 还把my_lib.so放在它附近 (如路径所示)

如果您计划在真实设备上运行图像,请在设备名称定义后添加此行。 f.ex.如果您在Nexus 4上运行,请将其放在android-source / device / lge / mako / full_mako.mk

答案 1 :(得分:0)

您可以在Android AOSP源代码中添加预构建的库,并且该库是AOSP系统映像的一部分。我正在描述它的分步过程。

步骤1在AOSP源代码的外部文件夹中创建一个文件夹(假设为myLibs)。

AOSP源代码的

外部文件夹是指外部开放源代码库。 这意味着Android平台依赖但不是主要由Android开放源代码项目开发和维护的库。

示例是用于浏览器的Webkit,用于字体的FreeType,用于数据库的SqlLite等。随着向Android添加更多功能,这些库中的更多库将包含在外部中。

第2步创建一个Android.mk文件

在文件夹中创建一个Android.mk文件(假设为myLibs),然后在其中复制.so文件。
您可以将以下内容用于android.mk文件

# Prebuilt Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libMyabc # your lib name
LOCAL_SRC_FILES := libMyabc.so
# your lib .so file name
include $(BUILD_SHARED_LIBRARY)

第3步在Framework中添加您的库

最后一步,您必须在Android AOSP框架makefile中添加库,以便它可以识别并构建为系统映像的一部分。
您可以在以下位置找到Framework Android.mk文件
/ android_aosp_sourcecode_download_folder / fram enter code here eworks / base / core / jni /

打开Android.mk文件,并在以下部分中添加您的库
LOCAL_SHARED_LIBRARIES:= \
您可以将库名称放在该部分示例libMyabc \

中。

就是这样...现在制作它(make -j4),您可以在以下文件夹中找到添加的so文件
/ android_aosp_sourcecode_download_folder / out / target / product / generic / obj / lib
文件名如:-libMyabc.so和libMyabc.so.toc
并且您还在system / lib文件夹中找到了它
/ android_aosp_sourcecode_download_folder / out / target / product / system / lib

相关问题