6

我按照本教程构建了一个 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: Library my_lib not found; 试过 [/vendor/lib/my_lib.so, /system/lib/my_lib.so]

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

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

提前致谢!

4

2 回答 2

11

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

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

于 2013-07-04T12:16:09.307 回答
1

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

第 1 步在 AOSP 源代码的外部文件夹中创建一个文件夹(比如说 myLibs)。

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

例如浏览器的 webkit、字体的 FreeType、数据库的 SqlLite 等等。随着更多功能被添加到 Android 中,更多的这些库包含在 external.xml 中。

步骤 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/ enter code hereframe eworks/base/core/jni/

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

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

于 2019-12-06T05:39:11.280 回答