将自定义SO文件导入AOSP

问题描述 投票:6回答:2

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

现在,我想使用一个预编译的.so文件,并且无法弄清楚将其放在哪里,因此我的代码将能够访问它。

所以,我在framewaork / base / libs / my_folder /下创建了一个文件夹并放两个文件:my_lib.soandroid.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吗?也许我应该在系统上的某个地方注册它?

提前感谢!

android native android-source
2个回答
10
投票

所以答案很简单。我真的需要将我的库复制到系统映像,再复制到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文件。它的位置是:android-source / build / target / product也把my_lib.so放在附近(如路径所示)

如果打算在实际设备上运行映像,请在设备名称定义之后添加此行。例如如果您在Nexus 4上运行,请将其放在android-source / device / lge / mako / full_mako.mk


0
投票

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

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

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

示例是浏览器的Webkit,字体是FreeType,数据库是SQLite,等等。随着向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/frameworks/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

© www.soinside.com 2019 - 2024. All rights reserved.