importing custom SO file to AOSP

Ark*_*ady 6 android native android-source

I've built an AOSP system service following this tutorial: 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)
Run Code Online (Sandbox Code Playgroud)

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需要它吗?也许我应该在系统的某个地方注册?

提前致谢!

Ark*_*ady 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
Run Code Online (Sandbox Code Playgroud)

到full.mk文件.它的位置是:android-source/build/target/product也把my_lib.so放在它附近(如路径所示)

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

  • 或者将您的库添加到device.mk文件中的"PRODUCT_PACKAGES + =\my_lib.so" (5认同)